OnlineMapMaker logo

Visionneuse TopoJSON

Ouvrez un fichier .topojson sur une carte interactive. Chaque objet de la topologie devient sa propre couche, vous pouvez mettre en avant les frontières que partagent les formes voisines, cliquer sur une entité pour lire ses attributs et exporter les données en GeoJSON. Tout se passe dans votre navigateur. Ouvrir en plein écran ↗

Rate this tool:
Publicité
Publicité
Loading viewer…
Besoin d'aide pour votre projet SIG ?Découvrir Nos Services

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.

Publicité
Publicité

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èreTopoJSONGeoJSON
Frontières partagéesStockées une fois sous forme d'arc, puis référencées par chaque forme qui les utiliseStockées de nouveau dans chaque polygone qui les touche
CoordonnéesEn 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 fichierSouvent bien plus petite pour des polygones qui se touchentPlus grande, mais simple à lire
CouchesPlusieurs objets nommés dans un fichierUne FeatureCollection par fichier
TopologieConnaît les voisins, donc les frontières peuvent être simplifiées ensembleAucun lien entre les formes
Prise en chargeD3.js, mapshaper, GDAL/QGIS (lecture seule), cette visionneusePresque tous les SIG et bibliothèques de cartes web
NormeTopoJSON 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 countries et capitals. Chacun est une géométrie ou une GeometryCollection, 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 scale et translate les 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 un id, 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 .topojson et .json avec "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.mesh avec a !== b) et peut le dessiner par-dessus.
Attributs
Toutes les properties s'affichent dans la fenêtre. Un id TopoJSON est ajouté comme attribut id, 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_object qui 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.

Visionneuse TopoJSON vide avec les boutons Upload, Sample Data et Street/Sat au-dessus d'une carte du monde
1
Étape 1: Ouvrir la visionneuse

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

Pays européens et capitales chargés depuis le fichier TopoJSON d'exemple, avec le panneau File Info
2
Étape 2: Charger un fichier TopoJSON

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.

Panneau Objects avec les objets countries et capitals, leurs cases, leurs couleurs et leurs liens de téléchargement
3
Étape 3: Travailler avec les objets

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.

Frontières partagées entre pays européens dessinées en lignes sombres pointillées au-dessus des pays colorés
4
Étape 4: Mettre en avant les frontières partagées

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.

Fenêtre sur l'Allemagne avec son id, son nom, ses codes ISO, sa superficie et sa population
5
Étape 5: Lire les attributs

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

Panneau Actions avec le bouton Download All as GeoJSON mis en avant
6
Étape 6: Exporter en GeoJSON

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.

Publicité
Publicité

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.

  1. Lire et vérifier le JSON. Le fichier est lu comme du texte puis analysé. Si le type de premier niveau n'est pas "Topology", ou s'il manque objects ou arcs, vous recevez un message d'erreur clair au lieu d'une carte vide.
  2. 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.
  3. Reconstruire chaque objet. Pour chaque objet nommé, topojson.feature assemble 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.
  4. Construire le maillage des frontières partagées. Pour les objets avec des polygones, topojson.mesh avec le filtre a !== b ré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é.
  5. 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é.
  6. 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.

Publicité
Publicité

Quand une visionneuse TopoJSON est utile

Voici les situations où j'utilise une visionneuse TopoJSON rapide.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.

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.

Muhammad Gulraiz Khan, expert GIS et fondateur de KONAKTIVE et OnlineMapMaker.com

À Propos de l’Auteur

Muhammad Gulraiz Khan

Expert et Consultant GIS · Fondateur de KONAKTIVE

Muhammad Gulraiz Khan est un expert GIS avec plus d’une décennie d’expérience professionnelle dans la fourniture de solutions géospatiales pour le secteur de l’énergie, notamment des projets pour la Banque mondiale, la Société financière internationale (IFC) et l’USAID. Il a créé OnlineMapMaker.com pour rendre les outils de cartographie professionnels gratuits et accessibles à tous.

Publicité
Publicité