Diferencia entre GeoJSON y TopoJSON

Respuestas:

147

Si le importa el tamaño del archivo o la topología, utilice TopoJSON. Si no le importa ninguno de los dos, utilice GeoJSON por simplicidad.

La principal ventaja de TopoJSON es el tamaño. Al eliminar la redundancia y utilizar una codificación de coordenadas entera de precisión fija más eficiente, los archivos TopoJSON suelen ser un orden de magnitud más pequeños que los archivos GeoJSON. La ventaja secundaria de los archivos TopoJSON es que la codificación de la topología tiene aplicaciones útiles, como la simplificación que conserva la topología (similar a MapShaper ) y la generación automática de mallas (como en los límites de estado-estado en este ejemplo de coropletas ).

Estas ventajas tienen un costo: un formato de archivo más complejo. En JavaScript, por ejemplo, normalmente usaría la biblioteca cliente TopoJSON para convertir TopoJSON a GeoJSON para usar con herramientas estándar como d3.geoPath . (En Python, puede usar topojson.py ). Además, el formato entero de TopoJSON requiere coordenadas de cuantificación, lo que significa que puede introducir un error de redondeo si no tiene cuidado. (Consulte la documentación para topojson -q.)

Para la manipulación de geometrías del lado del servidor que no requiere topología, entonces GeoJSON es probablemente la opción más simple. De lo contrario, si necesita topología o desea enviar la geometría a través del cable a un cliente, utilice TopoJSON.

mbostock
fuente
2
Y aunque recordaba haber leído sobre "segmentos de línea compartidos", seguía asumiendo que "topo" significaba "topografía", que no es así. Aquí hay una buena lectura sobre la diferencia entre "topología" y "topografía" (el primero es el origen de "topo" en topojson) , y tendré que leer el artículo de Mike sobre inferir topología
The Red Pea
Preferiría usar geobuf que no sean soluciones híbridas como toposjon cuando se conecte a Internet.
tibetty
9

TopoJSON es ideal para funciones ordenadas que "encajan" entre sí, como regiones administrativas, pero no ayuda con datos más desordenados u orgánicos. Si sus datos son simplemente puntos, TopoJSON no es de ninguna ayuda.

sgillies
fuente
22
Incluso cuando no hay una topología compartida, la codificación entera de precisión fija de TopoJSON puede ser sustancialmente más eficiente que el punto flotante de GeoJSON.
mbostock
16
Cierto. Me equivoco. ¡Eliminaría mi respuesta, pero perderíamos su valioso comentario!
sgillies
Ja, gracias. :) He enviado una respuesta separada que incluye consideraciones adicionales.
mbostock
3

Depende de muchas consideraciones. Entre ellos se encuentran los siguientes:

1) La naturaleza (modelo de datos) de la característica o características que le gustaría representar 2) Cualquier atributo que le gustaría tener asociado con esas características 3) Cómo le gustaría que estas características se comporten en la página (estático vs. dinámica)

Sin embargo, esta es una pregunta difícil de responder en abstracto. Con respecto a algunos detalles, si tiene una cobertura de polígono contiguo u otra situación en la que las entidades comparten límites, el modelo de topojson le permite explotar la redundancia y factorizar eso en el modelo.

Lea la documentación, diseccione ejemplos (por ejemplo, bl.ocks.org) y luego obtenga algunos datos y represéntelos en geojson y topojson y cree sus propias visualizaciones.

wsvekla
fuente
Gracias wsvekla. He estado haciendo eso: encontré las esencias tuyas en bl.ocks.org de hecho ( bl.ocks.org/wsvekla/4533258 bl.ocks.org/4348435 ) pero no es fácil de buscar en Google. Sin embargo, como usted señala, hay muchas consideraciones y estoy tratando de explorar comparaciones lado a lado para aprender esto.
Lucas
2
Estos dos bloques hacen referencia al mismo archivo de forma original: bl.ocks.org/4485308 y bl.ocks.org/4348435 . TopoJSON realmente comenzó a asimilar cuando finalmente comprendí cómo podía representar múltiples características (límites nacionales, departamentales y municipales) con los mismos datos en el mismo archivo (no se puede hacer eso con geojson). Esto se logra a través de la función de filtro: function (a, b) {return a.id! == b.id;}). Trate de entender eso y topojson comenzará a tener sentido. Para una mejor referencia de código y minimalismo puro
wsvekla