¿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.