Ce que fait cette visionneuse
TopoJSON est un cousin compact de GeoJSON. Il enregistre chaque frontière partagée une seule fois et écrit en général les coordonnées sous forme de petits nombres entiers. Les fichiers sont donc beaucoup plus petits, et c'est pour cela que les cartes D3.js, les cartes électorales et de nombreux projets de journalisme de données l'utilisent. L'inconvénient : un fichier TopoJSON ne se lit pas à l'œil nu, et beaucoup d'outils SIG et de cartes web ne savent pas l'ouvrir sans le convertir d'abord.
Cette visionneuse ouvre le fichier directement. Déposez un fichier .topojson ou .json sur la carte : elle vérifie qu'il s'agit bien d'une topologie, reconstruit chaque forme à partir de ses arcs et dessine chaque objet nommé comme une couche séparée, avec sa propre couleur. Le panneau latéral indique combien d'objets, d'entités et d'arcs contient le fichier, s'il est quantifié et quelle est la finesse de sa grille, et combien les mêmes données pèseraient de plus en GeoJSON classique. Cliquez sur une entité pour lire ses attributs, y compris son id TopoJSON.
J'ai ajouté une fonction absente des visionneuses GeoJSON classiques : « Highlight shared borders ». Elle dessine uniquement les arcs que partagent deux entités différentes, directement à partir de la topologie. C'est le moyen le plus rapide de vérifier qu'une carte de pays, de départements ou de circonscriptions a vraiment des frontières partagées propres, sans trous ni chevauchements. Quand il vous faut les données dans un autre outil, téléchargez un objet ou tous en GeoJSON. Rien n'est envoyé : le fichier ne quitte jamais votre ordinateur.
TopoJSON ou GeoJSON
Les deux formats sont du JSON, et les deux décrivent des points, des lignes et des polygones avec des attributs. La différence tient à la façon dont ils stockent les coordonnées.
| Critère | TopoJSON | GeoJSON |
|---|---|---|
| Frontières partagées | Stockées une fois sous forme d'arc, puis référencées par chaque forme qui les utilise | Stockées de nouveau dans chaque polygone qui les touche |
| Coordonnées | En général des entiers quantifiés, écrits comme de petites différences (deltas) | Longitude et latitude décimales complètes pour chaque sommet |
| Taille du fichier | Souvent bien plus petite pour des polygones qui se touchent | Plus grande, mais simple à lire |
| Couches | Plusieurs objets nommés dans un fichier | Une FeatureCollection par fichier |
| Topologie | Connaît les voisins, donc les frontières peuvent être simplifiées ensemble | Aucun lien entre les formes |
| Prise en charge | D3.js, mapshaper, GDAL/QGIS (lecture seule), cette visionneuse | Presque tous les SIG et bibliothèques de cartes web |
| Norme | TopoJSON Format Specification 1.0 (communauté) | IETF RFC 7946 |
Ma règle pratique : utilisez TopoJSON quand vous envoyez à un navigateur beaucoup de polygones qui se touchent, comme des pays, des régions ou des circonscriptions, et que la taille compte. Utilisez GeoJSON pour tout le reste, surtout quand d'autres personnes ou outils vont modifier les données.
Ce que contient un fichier TopoJSON
Un fichier TopoJSON est un seul objet JSON de type "Topology". Voici ses principaux membres :
- type
- Toujours
"Topology". Un fichier qui indique"FeatureCollection"est du GeoJSON, pas du TopoJSON. - objects
- Un dictionnaire d'objets nommés, par exemple
countriesetcapitals. Chacun est une géométrie ou uneGeometryCollection, et chacun devient une couche dans cette visionneuse. - arcs
- La liste partagée des lignes. Les polygones et les lignes ne contiennent pas de coordonnées eux-mêmes : ils listent les numéros des arcs qui les forment.
- transform
- Facultatif. S'il est présent, le fichier est quantifié : les positions des arcs sont des entiers, et
scaleettranslateles ramènent en longitude et latitude. - bbox
- Facultatif. Le rectangle englobant de toutes les données, sous la forme [min x, min y, max x, max y].
- properties, id
- Chaque géométrie peut porter des
properties(les attributs) et unid, comme une entité GeoJSON.
Voici une topologie complète et très petite, avec deux champs carrés qui se touchent. C'est le même exemple que la section de mathématiques plus bas détaille.
{
"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]]
]
}Le champ A utilise les arcs 0 et 1. Le champ B utilise l'arc 2 puis -1. Un indice négatif veut dire « utiliser cet arc à l'envers » : -1 est l'arc 0 inversé, car le nombre est le complément à un ~0. La frontière entre les champs (arc 0) n'est écrite qu'une fois.
Détails techniques
Voici exactement ce que la visionneuse lit et affiche.
- Fichiers acceptés
- Fichiers
.topojsonet.jsonavec"type": "Topology", jusqu'à 100 Mo. Un fichier GeoJSON reçoit un message clair qui vous renvoie vers la Visionneuse GeoJSON. - Types de géométrie
- Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon et GeometryCollection, y compris les géométries null (elles sont ignorées).
- Objets
- Chaque objet nommé devient sa propre couche, avec case à cocher, couleur, type de géométrie, nombre d'entités et de champs, et un téléchargement en GeoJSON.
- Fichiers quantifiés
- Pris en charge complètement. La visionneuse lit
transform, décode les entiers codés en delta et affiche la taille d'un pas de grille sur le terrain, en mètres. - Frontières partagées
- Pour les objets avec des polygones, la visionneuse construit le maillage des arcs utilisés par deux entités différentes (
topojson.meshaveca !== b) et peut le dessiner par-dessus. - Attributs
- Toutes les
propertiess'affichent dans la fenêtre. UnidTopoJSON est ajouté comme attributid, pour que vous le voyiez et qu'il reste dans l'export. - Système de coordonnées
- Le TopoJSON pour les cartes web est en général en longitude et latitude WGS84. Les fichiers projetés avant la conversion (par exemple en US Albers pour une carte D3) ne sont pas en degrés et ne peuvent pas être placés sur une carte du monde.
- Export
- Chaque objet dans son propre fichier GeoJSON, ou tous les objets dans un seul GeoJSON avec un attribut
topojson_objectqui indique l'origine de chaque entité. - Fond de carte
- Carte routière par défaut, avec une option satellite. Mettez l'opacité de remplissage à 0 pour ne voir que les contours.
- Confidentialité
- Le fichier est lu et décodé dans votre navigateur. Rien n'est envoyé à un serveur.
Comment afficher un fichier TopoJSON, étape par étape
Voici tout le déroulé avec l'exemple intégré : 50 pays européens issus de Natural Earth et 22 capitales, enregistrés dans une seule topologie quantifiée à deux objets.

La carte s'ouvre avec un fond routier. Utilisez Upload, glissez un fichier sur la carte ou cliquez sur Sample Data.

Le fichier est décodé dans votre navigateur et chaque objet est dessiné dans sa couleur. File Info indique le nombre d'objets, d'entités et d'arcs, le pas de quantification et la taille qu'auraient les mêmes données en GeoJSON.

Le panneau Objects liste chaque objet de la topologie avec son type de géométrie et son nombre d'entités. Décochez un objet pour le masquer, ou cliquez sur son carré de couleur pour la changer.

Cochez « Highlight shared borders » pour dessiner les arcs partagés par deux entités différentes, construits à partir de la topologie elle-même. Les côtes ne sont pas partagées, elles restent donc simples.

Cliquez sur une entité pour ouvrir ses attributs. La fenêtre indique aussi l'objet auquel elle appartient et affiche l'id TopoJSON.

Utilisez le lien GeoJSON à côté d'un objet pour télécharger seulement cet objet, ou Download All as GeoJSON pour tout avoir dans un fichier.
Autres façons d'ouvrir et de convertir du TopoJSON
Cette visionneuse sert à regarder un fichier rapidement. Voici les autres outils que j'utilise quand un fichier TopoJSON demande un vrai travail.
mapshaper
mapshaper (le site mapshaper.org ou l'outil en ligne de commande) lit et écrit TopoJSON, Shapefile, GeoJSON et CSV. C'est le meilleur outil pour simplifier des frontières en les gardant partagées, et pour convertir entre TopoJSON et d'autres formats.
QGIS et GDAL
GDAL possède un pilote TopoJSON en lecture seule, donc QGIS ouvre un fichier TopoJSON par simple glisser-déposer. Chaque objet apparaît comme une couche séparée. Pour l'enregistrer, exportez la couche en GeoJSON ou en GeoPackage. ogr2ogr convertit en ligne de commande.
Les outils topojson en ligne de commande
geo2topo (de topojson-server) construit une topologie à partir de fichiers GeoJSON, toposimplify (de topojson-simplify) et topoquantize (de topojson-client) la rendent plus petite, et topo2geo (aussi de topojson-client) retransforme les objets en GeoJSON.
D3.js et Python
Dans le navigateur, topojson.feature transforme un objet en GeoJSON pour D3 ou toute bibliothèque de cartes, et topojson.mesh donne les frontières partagées. En Python, GeoPandas lit TopoJSON via GDAL, un objet (couche) à la fois.
Les mêmes tâches en code
Ces commandes convertissent un fichier de pays dans les deux sens et le lisent en JavaScript et 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")Mon avis : gardez vos données de référence en GeoJSON, GeoPackage ou Shapefile, et créez le TopoJSON en dernière étape pour le web. Il se reconstruit facilement, mais se modifie mal à la main.
Comment fonctionne la visionneuse
Voici ce qui se passe entre le dépôt d'un fichier et son affichage sur la carte. Chaque étape se déroule dans votre navigateur.
- Lire et vérifier le JSON. Le fichier est lu comme du texte puis analysé. Si le
typede premier niveau n'est pas"Topology", ou s'il manqueobjectsouarcs, vous recevez un message d'erreur clair au lieu d'une carte vide. - Décoder les arcs. Si le fichier a un
transform, chaque arc est décodé des entiers codés en delta vers la longitude et la latitude. Sans transform, les positions des arcs sont utilisées telles quelles. - Reconstruire chaque objet. Pour chaque objet nommé,
topojson.featureassemble les arcs référencés en anneaux et en lignes, inverse les arcs d'indice négatif et renvoie une FeatureCollection GeoJSON avec les properties et les id d'origine. - Construire le maillage des frontières partagées. Pour les objets avec des polygones,
topojson.meshavec le filtrea !== bréunit chaque arc qui appartient à deux entités différentes. Les arcs utilisés par une seule entité, comme les côtes, sont laissés de côté. - Mesurer le fichier. La visionneuse compte les objets, les entités et les arcs, calcule la taille d'un pas de quantification en mètres et mesure la taille qu'aurait le GeoJSON décodé.
- Dessiner et cadrer. Chaque objet devient une couche Leaflet avec sa propre couleur. Les points sont dessinés en cercles. La carte zoome sur toutes les données visibles.
Le décodage lui-même est fait par topojson-client, la bibliothèque de référence écrite par le créateur du format, donc la visionneuse lit les fichiers exactement comme les cartes D3.
Comment TopoJSON réduit la taille des fichiers
TopoJSON gagne de la place de trois façons : arcs partagés, quantification et codage delta. Voici les mathématiques de chacune, avec la topologie d'exemple ci-dessus.
1. Arcs partagés
En GeoJSON, une frontière entre deux polygones est écrite deux fois, une fois dans chaque polygone. TopoJSON découpe chaque limite en arcs aux points où trois formes ou plus se rejoignent, enregistre chaque arc une fois et laisse chaque polygone lister les arcs qu'il utilise. Un indice négatif utilise l'arc à l'envers.
indice i ≥ 0 → arc i, du premier au dernier point indice i < 0 → arc ~i = −i − 1, du dernier au premier point Anneau du champ A : [0, 1] = arc 0, puis arc 1 Anneau du champ B : [2, −1] = arc 2, puis arc 0 inversé
Sur une carte de pays, presque toute la longueur de chaque frontière est partagée par exactement deux pays, donc cette seule étape supprime près de la moitié des coordonnées des frontières.
2. Quantification
La quantification cale chaque coordonnée sur une grille régulière et écrit la case sous forme d'entier. Avec une quantification q, le rectangle englobant est découpé en q − 1 pas sur chaque axe. Le transform enregistre la taille de la grille (scale) et son coin (translate).
scale_x = (x_max − x_min) / (q − 1) scale_y = (y_max − y_min) / (q − 1) longitude = x_entier · scale_x + translate_x latitude = y_entier · scale_y + translate_y
Le fichier d'exemple utilise q = 100 000 sur l'Europe et l'ouest de la Russie, soit environ 69° de longitude et 36° de latitude. Un pas mesure environ 0,0007° d'ouest en est, à peu près 44 m à 55° nord, et environ 40 m du nord au sud. C'est bien plus fin que les données source au 1:50m, donc aucun détail visible n'est perdu. Le panneau File Info affiche ce pas pour vos propres fichiers.
3. Codage delta
Dans chaque arc, seule la première position est écrite comme un entier complet. Chaque position suivante est écrite comme la différence avec la précédente. Les points voisins sont proches, donc les différences sont de petits nombres avec peu de chiffres.
arc enregistré : [[4000, 7000], [0, 1000]] point 1 : x = 4000 y = 7000 point 2 : x = 4000 + 0 = 4000 y = 7000 + 1000 = 8000 avec scale [0.001, 0.001] et translate [−10, 40] : point 1 : (4000 · 0.001 − 10, 7000 · 0.001 + 40) = (−6, 47) point 2 : (4000 · 0.001 − 10, 8000 · 0.001 + 40) = (−6, 48)
L'arc 0 de l'exemple est donc la ligne de (−6, 47) à (−6, 48) : la frontière entre le champ A et le champ B. En décodant les trois arcs, on obtient les deux carrés A = (−7…−6, 47…48) et B = (−6…−5, 47…48). C'est exactement le cas que vérifient les tests de la visionneuse, avec le maillage des frontières partagées, qui ne renvoie que cette ligne.
4. Le résultat
Pour l'exemple de cette visionneuse, le GeoJSON d'origine à 4 décimales pèse environ 211 Ko et le TopoJSON environ 114 Ko, soit à peu près la moitié. Quand la visionneuse redécode le TopoJSON en GeoJSON avec des nombres décimaux complets, il monte à environ 500 Ko, et c'est ce chiffre qu'affiche le panneau File Info. Après la compression gzip, que tout serveur web utilise, l'écart se réduit en général, mais reste net pour les cartes avec beaucoup de frontières partagées.
Quand une visionneuse TopoJSON est utile
Voici les situations où j'utilise une visionneuse TopoJSON rapide.
- Vérifier un fichier avant de créer une carte D3. Voyez quels objets contient un fichier TopoJSON téléchargé, comment ils s'appellent et quels attributs ils ont, pour savoir quoi écrire dans `topo.objects` avant de coder.
- Vérifier les frontières après simplification. Après avoir simplifié une carte dans mapshaper ou toposimplify, activez « Highlight shared borders » pour confirmer que les voisins partagent toujours une frontière propre, sans trous ni éclats.
- Sortir du GeoJSON d'un fichier TopoJSON. Beaucoup de cartes web et d'outils SIG n'acceptent que le GeoJSON. Téléchargez un objet ou le fichier entier en GeoJSON sans rien installer.
- Contrôler des cartes électorales et de recensement. Les rédactions publient souvent les limites de circonscriptions et de communes en TopoJSON. Ouvrez le fichier pour contrôler les noms, les id et la couverture avant d'y joindre vos résultats.
- Comparer des niveaux de quantification. Ouvrez la même carte construite avec différentes quantifications et comparez le pas en mètres et la taille du fichier, pour choisir le plus petit fichier qui reste beau.
- Expliquer le fonctionnement d'une topologie. La liste des objets, le nombre d'arcs et la vue des frontières partagées permettent de montrer facilement aux élèves pourquoi une topologie pèse moins que du GeoJSON classique.
- Ouvrir les fichiers des paquets world-atlas et us-atlas. Ces paquets npm populaires contiennent du TopoJSON pour les pays, les États et les comtés des États-Unis. Ouvrez-les ici pour voir exactement ce qu'ils contiennent.
- Comprendre pourquoi un fichier ne se charge pas. Si une bibliothèque de cartes échoue sur un fichier, la visionneuse vous dit s'il s'agit vraiment de TopoJSON, de GeoJSON avec la mauvaise extension ou d'un fichier aux références d'arcs cassées.
Questions fréquentes
1. Qu'est-ce que TopoJSON ?
TopoJSON est une extension de GeoJSON qui enregistre la géométrie sous forme de topologie. Les frontières partagées sont stockées une fois sous forme d'arcs, et les coordonnées sont en général quantifiées en entiers. Il a été créé par Mike Bostock, l'auteur de D3.js, pour rendre les fichiers de cartes pour le web plus petits.
2. Comment ouvrir un fichier TopoJSON ?
Déposez-le sur la carte de cette visionneuse ou cliquez sur Upload. Dans QGIS, vous pouvez le glisser dans la fenêtre de carte, car GDAL lit le TopoJSON. En code, utilisez topojson.feature de topojson-client pour transformer chaque objet en GeoJSON.
3. Quelle est la différence entre TopoJSON et GeoJSON ?
GeoJSON écrit les coordonnées complètes de chaque forme, donc une frontière partagée apparaît deux fois. TopoJSON écrit chaque frontière une fois sous forme d'arc que les formes référencent, et enregistre en général les coordonnées en petits entiers. Les fichiers TopoJSON sont plus petits ; les fichiers GeoJSON sont plus simples et pris en charge presque partout.
4. Comment convertir du TopoJSON en GeoJSON ?
Chargez le fichier ici et cliquez sur Download All as GeoJSON, ou utilisez le lien GeoJSON à côté d'un objet. En ligne de commande, topo2geo ou mapshaper -o format=geojson font le même travail.
5. Mon fichier contient plusieurs objets. Que deviennent-ils ?
Chaque objet devient sa propre couche, avec sa couleur et sa case à cocher. Vous pouvez télécharger chaque objet dans un fichier GeoJSON séparé, ou tous ensemble. Le fichier commun ajoute un attribut topojson_object à chaque entité.
6. Que montre « Highlight shared borders » ?
Il dessine les arcs utilisés par deux entités différentes du même objet, par exemple la frontière entre deux pays. Les arcs utilisés par une seule entité, comme les côtes, ne sont pas dessinés. C'est la même chose que topojson.mesh(topology, object, (a, b) => a !== b) dans D3.
7. Que veut dire « quantifié » dans le panneau File Info ?
Cela veut dire que le fichier a un transform, donc ses coordonnées sont des entiers sur une grille. Le panneau indique la taille d'un pas de grille sur le terrain. Un pas de quelques mètres convient à un plan de ville ; un pas de quelques centaines de mètres convient à une carte du monde.
8. Pourquoi ma carte est-elle au mauvais endroit ou toute petite ?
Certains fichiers TopoJSON, surtout ceux faits pour des cartes D3 des États-Unis, sont projetés avant la conversion : leurs coordonnées sont alors des pixels d'écran, pas des longitudes et latitudes. Un tel fichier ne peut pas être placé sur une carte du monde. Utilisez plutôt la version non projetée des données.
9. Pourquoi un message me dit-il que mon fichier est du GeoJSON ?
Beaucoup de fichiers TopoJSON utilisent l'extension .json, tout comme les fichiers GeoJSON. La visionneuse vérifie le contenu, pas le nom. Si le fichier commence par "type": "FeatureCollection", c'est du GeoJSON. Ouvrez-le dans la Visionneuse GeoJSON de ce site.
10. Mon fichier est-il envoyé quelque part ?
Non. Le fichier est lu et décodé dans votre navigateur avec topojson-client. Seules les tuiles du fond de carte viennent d'internet.
Bibliothèques et données
Cette visionneuse repose sur des logiciels open source et des données ouvertes. Un grand merci aux personnes derrière ces projets.
- topojson-client 3.1 · ISC · Mike BostockDécode la topologie : retransforme les arcs en coordonnées, reconstruit chaque objet en GeoJSON et construit le maillage des frontières partagées.
- Leaflet 1.9 · BSD-2-Clause · Volodymyr Agafonkin and contributorsDessine la carte interactive, les couches et les fenêtres d'information.
- Natural Earth (1:50m Admin 0 countries) · Domaine public · Natural Earth contributorsFrontières des pays utilisées dans le fichier d'exemple.
- OpenStreetMap, Protomaps (hosted by KONAKTIVE), CARTO, Esri World Imagery · ODbL et conditions du fournisseur · OpenStreetMap contributors, Protomaps, KONAKTIVE, CARTO, EsriTuiles et images du fond de carte.
Visionneuses de fichiers SIG associées
Les fichiers TopoJSON sont lus et décodés dans votre navigateur. Aucun fichier n'est jamais envoyé à un serveur. L'exemple utilise des données Natural Earth (domaine public). Tuiles de carte © contributeurs d'OpenStreetMap, dessinées avec Protomaps (hébergé par KONAKTIVE), avec CARTO en secours. Images satellite : Esri.
