我有一个TopoJSON文件,内容如下:
{"type":"Topology","transform":{"scale":[0.03600360003702599,0.0040674580654071245],"translate":[-179.9999967702229,41.18684289776669],"objects":{"country":{"type":"GeometryCollection","geometries":[{"type":"Polygon","arcs":[[0]],"properties":{"AREA":29809500,"PERIMETER":21822.4,"region":"XYZ"}},…
我想在我的d3.js代码中使用属性的值("AREA","PERIMETER","region")。我尝试获取一些值,但没有成功:
d3.json("map_topo.json", function(error, map) {
svg.append("path")
.datum(topojson.object(map, map.objects.country).geometries)
.attr("d", path)
.style("fill", function(d) {
if (d.properties.region == "XYZ")
{return "red"}
else {return "gray"}
})
我做错了什么? < p > < em >更新:在 @ChrisWilson 的帮助下解决了问题,问题在于添加了一个路径,而不是选择所有路径。工作代码(针对 topojson.v0.js):
d3.json("map_topo.json", function(error, map) {
svg.selectAll("path")
.data(topojson.object(map, map.objects.country).geometries)
.enter().append("path")
.attr("d", path)
.style("fill", function(d) {
if (d.properties.region == "XYZ")
{return "red"}
else {return "gray"}
});
对于topojson.v1.js,请使用topojson.feature
方法(请查看下面的注释)。
TypeError: topojson.feature 不是一个函数。
- KoGortopojson.feature
替换了topojson.object
;行为类似,但新的topojson.feature
方法返回Feature或FeatureCollection(而不是Geometry或GeometryCollection),以更好地与GeoJSON兼容。 - mbostock