给定一个data.tsv文件:
id code name
1 AL Alabama
2 AK Alaska
4 AZ Arizona
5 AR Arkansas
6 CA California
... ... ...
Run Code Online (Sandbox Code Playgroud)
给定topojson.json文件:(结构正确,数值是随机的)
{
"type":"Topology",
"transform":
{
"scale": [0.0015484881821515486,0.0010301030103010299],
"translate":[-5.491666666666662,41.008333333333354]
},
"objects":
{
"states":
{
"type":"GeometryCollection",
"geometries":
[
{"type":"Polygon","arcs":[[0]],"properties":{"code_2":"AL"}},
{"type":"Polygon","arcs":[[1]],"properties":{"code_2":"AK"}}
]
}
},
"arcs":
[
[[2466,9916],[-25,-5],[3,-13]],
[[2357,9852],[1,-2],[1,-2]]
]
}
Run Code Online (Sandbox Code Playgroud)
如何使用公共字段(1)将其他字段(2)的值注入json文件?
1]:data.txt#code和topojson.txt.objects.states.geometries.properties.code_2
2]: data.txt#name
最终结果应包含:
{"type":"Polygon","arcs":[[0]],"properties":{"code_2":"AL", "name":"Alabama" }},
{"type":"Polygon","arcs":[[1]],"properties":{"code_2":"AK", "name":"Alaska" }},
Run Code Online (Sandbox Code Playgroud)
编辑:接受的答案:
topojson -o final.json -e data.tsv --id-property=code_2,code -p code_2,state=name -- topojson.json
Run Code Online (Sandbox Code Playgroud)
Ale*_*ici 17
试试这个:
topojson -o final.json -e data.tsv --id-property=code_2,code -p code_2,state=name -- topojson.json
Run Code Online (Sandbox Code Playgroud)
哪个应该输出:
{
"type": "Topology",
"transform": {
"scale": [
0.000016880209206372492,
0.000007005401010148724
],
"translate": [
-1.8418800213354616,
51.15278777877789
]
},
"objects": {
"states": {
"type": "GeometryCollection",
"geometries": [
{
"type": "Polygon",
"arcs": [
[
0
]
],
"id": "AK",
"properties": {
"code_2": "AK",
"state": "Alaska"
}
}
]
}
},
"arcs": [
[
[
0,
588
],
[
92,
-294
],
[
91,
-294
],
[
-183,
588
]
]
]
}
Run Code Online (Sandbox Code Playgroud)
从命令行参考维基:
-要提升为几何ID的要素属性的属性名称
通过使用code_2具有此选项的属性,可以将其作为功能ID进行提升.
在输入属性名称前面添加一个+,将其值强制转换为数字.
加:
如果--id-property引用的属性为null或未定义,则会从输出几何对象中省略它们.因此,如果输入要素没有具有指定名称的属性,则生成的对象可能没有定义的ID.
因此,当您使用+codeand时+code_2,它们可能是undefined,因为您无法将AK字符串值转换为数字.
这里,输入属性"FIPS"被强制为一个数字并用作特征标识符; 同样,名为"FIPS"的列用作CSV文件中的标识符.(如果您的CSV文件为要素标识符使用不同的列名称,则可以指定多个ID属性,例如
--id-property=+FIPS,+id.)
这就是为什么你必须添加code的--id-property=code_2,code选项.这是映射如何制备(在code_2从topojson.json和code从塔data.tsv).
然后,输出属性"失业"是从外部数据文件unemployment.tsv生成的,它定义了输入属性"rate"
在我们的例子中,-p code_2,state=name指定我们将保留code_2属性,我们将name属性重命名为state.前面提到的文档维基中的属性和外部属性部分在这个问题上非常有用.