20

次のような data.tsv ファイルがあるとします。

id  code    name
1   AL  Alabama
2   AK  Alaska
4   AZ  Arizona
5   AR  Arkansas
6   CA  California
... ... ...

次のような 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]]
    ]
}

共通フィールド(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" }},

編集:受け入れられた答え:

topojson -o final.json -e data.tsv --id-property=code_2,code -p code_2,state=name -- topojson.json
4

2 に答える 2

18

これを使用してみてください:

topojson -o final.json -e data.tsv --id-property=code_2,code -p code_2,state=name -- topojson.json

どちらが出力されますか:

{
    "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
            ]
        ]
    ]
}

コマンド ライン リファレンス wikiから:

--id-propertyジオメトリ ID にプロモートする機能プロパティの名前

このオプションでプロパティを使用することによりcode_2、機能 ID としてプロモートします。

入力プロパティ名の前に+を追加して、その値を強制的に数値にします。

プラス:

--id-propertyによって参照されるプロパティが null または未定義の場合、それらは出力ジオメトリ オブジェクトから省略されます。したがって、入力フィーチャに指定された名前のプロパティがない場合、生成されたオブジェクトに定義済みの ID がない場合があります。

したがって、 と を使用して+codeいる場合、文字列値を数値に変換できないため、+code_2おそらくです。undefinedAK

ここでは、入力プロパティ「FIPS」が数値に強制され、機能識別子として使用されます。同様に、「FIPS」という名前の列が CSV ファイルの識別子として使用されます。(CSV ファイルで特徴識別子に別の列名を使用している場合は、 などの複数の id プロパティを指定できます--id-property=+FIPS,+id。)

そのcodeため、--id-property=code_2,codeオプションに を追加する必要があります。これがマッピングの作成方法です ( topojson.json からと data.tsvからcode_2の列) 。code

次に、出力プロパティ「unemployment」は、入力プロパティ「rate」を定義する外部データ ファイル unemployment.tsv から生成されます。

この場合、はプロパティ-p code_2,state=nameを保持することを指定し、プロパティcode_2の名前を に変更します。前述のドキュメンテーション wikiの [プロパティ]および[外部プロパティ]セクションは、この問題に関して非常に有益です。namestate

于 2013-08-26T15:59:58.047 に答える