如何在不将其添加到 DOM 的情况下获取 TopoJSON 功能的 SVG 路径数据?
How to get SVG path data of TopoJSON feature without adding it to the DOM?
我有一个特殊情况,我不想将生成的 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 你了解了吗(强调我的):
The geographic path generator, d3.geoPath, is similar to the shape generators in d3-shape: given a GeoJSON geometry or feature object, it generates an SVG path data string or renders the path to a Canvas.
您可以将 GeoJSON 特征传递给路径生成器,并让它创建 路径数据——即路径命令——然后分配给 <path>
元素的 d
属性。这基本上就是 coding
时发生的情况
.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>
的数据元素,到路径生成器 path
以创建 d
属性 的路径命令字符串。
有了这些知识,您可以轻松地为所有功能创建路径数据字符串,而无需创建任何 DOM 个节点:
const pathData = features.map(feature => path(feature));
更简洁,你可以将生成器函数传递给 .map()
:
const pathData = features.map(path);
我有一个特殊情况,我不想将生成的 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 你了解了吗(强调我的):
The geographic path generator, d3.geoPath, is similar to the shape generators in d3-shape: given a GeoJSON geometry or feature object, it generates an SVG path data string or renders the path to a Canvas.
您可以将 GeoJSON 特征传递给路径生成器,并让它创建 路径数据——即路径命令——然后分配给 <path>
元素的 d
属性。这基本上就是 coding
.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>
的数据元素,到路径生成器 path
以创建 d
属性 的路径命令字符串。
有了这些知识,您可以轻松地为所有功能创建路径数据字符串,而无需创建任何 DOM 个节点:
const pathData = features.map(feature => path(feature));
更简洁,你可以将生成器函数传递给 .map()
:
const pathData = features.map(path);