我有一个特殊情况,我不想将我生成的topojson文件的路径添加到DOM,而是只获取生成的d
属性(SVG路径)。
所以我通常会做这样的事情:
let features = feature(landmass, landmass.objects.land).features
let projection = d3.geoAzimuthalEqualArea()
.center([180, -180])
.fitSize([width, height], { type: "FeatureCollection", features: features })
let path = d3.geoPath().projection(projection)
g.selectAll("#landmass")
.data(features)
.enter().append("path")
.attr("id", "landmass")
.attr("d", path);
但是我实际上只是希望使用所选的features
将geoPath
转换为路径,而无需在DOM中添加任何svg对象。
我该如何实现?
D3在path generators地理区域上的文档已覆盖(强调我的内容:]
,即路径命令-然后将其分配给[地理路径生成器d3.geoPath与d3形状中的形状生成器相似:给定GeoJSON几何或要素对象,它生成SVG路径数据字符串或将路径呈现到Canvas。] >
您可以将GeoJSON功能传递到路径生成器,并使其创建路径数据
d
元素的<path>
属性。这基本上是在编码时完成的操作.data(features) // ... enter, append, etc... .attr("d", path);
此语句可以重写为:
.data(features) // ... enter, append, etc... .attr("d", d => path(d));
或更确切地说是:
.data(features) // ... enter, append, etc... .attr("d", feature => path(feature));
通过查看后面的代码,可以清楚地看到D3通过其数据绑定方法为每个要素创建一个
<path>
元素,并将该要素(即绑定了<path>
元素的基准)传递给路径生成器[C0 ]创建path
属性的路径命令字符串。
借助此知识,您可以轻松地为所有功能创建路径数据字符串,而无需创建任何DOM节点:
d