json topojson

¿Cómo agregar propiedades al archivo topojson?



json javascript (1)

Dado un archivo data.tsv como:

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

Dado un archivo topojson.json como: (la estructura es correcta, los valores numéricos son aleatorios)

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

¿Cómo usar los campos comunes (1) para inyectar los valores de otro campo (2) en el archivo json?

1]: data.txt#code y topojson.txt.objects.states.geometries.properties.code_2

2]: data.txt#name

El resultado final debe contener:

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

EDITAR: respuesta aceptada:

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


Intenta usar esto:

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

Que debe dar salida:

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

Desde la wiki de referencia de línea de comandos :

--id- nombre de la propiedad de la característica para promover a la geometría id

Al utilizar la propiedad code_2 con esta opción, la promueve como el ID de función.

Coloque un + delante del nombre de la propiedad de entrada para forzar su valor a un número.

Más:

Si las propiedades a las que hace referencia la propiedad -id son nulas o no definidas, se omiten del objeto de geometría de salida. Por lo tanto, los objetos generados pueden no tener una ID definida si las entidades de entrada no tienen una propiedad con el nombre especificado.

Por lo tanto, cuando está utilizando +code y +code_2 , probablemente undefined estén undefined , ya que no puede convertir el valor de la cadena AK en un número.

Aquí, la propiedad de entrada "FIPS" se obliga a un número y se utiliza como identificador de característica; Del mismo modo, la columna denominada "FIPS" se utiliza como identificador en el archivo CSV. (Si su archivo CSV utiliza un nombre de columna diferente para el identificador de la función, puede especificar varias propiedades de identificación, como --id-property=+FIPS,+id .)

Es por eso que tiene que agregar el code a la --id-property=code_2,code . Así es como se realiza la asignación (el code_2 de topojson.json y la columna de code de data.tsv ).

Luego, la propiedad de salida "desempleo" se genera a partir del archivo de datos externos ,employ.tsv, que define la propiedad de entrada "tasa"

En nuestro caso, -p code_2,state=name especifica que mantendremos la propiedad code_2 y code_2 el name propiedad de name al state . Las secciones de Propiedades y Propiedades externas en la documentación wiki mencionada anteriormente son bastante informativas al respecto.