11

我玩 topojson 玩得很开心,但看起来 topojson.object 在 topojson 的 V1 中是未定义的,V0 中支持它。有人可以解释我如何解决这个问题吗?我正在尝试为格式为 topojson 的输入文件中的每个多边形绘制不同的路径元素。代码是:

d3.json("maTopo.json", function(error, ma) {
    svg.selectAll(".subunit")
      .data(topojson.object(ma, ma.objects.ma).geometries)
    .enter().append("path")
      .attr("class", function(d) { return "subunit " + d.id; })
      .attr("d", path);
});
4

2 回答 2

17

你可以topojson.feature改用。

d3.json("maTopo.json", function(error, ma) {
  svg.selectAll(".subunit")
      .data(topojson.feature(ma, ma.objects.ma).features)
    .enter().append("path")
      .attr("class", function(d) { return "subunit " + d.id; })
      .attr("d", path);
});

可以在此处找到详细示例:http: //bost.ocks.org/mike/map/

于 2013-05-24T17:19:01.027 回答
4

v1 版本将 topojson.object 替换为 topojson.feature;行为类似,但新的 topojson.feature 方法返回 Feature 或 FeatureCollection(而不是 Geometry 或 GeometryCollection)以更好地与 GeoJSON 兼容。

@mbostock 在这个帖子中的话。因此,只需将代码中的一个字符串更改为:.data(topojson.feature(ma, ma.objects.ma).features). 而且我猜您还应该使用来自 GeoJSON 的 v1 重新生成您的 TopoJSON 文件。

于 2013-05-27T15:40:13.617 回答