Cosa fa questo visualizzatore
TopoJSON è un parente compatto di GeoJSON. Salva ogni confine condiviso una sola volta e di solito scrive le coordinate come piccoli numeri interi. Così i file sono molto più piccoli, ed è per questo che lo usano le mappe D3.js, le mappe elettorali e molti progetti di giornalismo dei dati. Lo svantaggio è che un file TopoJSON non si legge a occhio, e molti strumenti GIS e mappe web non lo aprono senza convertirlo prima.
Questo visualizzatore apre il file direttamente. Trascina un file .topojson o .json sulla mappa: lo strumento controlla che sia davvero una topologia, ricostruisce ogni forma dai suoi archi e disegna ogni oggetto con nome come un layer separato con il suo colore. La barra laterale mostra quanti oggetti, elementi e archi ha il file, se è quantizzato e quanto è fine la sua griglia, e quanto sarebbero più grandi gli stessi dati in GeoJSON normale. Clicca su un elemento per leggerne gli attributi, compreso il suo id TopoJSON.
Ho aggiunto una funzione che non trovi in un normale visualizzatore GeoJSON: "Highlight shared borders". Disegna solo gli archi che due elementi diversi condividono, direttamente dalla topologia. È il modo più veloce per controllare che una mappa di paesi, province o collegi elettorali abbia davvero confini condivisi puliti, senza vuoti né sovrapposizioni. Quando ti servono i dati in un altro strumento, scarica un oggetto o tutti in GeoJSON. Non viene caricato nulla: il file non lascia mai il tuo computer.
TopoJSON e GeoJSON a confronto
Entrambi i formati sono JSON ed entrambi descrivono punti, linee e poligoni con attributi. La differenza sta nel modo in cui salvano le coordinate.
| Aspetto | TopoJSON | GeoJSON |
|---|---|---|
| Confini condivisi | Salvati una volta come arco e richiamati da ogni forma che li usa | Salvati di nuovo in ogni poligono che li tocca |
| Coordinate | Di solito interi quantizzati, scritti come piccole differenze (delta) | Longitudine e latitudine decimali complete per ogni vertice |
| Dimensione del file | Spesso molto più piccola con poligoni che si toccano | Più grande, ma semplice da leggere |
| Layer | Più oggetti con nome in un solo file | Una FeatureCollection per file |
| Topologia | Sa quali forme sono vicine, quindi i confini si possono semplificare insieme | Nessun legame tra le forme |
| Supporto | D3.js, mapshaper, GDAL/QGIS (solo lettura), questo visualizzatore | Quasi ogni GIS e libreria di mappe web |
| Standard | TopoJSON Format Specification 1.0 (comunità) | IETF RFC 7946 |
La mia regola pratica: usa TopoJSON quando invii a un browser molti poligoni che si toccano, come paesi, regioni o collegi, e la dimensione conta. Usa GeoJSON per tutto il resto, soprattutto quando altre persone o strumenti modificheranno i dati.
Cosa c'è dentro un file TopoJSON
Un file TopoJSON è un unico oggetto JSON con il tipo "Topology". Questi sono i suoi membri principali:
- type
- Sempre
"Topology". Un file che dice"FeatureCollection"è GeoJSON, non TopoJSON. - objects
- Un dizionario di oggetti con nome, per esempio
countriesecapitals. Ognuno è una geometria o unaGeometryCollection, e ognuno diventa un layer in questo visualizzatore. - arcs
- L'elenco condiviso delle linee. Poligoni e linee non contengono coordinate proprie: elencano i numeri degli archi che li formano.
- transform
- Facoltativo. Se presente, il file è quantizzato: le posizioni degli archi sono interi, e
scaleetranslateli riportano a longitudine e latitudine. - bbox
- Facoltativo. Il riquadro di delimitazione di tutti i dati, come [min x, min y, max x, max y].
- properties, id
- Ogni geometria può avere
properties(gli attributi) e unid, proprio come un elemento GeoJSON.
Ecco una topologia completa e molto piccola, con due campi quadrati che si toccano. È lo stesso esempio che la sezione di matematica qui sotto risolve.
{
"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]]
]
}Il campo A usa gli archi 0 e 1. Il campo B usa l'arco 2 e poi -1. Un indice negativo significa "usa questo arco al contrario": -1 è l'arco 0 invertito, perché il numero è il complemento a uno ~0. Il confine tra i campi (arco 0) è scritto una sola volta.
Dettagli tecnici
Ecco esattamente cosa legge e mostra il visualizzatore.
- File accettati
- File
.topojsone.jsoncon"type": "Topology", fino a 100 MB. Un file GeoJSON riceve un messaggio chiaro che ti indirizza al Visualizzatore GeoJSON. - Tipi di geometria
- Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon e GeometryCollection, comprese le geometrie null (vengono saltate).
- Oggetti
- Ogni oggetto con nome diventa un layer a sé, con casella, colore, tipo di geometria, numero di elementi e di campi, e un download in GeoJSON.
- File quantizzati
- Supportati del tutto. Il visualizzatore legge
transform, decodifica gli interi codificati come delta e mostra la dimensione di un passo della griglia sul terreno, in metri. - Confini condivisi
- Per gli oggetti con poligoni, il visualizzatore costruisce la rete degli archi usati da due elementi diversi (
topojson.meshcona !== b) e può disegnarla sopra. - Attributi
- Tutte le
propertiescompaiono nel popup. UnidTopoJSON viene aggiunto come attributoid, così lo vedi e resta anche nell'esportazione. - Sistema di coordinate
- Il TopoJSON per le mappe web di solito è in longitudine e latitudine WGS84. I file proiettati prima della conversione (per esempio US Albers per una mappa D3) non sono in gradi e non si possono collocare su una mappa del mondo.
- Esportazione
- Ogni oggetto in un proprio file GeoJSON, oppure tutti gli oggetti in un solo GeoJSON con un attributo
topojson_objectche indica da dove viene ogni elemento. - Mappa di base
- Mappa stradale come impostazione predefinita, con opzione satellitare. Porta l'opacità di riempimento a 0 per vedere solo i contorni.
- Privacy
- Il file viene letto e decodificato nel tuo browser. Non viene inviato nulla a un server.
Come visualizzare un file TopoJSON, passo dopo passo
Ecco tutto il flusso con l'esempio incluso: 50 paesi europei di Natural Earth e 22 capitali, salvati come un'unica topologia quantizzata con due oggetti.

La mappa si apre con una mappa stradale di base. Usa Upload, trascina un file sulla mappa oppure clicca su Sample Data.

Il file viene decodificato nel tuo browser e ogni oggetto viene disegnato con il suo colore. File Info mostra il numero di oggetti, elementi e archi, il passo di quantizzazione e quanto sarebbero grandi gli stessi dati in GeoJSON.

Il pannello Objects elenca ogni oggetto della topologia con il tipo di geometria e il numero di elementi. Togli la spunta per nascondere un oggetto, oppure clicca sul quadratino del colore per cambiarlo.

Spunta "Highlight shared borders" per disegnare gli archi che due elementi diversi condividono, ricavati dalla topologia stessa. Le coste non sono condivise, quindi restano semplici.

Clicca su qualsiasi elemento per aprirne gli attributi. Il popup indica anche l'oggetto a cui appartiene e mostra l'id TopoJSON.

Usa il link GeoJSON accanto a un oggetto per scaricare solo quell'oggetto, oppure Download All as GeoJSON per avere tutto in un file.
Altri modi per aprire e convertire TopoJSON
Questo visualizzatore serve per guardare un file in fretta. Questi sono gli altri strumenti che uso quando un file TopoJSON richiede un lavoro vero.
mapshaper
mapshaper (il sito mapshaper.org o lo strumento a riga di comando) legge e scrive TopoJSON, Shapefile, GeoJSON e CSV. È lo strumento migliore per semplificare i confini mantenendoli condivisi e per convertire tra TopoJSON e altri formati.
QGIS e GDAL
GDAL ha un driver TopoJSON in sola lettura, quindi QGIS apre un file TopoJSON con un semplice trascinamento. Ogni oggetto compare come un layer separato. Per salvarlo, esporta il layer in GeoJSON o GeoPackage. ogr2ogr converte da riga di comando.
Gli strumenti a riga di comando di topojson
geo2topo (da topojson-server) crea una topologia da file GeoJSON, toposimplify (da topojson-simplify) e topoquantize (da topojson-client) la rendono più piccola, e topo2geo (sempre da topojson-client) riporta gli oggetti in GeoJSON.
D3.js e Python
Nel browser, topojson.feature trasforma un oggetto in GeoJSON per D3 o qualsiasi libreria di mappe, e topojson.mesh ti dà i confini condivisi. In Python, GeoPandas legge TopoJSON tramite GDAL, un oggetto (layer) alla volta.
Gli stessi lavori in codice
Questi comandi convertono un file di paesi in entrambe le direzioni e lo leggono in JavaScript e in 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")Il mio parere: tieni i tuoi dati principali in GeoJSON, GeoPackage o Shapefile, e crea il TopoJSON come ultimo passo per il web. È facile da ricreare, ma difficile da modificare a mano.
Come funziona il visualizzatore
Ecco cosa succede tra il momento in cui lasci cadere un file e quello in cui lo vedi sulla mappa. Ogni passo avviene nel tuo browser.
- Leggere e controllare il JSON. Il file viene letto come testo e analizzato. Se il
typedi primo livello non è"Topology", o mancanoobjectsoarcs, ricevi un errore chiaro invece di una mappa vuota. - Decodificare gli archi. Se il file ha un
transform, ogni arco viene decodificato dagli interi codificati come delta a longitudine e latitudine. Senza transform, le posizioni degli archi si usano così come sono. - Ricostruire ogni oggetto. Per ogni oggetto con nome,
topojson.featureunisce gli archi richiamati in anelli e linee, inverte gli archi con indice negativo e restituisce una FeatureCollection GeoJSON con le properties e gli id originali. - Costruire la rete dei confini condivisi. Per gli oggetti con poligoni,
topojson.meshcon il filtroa !== braccoglie ogni arco che appartiene a due elementi diversi. Gli archi usati da un solo elemento, come le coste, restano fuori. - Misurare il file. Il visualizzatore conta oggetti, elementi e archi, calcola la dimensione di un passo di quantizzazione in metri e misura quanto sarebbe grande il GeoJSON decodificato.
- Disegnare e inquadrare. Ogni oggetto diventa un layer Leaflet con il suo colore. I punti sono disegnati come cerchi. La mappa fa zoom su tutti i dati visibili.
La decodifica vera e propria la fa topojson-client, la libreria di riferimento scritta dal creatore del formato, quindi il visualizzatore legge i file esattamente come le mappe D3.
Come TopoJSON rende i file più piccoli
TopoJSON risparmia spazio in tre modi: archi condivisi, quantizzazione e codifica delta. Ecco la matematica di ciascuno, con la topologia di esempio vista sopra.
1. Archi condivisi
In GeoJSON, un confine tra due poligoni è scritto due volte, una in ciascun poligono. TopoJSON taglia ogni confine in archi nei punti in cui si incontrano tre o più forme, salva ogni arco una volta e lascia che ogni poligono elenchi gli archi che usa. Un indice negativo usa l'arco al contrario.
indice i ≥ 0 → arco i, dal primo all'ultimo punto indice i < 0 → arco ~i = −i − 1, dall'ultimo al primo punto Anello del campo A: [0, 1] = arco 0, poi arco 1 Anello del campo B: [2, −1] = arco 2, poi arco 0 invertito
In una mappa di paesi, quasi tutta la lunghezza di ogni confine è condivisa da esattamente due paesi, quindi questo passo da solo elimina quasi metà delle coordinate dei confini.
2. Quantizzazione
La quantizzazione aggancia ogni coordinata a una griglia regolare e scrive la cella come un intero. Con una quantizzazione q, il riquadro di delimitazione viene diviso in q − 1 passi su ogni asse. Il transform salva la dimensione della griglia (scale) e il suo angolo (translate).
scale_x = (x_max − x_min) / (q − 1) scale_y = (y_max − y_min) / (q − 1) longitudine = x_intero · scale_x + translate_x latitudine = y_intero · scale_y + translate_y
Il file di esempio usa q = 100 000 su Europa e Russia occidentale, circa 69° di longitudine e 36° di latitudine. Un passo misura circa 0,0007° da ovest a est, circa 44 m a 55° nord, e circa 40 m da nord a sud. È molto più fine dei dati di origine in scala 1:50m, quindi non si perde nessun dettaglio visibile. Il pannello File Info mostra questo passo anche per i tuoi file.
3. Codifica delta
In ogni arco, solo la prima posizione è scritta come intero completo. Ogni posizione successiva è scritta come differenza rispetto alla precedente. I punti vicini sono vicini anche nei numeri, quindi le differenze sono piccole e hanno poche cifre.
arco salvato: [[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] e 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)
Quindi l'arco 0 dell'esempio è la linea da (−6, 47) a (−6, 48): il confine tra il campo A e il campo B. Decodificando tutti e tre gli archi si ottengono i due quadrati A = (−7…−6, 47…48) e B = (−6…−5, 47…48). È proprio il caso che controllano i test del visualizzatore, insieme alla rete dei confini condivisi, che restituisce solo quella linea di confine.
4. Il risultato finale
Per l'esempio di questo visualizzatore, il GeoJSON originale con 4 decimali pesa circa 211 KB e il TopoJSON circa 114 KB, più o meno la metà. Quando il visualizzatore decodifica il TopoJSON di nuovo in GeoJSON con numeri decimali completi, sale a circa 500 KB, che è il numero mostrato nel pannello File Info. Dopo la compressione gzip, usata da ogni server web, la differenza di solito si riduce, ma resta chiara per le mappe con molti confini condivisi.
Quando serve un visualizzatore TopoJSON
Queste sono le situazioni in cui uso un visualizzatore TopoJSON veloce.
- Controllare un file prima di creare una mappa D3. Guarda quali oggetti contiene un file TopoJSON scaricato, come si chiamano e quali attributi hanno, così sai cosa scrivere in `topo.objects` prima di iniziare a programmare.
- Controllare i confini dopo la semplificazione. Dopo aver semplificato una mappa con mapshaper o toposimplify, attiva "Highlight shared borders" per verificare che i vicini condividano ancora un confine pulito, senza vuoti né schegge.
- Ricavare GeoJSON da un file TopoJSON. Molte mappe web e strumenti GIS accettano solo GeoJSON. Scarica un oggetto o l'intero file in GeoJSON senza installare nulla.
- Controllare mappe elettorali e di censimento. Le redazioni pubblicano spesso i confini di collegi e comuni in TopoJSON. Apri il file per controllare nomi, id e copertura prima di unire i tuoi risultati.
- Confrontare livelli di quantizzazione. Apri la stessa mappa creata con quantizzazioni diverse e confronta il passo in metri e la dimensione del file, per scegliere il file più piccolo che ha ancora un buon aspetto.
- Spiegare come funziona la topologia. L'elenco degli oggetti, il numero di archi e la vista dei confini condivisi rendono facile mostrare agli studenti perché una topologia pesa meno del GeoJSON normale.
- Aprire i file dei pacchetti world-atlas e us-atlas. Questi popolari pacchetti npm contengono TopoJSON di paesi, stati e contee degli Stati Uniti. Aprili qui per vedere esattamente cosa contengono.
- Capire perché un file non si carica. Se una libreria di mappe non riesce ad aprire un file, il visualizzatore ti dice se è davvero TopoJSON, un GeoJSON con l'estensione sbagliata o un file con riferimenti agli archi rotti.
Domande frequenti
1. Che cos'è TopoJSON?
TopoJSON è un'estensione di GeoJSON che salva la geometria come topologia. I confini condivisi sono salvati una volta come archi, e le coordinate di solito sono quantizzate come interi. L'ha creato Mike Bostock, l'autore di D3.js, per rendere più piccoli i file delle mappe per il web.
2. Come apro un file TopoJSON?
Trascinalo sulla mappa di questo visualizzatore oppure clicca su Upload. In QGIS puoi trascinarlo nella finestra della mappa, perché GDAL legge TopoJSON. Nel codice, usa topojson.feature di topojson-client per trasformare ogni oggetto in GeoJSON.
3. Qual è la differenza tra TopoJSON e GeoJSON?
GeoJSON scrive le coordinate complete di ogni forma, quindi un confine condiviso compare due volte. TopoJSON scrive ogni confine una volta come arco a cui le forme fanno riferimento, e di solito salva le coordinate come piccoli interi. I file TopoJSON sono più piccoli; i file GeoJSON sono più semplici e supportati quasi ovunque.
4. Come converto TopoJSON in GeoJSON?
Carica il file qui e clicca su Download All as GeoJSON, oppure usa il link GeoJSON accanto a un oggetto. Da riga di comando, topo2geo o mapshaper -o format=geojson fanno lo stesso lavoro.
5. Il mio file ha più oggetti. Cosa succede?
Ogni oggetto diventa un layer a sé, con il suo colore e la sua casella. Puoi scaricare ogni oggetto come file GeoJSON separato, oppure tutti insieme. Il file unico aggiunge a ogni elemento un attributo topojson_object.
6. Cosa mostra "Highlight shared borders"?
Disegna gli archi usati da due elementi diversi dello stesso oggetto, per esempio il confine tra due paesi. Gli archi usati da un solo elemento, come le coste, non vengono disegnati. È lo stesso di topojson.mesh(topology, object, (a, b) => a !== b) in D3.
7. Cosa significa "quantizzato" nel pannello File Info?
Significa che il file ha un transform, quindi le sue coordinate sono interi su una griglia. Il pannello mostra quanto misura un passo della griglia sul terreno. Un passo di pochi metri va bene per la mappa di una città; un passo di qualche centinaio di metri va bene per una mappa del mondo.
8. Perché la mia mappa è nel posto sbagliato o molto piccola?
Alcuni file TopoJSON, soprattutto quelli creati per mappe D3 degli Stati Uniti, vengono proiettati prima della conversione, quindi le loro coordinate sono pixel dello schermo, non longitudine e latitudine. Un file così non si può collocare su una mappa del mondo. Usa la versione non proiettata dei dati.
9. Perché ricevo un messaggio che dice che il mio file è GeoJSON?
Molti file TopoJSON usano l'estensione .json, come i file GeoJSON. Il visualizzatore controlla il contenuto, non il nome. Se il file inizia con "type": "FeatureCollection", è GeoJSON. Aprilo nel Visualizzatore GeoJSON di questo sito.
10. Il mio file viene caricato da qualche parte?
No. Il file viene letto e decodificato nel tuo browser con topojson-client. Solo le tile della mappa di base arrivano da internet.
Librerie e dati
Questo visualizzatore è costruito su software open source e dati aperti. Grazie alle persone dietro questi progetti.
- topojson-client 3.1 · ISC · Mike BostockDecodifica la topologia: riporta gli archi a coordinate, ricostruisce ogni oggetto in GeoJSON e costruisce la rete dei confini condivisi.
- Leaflet 1.9 · BSD-2-Clause · Volodymyr Agafonkin and contributorsDisegna la mappa interattiva, i layer e i popup.
- Natural Earth (1:50m Admin 0 countries) · Pubblico dominio · Natural Earth contributorsConfini dei paesi usati nel file di esempio.
- OpenStreetMap, Protomaps (hosted by KONAKTIVE), CARTO, Esri World Imagery · ODbL e condizioni del fornitore · OpenStreetMap contributors, Protomaps, KONAKTIVE, CARTO, EsriTile e immagini della mappa di base.
Visualizzatori di file GIS correlati
I file TopoJSON vengono letti e decodificati nel tuo browser. Nessun file viene mai caricato su un server. L'esempio usa dati Natural Earth (pubblico dominio). Tessere della mappa © contributori di OpenStreetMap, disegnate con Protomaps (ospitato da KONAKTIVE), con CARTO come riserva. Immagini satellitari: Esri.
