TopoJSON‹‹;属性››;字段,如何使用d3.js获取值?

TopoJSON‹‹;属性››;字段,如何使用d3.js获取值?,d3.js,topojson,D3.js,Topojson,我有一个JSON文件,它看起来像这样: {“类型”:“拓扑”、“变换”:{“比例”:[0.03600360003702599,0.0040674580654071245],“转换”:[-179.99996702229,41.18684289776669],“对象”:{“国家”:{“类型”:“几何体”:[0],[0],“属性”:{“面积”:29809500,“周长”:21822.4,“区域”:“XYZ”}, 我想在我的d3.js代码中使用属性(“面积”、“周长”、“区域”)的值。我试图获取一些值,

我有一个JSON文件,它看起来像这样:

{“类型”:“拓扑”、“变换”:{“比例”:[0.03600360003702599,0.0040674580654071245],“转换”:[-179.99996702229,41.18684289776669],“对象”:{“国家”:{“类型”:“几何体”:[0],[0],“属性”:{“面积”:29809500,“周长”:21822.4,“区域”:“XYZ”},

我想在我的d3.js代码中使用属性(“面积”、“周长”、“区域”)的值。我试图获取一些值,但没有成功:

我做错了什么

UPD:问题在@ChrisWilson的帮助下得到了解决,问题在于追加了一条路径,而不是选择所有路径。工作代码(对于topojson.v0.js):


对于topojson.v1.js,请使用
topojson.feature
方法(查看下面的注释)。

您似乎正在制作一个大型地图,而不是一系列表示国家的
路径
对象。请尝试以下操作:

d3.json("map_topo.json", function(error, map) {
    svg.selectAll("path")
       .data(topojson.feature(us, us.objects.counties).features)
       .enter()
       .append("path")
       .attr("d", path)
       .style("fill", function(d) {
           if (d.properties.region == "XYZ")
               {return "red"}
           else {return "gray"}
       });
我不能确定在没有看到TopoJSON文件的情况下该方法是否有效,但基本上您需要一个生成数组的
TopoJSON
方法


请参阅,以获得一个好的示例:使用
.mesh()
将州映射为一个路径,而县映射为单独的对象,如上面的代码。

您的代码返回
类型错误:topojson.feature不是一个函数
。但是您正确地理解了一个关于svg的大型映射。selectAll(“路径”)。我尝试了这个方法,效果很好!(P.S.无法处理注释中的代码列表,4个空格的缩进不起作用,只是无法读取的代码mess=()是的,但我不知道如何在这里正确使用。您需要升级到TopoJSON客户端库的v1版本(或).v1版本将
topojson.object
替换为
topojson.feature
;行为类似,但新的
topojson.feature
方法返回一个feature或FeatureCollection(而不是几何体或GeometryCollection),以更好地与GeoJSON兼容。
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"}
}); 
d3.json("map_topo.json", function(error, map) {
    svg.selectAll("path")
       .data(topojson.feature(us, us.objects.counties).features)
       .enter()
       .append("path")
       .attr("d", path)
       .style("fill", function(d) {
           if (d.properties.region == "XYZ")
               {return "red"}
           else {return "gray"}
       });