2013-08-26 40 views
17

Cho một tập tin data.tsv như:Làm cách nào để thêm thuộc tính vào tệp topojson?

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

Cho một tập tin topojson.json như: (cấu trúc là đúng, các giá trị số là ngẫu nhiên)

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

thế nào sử dụng các trường chung (1) để chèn các giá trị của một trường khác (2) vào tệp json?

1]: data.txt#codetopojson.txt.objects.states.geometries.properties.code_2

2]: data.txt#name

Kết quả cuối cùng nên chứa:

  {"type":"Polygon","arcs":[[0]],"properties":{"code_2":"AL", "name":"Alabama" }}, 
      {"type":"Polygon","arcs":[[1]],"properties":{"code_2":"AK", "name":"Alaska" }}, 

EDIT: Được chấp nhận câu trả lời:

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

Tôi đã chỉnh sửa nhẹ phần trên cùng của hình chữ nhật sao cho cả hai hình dạng được bảo toàn. – Hugolpz

Trả lời

17

Hãy thử sử dụng này:

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

nào nên đầu ra:

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

Từ Command Line Reference wiki:

--id-tài sản tên của tài năng để thúc đẩy thành id hình học

Bằng cách sử dụng thuộc tính code_2 với tùy chọn này, bạn quảng bá nó làm ID tính năng.

Đặt trước + trước tên thuộc tính đầu vào để ép buộc giá trị của nó thành một số.

Plus:

Nếu các thuộc tính tham chiếu bởi --id-tài sản là null hoặc không xác định, họ bỏ qua từ các đối tượng hình học đầu ra. Do đó, các đối tượng được tạo có thể không có ID được xác định nếu các đối tượng địa lý nhập không có thuộc tính với tên được chỉ định.

Vì vậy, khi bạn đang sử dụng +code+code_2, họ có thể undefined, như bạn không thể chuyển đổi các giá trị AK chuỗi thành một số.

Ở đây, thuộc tính đầu vào "FIPS" bị ép buộc thành một số và được sử dụng làm mã định danh đối tượng ; tương tự, cột có tên "FIPS" được sử dụng làm số nhận dạng trong tệp CSV. (Nếu tập tin CSV của bạn sử dụng một tên cột khác nhau cho các định danh tính năng, bạn có thể chỉ định nhiều id thuộc tính, chẳng hạn như --id-property=+FIPS,+id.)

Đó là lý do tại sao bạn phải thêm code đến tùy chọn --id-property=code_2,code. Đây là cách ánh xạ được thực hiện (số code_2 từ topojson.json và cột code từ data.tsv).

Sau đó, tài sản đầu ra "thất nghiệp" được tạo ra từ tập tin dữ liệu bên ngoài, unemployment.tsv, trong đó xác định các bất động sản đầu vào "tỷ lệ"

Trong trường hợp của chúng tôi, -p code_2,state=name xác định rằng chúng tôi sẽ giữ nguyên tài sản code_2 và chúng tôi sẽ đổi tên thuộc tính name thành state. Các thuộc tính Thuộc tínhCác thuộc tính bên ngoài các phần trong wiki tài liệu nói trên khá thông tin về vấn đề này.

+1

Nếu có thể, tôi sẽ +1 nhiều lần. – Hugolpz

+1

Điều này không còn hoạt động. Tôi có một tập tin topojson.json và -p không thêm thuộc tính mới. Nó chỉ bảo tồn những gì đã có trong geojson. Có lẽ tệp của tôi là duy nhất. Rất thích tìm một giải pháp. – AldoTheApache

+3

Xin chào, tôi đã đi qua câu trả lời và tạo thành lệnh thebelow nhưng bây giờ topojson được đổi tên thành lệnh geo2topo. geo2topo -o output.json -e data1.csv --id-property = adm1_code, mã -p adm1_code, statename = state - states_topo.json. Lệnh này không hoạt động. Để thêm thuộc tính bổ sung là có tên lệnh khác với geo2topo? – AnandSonake

Các vấn đề liên quan