Qué hace este visor
TopoJSON es un pariente compacto de GeoJSON. Guarda cada borde compartido una sola vez y suele escribir las coordenadas como números enteros pequeños. Eso hace que los archivos sean mucho más pequeños, y por eso lo usan los mapas de D3.js, los mapas electorales y muchos proyectos de periodismo de datos. La desventaja es que no puedes leer un archivo TopoJSON a simple vista, y muchas herramientas SIG y mapas web no pueden abrirlo sin convertirlo antes.
Este visor abre el archivo directamente. Arrastra un archivo .topojson o .json al mapa y el visor comprueba que sea una topología real, reconstruye cada forma a partir de sus arcos y dibuja cada objeto con nombre como una capa aparte con su propio color. La barra lateral muestra cuántos objetos, elementos y arcos tiene el archivo, si está cuantizado y qué tan fina es su cuadrícula, y cuánto más grandes serían los mismos datos en GeoJSON normal. Haz clic en un elemento para leer sus atributos, incluido su id de TopoJSON.
Añadí una función que no encontrarás en un visor de GeoJSON normal: «Highlight shared borders». Dibuja solo los arcos que comparten dos elementos distintos, directamente desde la topología. Es la forma más rápida de comprobar que un mapa de países, provincias o distritos electorales tiene de verdad bordes compartidos limpios, sin huecos ni solapes. Cuando necesites los datos en otra herramienta, descarga un objeto o todos como GeoJSON. No se sube nada: el archivo nunca sale de tu ordenador.
TopoJSON frente a GeoJSON
Los dos formatos son JSON y los dos describen puntos, líneas y polígonos con atributos. La diferencia está en cómo guardan las coordenadas.
| Aspecto | TopoJSON | GeoJSON |
|---|---|---|
| Bordes compartidos | Se guardan una vez como arco y cada forma que los usa hace referencia a ellos | Se guardan de nuevo en cada polígono que los toca |
| Coordenadas | Normalmente enteros cuantizados, escritos como pequeñas diferencias (deltas) | Longitud y latitud decimales completas en cada vértice |
| Tamaño de archivo | A menudo mucho menor con polígonos que se tocan | Mayor, pero fácil de leer |
| Capas | Varios objetos con nombre en un archivo | Una FeatureCollection por archivo |
| Topología | Sabe qué formas son vecinas, así que los bordes se pueden simplificar juntos | Sin relación entre las formas |
| Compatibilidad | D3.js, mapshaper, GDAL/QGIS (solo lectura), este visor | Casi cualquier SIG y biblioteca de mapas web |
| Estándar | TopoJSON Format Specification 1.0 (comunidad) | IETF RFC 7946 |
Mi regla práctica: usa TopoJSON cuando envíes muchos polígonos que se tocan a un navegador, como países, estados o distritos, y el tamaño importe. Usa GeoJSON para todo lo demás, sobre todo cuando otras personas o herramientas vayan a editar los datos.
Qué hay dentro de un archivo TopoJSON
Un archivo TopoJSON es un único objeto JSON con el tipo "Topology". Estos son sus miembros principales:
- type
- Siempre
"Topology". Un archivo que dice"FeatureCollection"es GeoJSON, no TopoJSON. - objects
- Un diccionario de objetos con nombre, por ejemplo
countriesycapitals. Cada uno es una geometría o unaGeometryCollection, y cada uno se convierte en una capa en este visor. - arcs
- La lista compartida de líneas. Los polígonos y las líneas no guardan coordenadas propias: guardan los números de los arcos que los forman.
- transform
- Opcional. Si está presente, el archivo está cuantizado: las posiciones de los arcos son enteros, y
scaleytranslatelos convierten de nuevo en longitud y latitud. - bbox
- Opcional. El rectángulo envolvente de todos los datos, como [mín x, mín y, máx x, máx y].
- properties, id
- Cada geometría puede llevar
properties(los atributos) y unid, igual que un elemento GeoJSON.
Aquí tienes una topología completa y muy pequeña con dos campos cuadrados que se tocan. Es el mismo ejemplo que resuelve la sección de matemáticas más abajo.
{
"type": "Topology",
"transform": { "scale": [0.001, 0.001], "translate": [-10, 40] },
"objects": {
"fields": {
"type": "GeometryCollection",
"geometries": [
{ "type": "Polygon", "arcs": [[0, 1]], "properties": { "name": "A" } },
{ "type": "Polygon", "arcs": [[2, -1]], "properties": { "name": "B" } }
]
}
},
"arcs": [
[[4000, 7000], [0, 1000]],
[[4000, 8000], [-1000, 0], [0, -1000], [1000, 0]],
[[4000, 7000], [1000, 0], [0, 1000], [-1000, 0]]
]
}El campo A usa los arcos 0 y 1. El campo B usa el arco 2 y después el -1. Un índice negativo significa «usa este arco al revés»: -1 es el arco 0 invertido, porque el número es el complemento a uno ~0. El borde entre los campos (arco 0) se escribe una sola vez.
Detalles técnicos
Esto es exactamente lo que el visor lee y muestra.
- Archivos aceptados
- Archivos
.topojsony.jsoncon"type": "Topology", hasta 100 MB. Un archivo GeoJSON recibe un mensaje claro que te lleva al Visor de GeoJSON. - Tipos de geometría
- Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon y GeometryCollection, incluidas las geometrías null (se omiten).
- Objetos
- Cada objeto con nombre se convierte en su propia capa, con casilla, color, tipo de geometría, número de elementos y de campos, y una descarga en GeoJSON.
- Archivos cuantizados
- Compatibles por completo. El visor lee
transform, decodifica los enteros codificados como deltas y muestra el tamaño de un paso de la cuadrícula sobre el terreno, en metros. - Bordes compartidos
- En los objetos con polígonos, el visor construye la malla de arcos que usan dos elementos distintos (
topojson.meshcona !== b) y puede dibujarla encima. - Atributos
- Todas las
propertiesaparecen en la ventana emergente. Unidde TopoJSON se añade como atributoidpara que lo veas y se conserve al exportar. - Sistema de coordenadas
- El TopoJSON para mapas web suele estar en longitud y latitud WGS84. Los archivos que se proyectaron antes de convertirlos (por ejemplo, US Albers para un mapa de D3) no están en grados y no se pueden colocar en un mapa del mundo.
- Exportación
- Cada objeto en su propio archivo GeoJSON, o todos los objetos en un solo GeoJSON con un atributo
topojson_objectque indica de dónde viene cada elemento. - Mapa base
- Mapa de calles por defecto, con opción de satélite. Pon la opacidad de relleno en 0 para ver solo los contornos.
- Privacidad
- El archivo se lee y se decodifica en tu navegador. No se envía nada a un servidor.
Cómo ver un archivo TopoJSON, paso a paso
Este es el flujo completo con el ejemplo incluido: 50 países europeos de Natural Earth y 22 capitales, guardados como una topología cuantizada con dos objetos.

El mapa se abre con un mapa base de calles. Usa Upload, arrastra un archivo al mapa o haz clic en Sample Data.

El archivo se decodifica en tu navegador y cada objeto se dibuja con su propio color. File Info muestra el número de objetos, elementos y arcos, el paso de cuantización y lo grande que serían los mismos datos en GeoJSON.

El panel Objects lista cada objeto de la topología con su tipo de geometría y su número de elementos. Desmarca un objeto para ocultarlo o haz clic en su cuadrado de color para cambiar el color.

Marca «Highlight shared borders» para dibujar los arcos que comparten dos elementos distintos, construidos desde la propia topología. Las costas no se comparten, así que quedan sin marcar.

Haz clic en cualquier elemento para abrir sus atributos. La ventana emergente también indica el objeto al que pertenece y muestra el id de TopoJSON.

Usa el enlace GeoJSON junto a un objeto para descargar solo ese objeto, o Download All as GeoJSON para todo en un solo archivo.
Otras formas de abrir y convertir TopoJSON
Este visor sirve para mirar un archivo rápidamente. Estas son las otras herramientas que uso cuando un archivo TopoJSON necesita trabajo de verdad.
mapshaper
mapshaper (la web mapshaper.org o la herramienta de línea de comandos) lee y escribe TopoJSON, Shapefile, GeoJSON y CSV. Es la mejor herramienta para simplificar bordes manteniéndolos compartidos y para convertir entre TopoJSON y otros formatos.
QGIS y GDAL
GDAL tiene un driver de TopoJSON de solo lectura, así que QGIS puede abrir un archivo TopoJSON arrastrándolo. Cada objeto aparece como una capa aparte. Para guardarlo, exporta la capa a GeoJSON o GeoPackage. ogr2ogr convierte en la línea de comandos.
Las herramientas de línea de comandos de topojson
geo2topo (de topojson-server) crea una topología a partir de archivos GeoJSON, toposimplify (de topojson-simplify) y topoquantize (de topojson-client) la hacen más pequeña, y topo2geo (también de topojson-client) convierte los objetos de nuevo en GeoJSON.
D3.js y Python
En el navegador, topojson.feature convierte un objeto en GeoJSON para D3 o cualquier biblioteca de mapas, y topojson.mesh te da los bordes compartidos. En Python, GeoPandas lee TopoJSON a través de GDAL, un objeto (capa) cada vez.
Las mismas tareas en código
Estos comandos convierten un archivo de países en ambas direcciones y lo leen en JavaScript y en Python.
# mapshaper (npm install -g mapshaper) mapshaper countries.shp -o format=topojson quantization=1e5 countries.topojson mapshaper countries.topojson -o format=geojson countries.geojson # topojson-server / topojson-client command line tools geo2topo countries=countries.geojson > countries.topojson topo2geo countries=countries.geojson < countries.topojson # GDAL / OGR: each TopoJSON object becomes its own layer ogrinfo countries.topojson ogr2ogr -f GeoJSON countries.geojson countries.topojson countries
// D3.js + topojson-client in the browser
const topo = await d3.json("countries.topojson");
const countries = topojson.feature(topo, topo.objects.countries);
const borders = topojson.mesh(topo, topo.objects.countries, (a, b) => a !== b);
# Python: GeoPandas reads TopoJSON through GDAL, one object at a time
import geopandas as gpd
countries = gpd.read_file("countries.topojson", layer="countries")Mi opinión: guarda tus datos maestros en GeoJSON, GeoPackage o Shapefile, y genera el TopoJSON como último paso para la web. Es fácil de volver a generar, pero difícil de editar a mano.
Cómo funciona el visor
Esto es lo que ocurre entre soltar un archivo y verlo en el mapa. Cada paso se ejecuta en tu navegador.
- Leer y comprobar el JSON. El archivo se lee como texto y se analiza. Si el
typede nivel superior no es"Topology", o faltanobjectsoarcs, recibes un error claro en lugar de un mapa vacío. - Decodificar los arcos. Si el archivo tiene un
transform, cada arco se decodifica de enteros codificados como deltas a longitud y latitud. Sin transform, las posiciones de los arcos se usan tal cual. - Reconstruir cada objeto. Para cada objeto con nombre,
topojson.featureune los arcos referenciados en anillos y líneas, invierte los arcos con índice negativo y devuelve una FeatureCollection de GeoJSON con las properties e ids originales. - Construir la malla de bordes compartidos. En los objetos con polígonos,
topojson.meshcon el filtroa !== breúne cada arco que pertenece a dos elementos distintos. Los arcos que usa un solo elemento, como las costas, quedan fuera. - Medir el archivo. El visor cuenta objetos, elementos y arcos, calcula el tamaño de un paso de cuantización en metros y mide lo grande que sería el GeoJSON decodificado.
- Dibujar y encuadrar. Cada objeto se convierte en una capa de Leaflet con su propio color. Los puntos se dibujan como círculos. El mapa hace zoom a todos los datos visibles.
La decodificación la hace topojson-client, la biblioteca de referencia escrita por el creador del formato, así que el visor lee los archivos exactamente como los mapas de D3.
Cómo TopoJSON reduce el tamaño de los archivos
TopoJSON ahorra espacio de tres formas: arcos compartidos, cuantización y codificación delta. Aquí están las matemáticas de cada una, con la topología de ejemplo de arriba.
1. Arcos compartidos
En GeoJSON, un borde entre dos polígonos se escribe dos veces, una en cada polígono. TopoJSON corta cada límite en arcos en los puntos donde se encuentran tres o más formas, guarda cada arco una vez y deja que cada polígono enumere los arcos que usa. Un índice negativo usa el arco al revés.
índice i ≥ 0 → arco i, del primer punto al último índice i < 0 → arco ~i = −i − 1, del último punto al primero Anillo del campo A: [0, 1] = arco 0, luego arco 1 Anillo del campo B: [2, −1] = arco 2, luego arco 0 invertido
En un mapa de países, casi toda la longitud de cada frontera la comparten exactamente dos países, así que este paso por sí solo elimina cerca de la mitad de las coordenadas de las fronteras.
2. Cuantización
La cuantización ajusta cada coordenada a una cuadrícula regular y escribe la celda como un entero. Con una cuantización q, el rectángulo envolvente se divide en q − 1 pasos en cada eje. El transform guarda el tamaño de la cuadrícula (scale) y su esquina (translate).
scale_x = (x_max − x_min) / (q − 1) scale_y = (y_max − y_min) / (q − 1) longitud = x_entero · scale_x + translate_x latitud = y_entero · scale_y + translate_y
El archivo de ejemplo usa q = 100 000 sobre Europa y el oeste de Rusia, unos 69° de longitud y 36° de latitud. Un paso mide unos 0,0007° de oeste a este, aproximadamente 44 m a 55° norte, y unos 40 m de norte a sur. Es mucho más fino que los datos de origen a escala 1:50m, así que no se pierde ningún detalle visible. El panel File Info muestra este paso para tus propios archivos.
3. Codificación delta
Dentro de cada arco, solo la primera posición se escribe como entero completo. Cada posición siguiente se escribe como la diferencia con la anterior. Los puntos vecinos están cerca, así que las diferencias son números pequeños con pocas cifras.
arco guardado: [[4000, 7000], [0, 1000]] punto 1: x = 4000 y = 7000 punto 2: x = 4000 + 0 = 4000 y = 7000 + 1000 = 8000 con scale [0.001, 0.001] y translate [−10, 40]: punto 1: (4000 · 0.001 − 10, 7000 · 0.001 + 40) = (−6, 47) punto 2: (4000 · 0.001 − 10, 8000 · 0.001 + 40) = (−6, 48)
Así que el arco 0 del ejemplo es la línea de (−6, 47) a (−6, 48): el borde entre el campo A y el campo B. Al decodificar los tres arcos se obtienen los dos cuadrados A = (−7…−6, 47…48) y B = (−6…−5, 47…48). Es justo el caso que comprueban las pruebas del visor, junto con la malla de bordes compartidos, que devuelve solo esa línea de borde.
4. El resultado final
Para el ejemplo de este visor, el GeoJSON original con 4 decimales ocupa unos 211 KB y el TopoJSON unos 114 KB, más o menos la mitad. Cuando el visor decodifica el TopoJSON de nuevo a GeoJSON con números decimales completos, crece hasta unos 500 KB, que es la cifra que muestra el panel File Info. Tras la compresión gzip, que usa cualquier servidor web, la diferencia suele reducirse, pero sigue siendo clara en mapas con muchos bordes compartidos.
Cuándo ayuda un visor de TopoJSON
Estas son las situaciones en las que recurro a un visor rápido de TopoJSON.
- Revisar un archivo antes de crear un mapa con D3. Mira qué objetos contiene un archivo TopoJSON descargado, cómo se llaman y qué atributos tienen, para saber qué escribir en `topo.objects` antes de empezar a programar.
- Comprobar los bordes tras simplificar. Después de simplificar un mapa en mapshaper o toposimplify, activa «Highlight shared borders» para confirmar que los vecinos siguen compartiendo un borde limpio, sin huecos ni astillas.
- Sacar GeoJSON de un archivo TopoJSON. Muchos mapas web y herramientas SIG solo aceptan GeoJSON. Descarga un objeto o el archivo entero como GeoJSON sin instalar nada.
- Revisar mapas electorales y censales. Las redacciones publican a menudo límites de distritos y municipios como TopoJSON. Abre el archivo para revisar nombres, ids y cobertura antes de unir tus resultados.
- Comparar niveles de cuantización. Abre el mismo mapa creado con distintas cuantizaciones y compara el tamaño del paso en metros y el tamaño del archivo, para elegir el archivo más pequeño que aún se vea bien.
- Enseñar cómo funciona la topología. La lista de objetos, el número de arcos y la vista de bordes compartidos facilitan mostrar a los estudiantes por qué una topología ocupa menos que el GeoJSON normal.
- Abrir archivos de los paquetes world-atlas y us-atlas. Estos paquetes populares de npm incluyen TopoJSON de países, estados y condados de EE. UU. Ábrelos aquí para ver exactamente lo que contienen.
- Averiguar por qué un archivo no carga. Si una biblioteca de mapas falla con un archivo, el visor te dice si es TopoJSON de verdad, GeoJSON con la extensión equivocada o un archivo con referencias a arcos rotas.
Preguntas frecuentes
1. ¿Qué es TopoJSON?
TopoJSON es una extensión de GeoJSON que guarda la geometría como una topología. Los bordes compartidos se guardan una vez como arcos, y las coordenadas suelen cuantizarse como enteros. Lo creó Mike Bostock, el autor de D3.js, para hacer más pequeños los archivos de mapas para la web.
2. ¿Cómo abro un archivo TopoJSON?
Arrástralo al mapa de este visor o haz clic en Upload. En QGIS puedes arrastrarlo a la ventana del mapa, porque GDAL lee TopoJSON. En código, usa topojson.feature de topojson-client para convertir cada objeto en GeoJSON.
3. ¿Cuál es la diferencia entre TopoJSON y GeoJSON?
GeoJSON escribe las coordenadas completas de cada forma, así que un borde compartido aparece dos veces. TopoJSON escribe cada borde una vez como arco al que las formas hacen referencia, y suele guardar las coordenadas como enteros pequeños. Los archivos TopoJSON son más pequeños; los GeoJSON son más sencillos y compatibles casi en todas partes.
4. ¿Cómo convierto TopoJSON a GeoJSON?
Carga el archivo aquí y haz clic en Download All as GeoJSON, o usa el enlace GeoJSON junto a un objeto. En la línea de comandos, topo2geo o mapshaper -o format=geojson hacen lo mismo.
5. Mi archivo tiene varios objetos. ¿Qué pasa con ellos?
Cada objeto se convierte en su propia capa, con su color y su casilla. Puedes descargar cada objeto como un archivo GeoJSON aparte, o todos juntos. El archivo combinado añade un atributo topojson_object a cada elemento.
6. ¿Qué muestra «Highlight shared borders»?
Dibuja los arcos que usan dos elementos distintos del mismo objeto, por ejemplo la frontera entre dos países. Los arcos que usa un solo elemento, como las costas, no se dibujan. Es lo mismo que topojson.mesh(topology, object, (a, b) => a !== b) en D3.
7. ¿Qué significa «cuantizado» en el panel File Info?
Significa que el archivo tiene un transform, así que sus coordenadas son enteros en una cuadrícula. El panel muestra cuánto mide un paso de la cuadrícula sobre el terreno. Un paso de pocos metros vale para un plano de ciudad; uno de unos cientos de metros vale para un mapa del mundo.
8. ¿Por qué mi mapa aparece en el lugar equivocado o muy pequeño?
Algunos archivos TopoJSON, sobre todo los hechos para mapas de D3 de Estados Unidos, se proyectan antes de convertirlos, así que sus coordenadas son píxeles de pantalla, no longitud y latitud. Un archivo así no se puede colocar en un mapa del mundo. Usa la versión sin proyectar de los datos.
9. ¿Por qué recibo un mensaje de que mi archivo es GeoJSON?
Muchos archivos TopoJSON usan la extensión .json, igual que los GeoJSON. El visor comprueba el contenido, no el nombre. Si el archivo empieza con "type": "FeatureCollection", es GeoJSON. Ábrelo en el Visor de GeoJSON de este sitio.
10. ¿Se sube mi archivo?
No. El archivo se lee y se decodifica en tu navegador con topojson-client. Solo las teselas del mapa base vienen de internet.
Bibliotecas y datos
Este visor se basa en software de código abierto y datos abiertos. Muchas gracias a las personas detrás de estos proyectos.
- topojson-client 3.1 · ISC · Mike BostockDecodifica la topología: convierte los arcos de nuevo en coordenadas, reconstruye cada objeto como GeoJSON y construye la malla de bordes compartidos.
- Leaflet 1.9 · BSD-2-Clause · Volodymyr Agafonkin and contributorsDibuja el mapa interactivo, las capas y las ventanas emergentes.
- Natural Earth (1:50m Admin 0 countries) · Dominio público · Natural Earth contributorsFronteras de los países usadas en el archivo de ejemplo.
- OpenStreetMap, Protomaps (hosted by KONAKTIVE), CARTO, Esri World Imagery · ODbL y condiciones del proveedor · OpenStreetMap contributors, Protomaps, KONAKTIVE, CARTO, EsriTeselas e imágenes del mapa base.
Visores de archivos SIG relacionados
Los archivos TopoJSON se leen y decodifican en tu navegador. Ningún archivo se sube nunca a un servidor. El ejemplo usa datos de Natural Earth (dominio público). Teselas del mapa © colaboradores de OpenStreetMap, dibujadas con Protomaps (alojado por KONAKTIVE), con CARTO como respaldo. Imágenes de satélite: Esri.
