如何获取topojson文件的svg路径而不将其添加到d3.js中的DOM?

问题描述 投票:1回答:1

我有一个特殊情况,我不想将我生成的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);

但是我实际上只是希望使用所选的featuresgeoPath转换为路径,而无需在DOM中添加任何svg对象。

我该如何实现?

javascript d3.js svg geojson topojson
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.