Skip to content

TopoJSON

TopoJSON es una extensión del formato de datos GeoJSON, basada en la premisa de codificar estructuras de datos geoespaciales de forma topológica. A diferencia de otros formatos de datos GIS, TopoJSON emplea arcos, que son secuencias de puntos en lugar de propiedades asociadas a cada punto, lo que simplifica enormemente la representación de características contiguas o anidadas.

El formato TopoJSON se diseñó específicamente para operaciones geoespaciales topológicas. En topología, los límites y las características no se denotan como entidades separadas y conflictivas, sino como secuencias relativas de puntos denominadas «arcos». Estos arcos construyen la superestructura topológica que proporciona eficiencia y una base de datos robusta. Los archivos TopoJSON pueden contener puntos, líneas, polígonos y colecciones multiparte de estos tipos. Al aprovechar los arcos, TopoJSON reduce drásticamente la redundancia y, por lo general, da como resultado archivos de menor tamaño.

La principal ventaja de TopoJSON proviene del aspecto «topológico» que incorpora. La topología, una rama fundamental de las matemáticas, se ocupa de las propiedades del espacio que se conservan bajo transformaciones continuas, como el estiramiento y la flexión, y tiene múltiples utilidades en los SIG.

Al expresar múltiples geometrías en términos de secuencias compartidas de ubicaciones geográficas (arcos), TopoJSON facilita una transmisión, visualización y procesamiento en tiempo real más eficientes de los datos geoespaciales, específicamente en el entorno del navegador. Esta implementación reduce la redundancia en los conjuntos de datos, lo que facilita una notable disminución del tamaño de los archivos en comparación con el GeoJSON estándar.

Como se indicó anteriormente, TopoJSON elimina la redundancia, lo que permite almacenar de forma eficiente geometrías relacionadas en el mismo archivo. Por ejemplo, la frontera compartida entre California y Nevada se representa solo una vez, en lugar de duplicarse para ambos estados. Un único archivo TopoJSON puede contener varias colecciones de características sin duplicación, como estados y condados. O bien, un archivo TopoJSON puede representar de manera eficiente tanto polígonos (para relleno) como límites (para trazo) como dos colecciones de características que comparten la misma malla de arcos.

Como resultado, TopoJSON es sustancialmente más compacto que GeoJSON. El archivo shapefile de los condados de EE. UU. generalmente tiene un tamaño de 2,2 MB como archivo GeoJSON, pero solo 436 KB como malla de arcos, lo que supone una reducción del 80,4 % incluso sin simplificación. TopoJSON también puede ser más eficiente a la hora de renderizar, ya que los puntos de control compartidos solo necesitan proyectarse una vez. Para reducir aún más el tamaño del archivo, TopoJSON utiliza codificación delta de precisión fija para coordenadas enteras en lugar de flotantes. Esto es similar al redondeo de valores de coordenadas, pero con mayor precisión. Al igual que GeoJSON, los archivos TopoJSON se modifican fácilmente en un editor de texto y se prestan a la compresión gzip.

Características

Las geometrías en TopoJSON se expresan explícitamente con arcos. Estos arcos son secuencias de puntos, mientras que las cadenas de líneas y los polígonos se definen como una lista de estas secuencias de arcos. Esto significa que las fronteras compartidas en polígonos complejos solo se registran una vez, lo que reduce enormemente el tamaño del archivo y contribuye a acelerar los tiempos de procesamiento y carga.

La especificación TopoJSON también admite la incorporación de características adicionales de los mapas, como la simplificación y la cuantificación. La simplificación reduce el número de puntos en una forma para acelerar el dibujo y disminuir el uso de memoria, mientras que la cuantificación transforma los números de punto flotante en una cuadrícula entera relativa, lo que reduce el tamaño del archivo. Estas características complementarias ponen de relieve la naturaleza adaptable y orientada al ámbito profesional del formato de datos TopoJSON.

Sin embargo, cabe señalar que la naturaleza más compleja de TopoJSON en comparación con GeoJSON puede dar lugar a un aumento de los tiempos de procesamiento y la complejidad. La decodificación de TopoJSON requeriría un procesamiento adicional para convertir las secuencias de arcos de nuevo en geometrías GIS tradicionales.

Objetos geométricos

Los objetos geométricos en TopoJSON son similares a los de GeoJSON, excepto que un objeto geométrico TopoJSON define sus coordenadas como una secuencia de los arcos de la topología que lo contiene, referenciados por un índice basado en cero. Por ejemplo, una cadena de líneas podría definirse como

js
{"type": "LineString", "arcs": [42]}

donde 42 se refiere al arco topology.arcs[42]. Tenga en cuenta que las coordenadas de una cadena de líneas se definen como una matriz de arcos, en lugar de un solo arco, de modo que se pueden concatenar varios arcos para formar la cadena de líneas según sea necesario:

js
{"type": "LineString", "arcs": [42, 43]}

Del mismo modo, un polígono con un agujero podría definirse como

js
{"type": "Polygon", "arcs": [42, 43], [44]}

Al unir arcos para formar geometrías, la última coordenada del arco debe ser la misma que la primera coordenada del arco siguiente, si lo hay. Por ejemplo, si el arco 42 representa la secuencia de puntos A → B → C, y el arco 43 representa la secuencia de puntos C → D → E, entonces la cadena de líneas [42, 43] representa la secuencia de puntos A → B → C → D → E.

En muchos casos, puede ser necesario invertir un arco compartido. Por ejemplo, la frontera compartida entre California y Nevada discurre hacia el sur en el lado de California, pero hacia el norte en el lado de Nevada. Un índice negativo indica que la secuencia de coordenadas del arco debe invertirse antes de unir. Para evitar la ambigüedad con el cero, se utiliza el complemento a uno; -1 (~0) representa el arco invertido 0, -2 (~1) representa el arco invertido 1, y así sucesivamente.

Los puntos y los objetos geométricos multipunto se representan directamente con coordenadas, como en GeoJSON, en lugar de arcos. Sin embargo, estas coordenadas siguen representándose como números enteros fijos y deben convertirse de la misma manera que los arcos, como se describe a continuación.

Esquema TopoJSON

Dada una forma GIS cerca de las coordenadas latitud 0° y longitud 0°, se define un archivo topojson sencillo pero válido y completo que contiene todos los metadatos, elementos Polygon, LineString, Point, arcs y properties de la siguiente manera:

Topojson

js
{
  "type":"Topology",
  "transform":{
    "scale": [1,1],
    "translate": [0,0]
  },
  "objects":{ 
    "two-squares":{
      "type": "GeometryCollection",
      "geometries":[
        {"type": "Polygon", "arcs":[[0,1]],"properties": {"name": "Left_Polygon" }},
        {"type": "Polygon", "arcs":[[2,-1]],"properties": {"name": "Right_Polygon" }}
      ]
    },
    "one-line": {
      "type":"GeometryCollection",
      "geometries":[
        {"type": "LineString", "arcs": [3],"properties":{"name":"Under_LineString"}}
      ]
    },
    "two-places":{
      "type":"GeometryCollection",
      "geometries":[
        {"type":"Point","coordinates":[0,0],"properties":{"name":"Origine_Point"}},
        {"type":"Point","coordinates":[0,-1],"properties":{"name":"Under_Point"}}
      ]
    }
  },
  "arcs": [
    [[1,2],[0,-2]],
    [[1,0],[-1,0],[0,2],[1,0]],
    [[1,2],[1,0],[0,-2],[-1,0]],
    [[0,-1],[2,0]]
  ]
}

Aplicaciones

Por último, la codificación topológica tiene numerosas aplicaciones útiles para mapas y visualización. Facilita la simplificación geométrica que preserva la conectividad de las características adyacentes; esto se aplica incluso a colecciones de características, como la simplificación simultánea y coherente de los límites estatales y provinciales. La topología también se puede utilizar para cartogramas de Dorling y otras técnicas que necesitan información sobre límites compartidos.

En conclusión, TopoJSON permite una codificación compacta de estructuras topológicas de una manera optimizada para la web moderna. Sus principales puntos fuertes son la reducción del tamaño de los archivos y la compatibilidad con múltiples operaciones SIG, junto con algunas complejidades y cargas de procesamiento inherentes. A medida que evolucionan los datos SIG, también lo hacen los formatos de datos como TopoJSON, lo que pone de manifiesto la relación sinérgica entre la representación de datos y los sistemas de información geográfica.