如何向topojson文件添加属性?

Hug*_*lpz 18 json topojson

给定一个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#codetopojson.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_2topojson.jsoncode从塔data.tsv).

然后,输出属性"失业"是从外部数据文件unemployment.tsv生成的,它定义了输入属性"rate"

在我们的例子中,-p code_2,state=name指定我们将保留code_2属性,我们将name属性重命名为state.前面提到的文档维基中的属性外部属性部分在这个问题上非常有用.

  • 嗨,我通过了答案并形成了下面的命令,但现在topojson被重命名为geo2topo命令.geo2topo -o output.json -e data1.csv --id-property = adm1_code,code -p adm1_code,statename = state - states_topo.json.此命令无效.为了添加额外的属性,除了geo2topo之外还有不同的命令名吗? (3认同)