我玩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);
});
答案 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文件。