【问题标题】:Zoom to bounding box without topoJSON缩放到没有 topoJSON 的边界框
【发布时间】:2018-11-07 19:35:48
【问题描述】:
Mike Bostock 的“缩放到边界框”示例假定您使用的是 topoJSON。
https://bl.ocks.org/mbostock/4699541
如何修改脚本以便您也可以将它与 geoJSON 数据一起使用?具体来说,我的脚本不会使用以下内容:
.data(topojson.feature(us, us.objects.states).features)
但是像这样:
.data(collection.features)
【问题讨论】:
标签:
javascript
d3.js
geojson
topojson
【解决方案1】:
该块实际上已经使用 geojson - d3 geoPath 不绘制 topojson 对象,它绘制 geojson 对象:
路径(对象[,参数…])
渲染给定的对象,可以是任何 GeoJSON 特征或几何图形
对象
... (link)
让我们看看你的例子:
.data(topojson.feature(us, us.objects.states).features)
topojson.feature(us, us.objects.states) 返回一个特征集合,一个 geojson 特征集合。
.features 访问特征集合的特征(本例中为多边形数组)。
提供给 .data() 的内容已经是 geojson。所以我们可以按照你的建议使用.data(geojson.features)(如果我们有一个特征集合,否则我们可以只使用一个geojson对象数组)。
我们可以通过您的示例以两种方式演示 - 在浏览器 here 中使用 topojson 将您的数据预转换为 geojson,或者我们可以加载一个 geojson 文件并完全放弃从 topojson 的转换,如 here 所示。