topojson.object在topojson V1中

时间:2013-05-24 16:34:37

标签: d3.js geojson topojson

我玩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);
});

2 个答案:

答案 0 :(得分:15)

您可以改用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/

答案 1 :(得分:4)

  

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

来自this thread的@ mbostock的话。因此,只需将代码中的一个字符串更改为:.data(topojson.feature(ma, ma.objects.ma).features)。我猜你也应该用GeoJSON的v1重新生成你的TopoJSON文件。