目标是将外部属性添加到topojson。我已经成功地将来自各个国家的http://www.diva-gis.org/gdata的shapefile转换为json文件。我还成功地将这些文件降采样为更前端友好的文件大小。像这样:
shp2json CHN_adm0.shp --out CHN_adm0.json
geo2topo CHN_adm0.json > china.json
shp2json CHN_adm1.shp --out CHN_adm1.json
geo2topo CHN_adm1.json > china.json
toposimplify -s 1e-9 -f < china.json > china-topo.json
toposimplify -s 1e-9 -f < china1.json > china1-topo.json
然后,我将国家/地区级多边形与省/州级多边形合并。如果this是正确的,也许这是我可以附加外部属性的地方,但是正如您将看到的,我可能还有其他障碍:
geo2topo regions=CHN_adm1.json country=CHN_adm0.json > china-regions-topo.json
toposimplify -s 1e-9 -f < china-regions-topo.json > china-regions.json
目前我不确定的是如何将属性附加到diva-gis的数据中。这是dict / object以及我的china-regions.json最终结果的相关键的示例切片(注意:我正在使用python探索json文件,但我实际上并不会使用python做任何事情其他问题):
len(json['objects']['regions']['geometries'])
>> 31 ## 31 provinces in China
json_data['objects']['regions'].keys()
>> dict_keys(['type', 'bbox', 'geometries']) ## seems like there is nothing to map to, like an id or province name
如何将外部属性添加到已从diva-gis的shapefile转换为的topojson中?似乎没有内容可以映射。浏览数据后,我什至不知道哪个省。这只是弧的列表-可以在地图上绘制得足够好,但是人类无法直观地辨别哪个省。
进一步的说明:
答案 0 :(得分:0)
您即将找到一个标识符-它们通常是每种几何形状的大子代:
topojson.objects.regions[n].geometry.properties.property // where property is a column in the original shapefile.
对于shp2json,您不能使用--geometry或--ignore-properties,否则您将忽略dbf文件。 dbf文件包含每个功能的属性
这些属性是shapefile属性表的列。如果您在此处没有任何内容,则表示转换过程中没有包含保存此数据的dbf文件。
仅使用javascript,我可能会通过以下方式获得每个几何的属性列表:
// Get the geometries:
var regions = data.objects.regions.geometries;
// List of properties present (in first element anyways):
console.log(Object.keys(regions[0].properties));
要使用javascript和d3的map方法添加新属性,我可以使用:
// Create a map to look up regions:
var map = d3.map(regions, function(d) { return d.properties.NAME_1; });
// Get by Name_1:
console.log(map.get("ExampleName"));
// New data to join to topojson:
var dataToAttach = [
{ region: "A", capital: "X" },
{ region: "B", capital: "Y" },
{ region: "C", capital: "Z"} //...
]
// Add new property:
dataToAttach.forEach(function(d) {
map.get(d.region).capital = d.capital;
})
这里最常见的问题是标识符与您要加入的表格数据不完全匹配,或者根本不匹配,这通常需要修补。
Here's的上述实现(尽管在客户端中),使用数据并将数据添加到根据diva gis数据创建的topojson中。