Ce que fait cette visionneuse
Beaucoup de données de localisation n'arrivent jamais sous forme de fichier SIG. Elles arrivent en JSON ordinaire : la réponse d'une API météo, une liste de magasins d'un localisateur, un export d'une application de livraison ou un fichier envoyé par un développeur. Chaque enregistrement a une latitude et une longitude quelque part, mais un outil de cartographie qui attend du GeoJSON ne sait pas le lire, et l'ouvrir dans un tableur fait perdre la structure imbriquée.
Cette visionneuse lit ce JSON tel quel. Elle parcourt tout le document à la recherche de listes d'enregistrements, transforme les objets imbriqués en noms de champs comme `location.lat`, et reconnaît les noms habituels de latitude et de longitude, ainsi que les champs uniques qui contiennent les deux valeurs, comme des tableaux `[lng, lat]` ou des textes `"lat, lng"`. Chaque enregistrement aux coordonnées valides apparaît sur la carte. Le panneau latéral indique combien d'enregistrements n'avaient pas de coordonnées ou des valeurs hors limites, et vous prévient quand latitude et longitude semblent inversées.
Je l'ai créée pour le moment où quelqu'un vous envoie un fichier JSON en demandant « où sont-ils ? ». Vous vérifiez les données en quelques secondes, colorez les points selon n'importe quel champ, cliquez sur un point pour lire tout l'enregistrement, et téléchargez le résultat en GeoJSON pour un SIG ou en CSV pour un tableur. Le fichier est lu dans votre navigateur et n'est jamais envoyé.
Les formes de JSON que la visionneuse comprend
Le JSON réel prend beaucoup de formes. Voici celles que la visionneuse lit sans aucun réglage. Dans chaque cas, elle affiche la liste d'enregistrements trouvée, et vous pouvez en choisir une autre si le fichier en contient plusieurs.
[{ "name": "Berlin", "lat": 52.52, "lng": 13.405 }]lat et lng sont trouvés par leur nom.{ "data": { "cities": [{ "name": "Paris", "latitude": 48.8566, "longitude": 2.3522 }] } }data.cities. Les autres listes du fichier apparaissent dans le menu « List of records ».[{ "name": "Rome", "location": { "lat": 41.9028, "lon": 12.4964 } }]location.lat et location.lon. Une latitude et une longitude de même parent sont préférées.[{ "id": 7, "coordinates": [2.1686, 41.3874] }]coordinates est lu comme [longitude, latitude], l'ordre de GeoJSON. Pour d'autres noms, l'ordre est décidé selon les plages de valeurs.[{ "stop": "Central", "latlng": "59.3293, 18.0686" }]{ "BER": { "lat": 52.52, "lng": 13.405 }, "PAR": { "lat": 48.86, "lng": 2.35 } }_key.{"lat": 38.72, "lng": -9.14}
{"lat": 41.16, "lng": -8.63}Les nombres stockés en texte, comme "52.52", et les nombres avec une virgule décimale, comme "52,52", sont lus aussi. Les tableaux à l'intérieur d'un enregistrement, comme une liste de mots-clés, restent en texte JSON dans la fenêtre et dans l'export.
Quels noms de champs sont reconnus
La visionneuse compare la dernière partie de chaque nom de champ, donc `lat`, `location.lat` et `data.geo.lat` comptent tous. Les majuscules et minuscules ne comptent pas. Si rien ne correspond, vous choisissez les champs vous-même dans le panneau Coordinates.
- Latitude
lat,latitude,lat_dd,y,ycoord,point_y,decimalLatitude,gps_lat,geo_latet formes voisines.- Longitude
lng,lon,long,longitude,lon_dd,x,xcoord,point_x,decimalLongitude,gps_lon,geo_lnget formes voisines.- Un champ avec les deux
- Noms se terminant par
coordinates,coords,position,latlng,lnglat,location,geo,point,centerougps, quand la valeur est un tableau de deux nombres ou un texte "a, b". - Choix entre candidats
- Chaque paire possible de latitude et de longitude est testée sur les 300 premiers enregistrements. La paire avec le plus de valeurs dans ±90 et ±180 gagne, une paire de même parent reçoit un bonus, et
x/yperdent les égalités face à de vrais noms lat/lng. - Ordre d'une paire
lnglat,lonlatetcoordinatesveulent dire longitude d'abord.latlngetlatlonveulent dire latitude d'abord. Pour d'autres noms, l'ordre avec le plus de valeurs valides gagne. Si les deux conviennent, les tableaux sont lus en [lng, lat] et les textes en "lat, lng".
Détails techniques
Voici exactement ce que la visionneuse accepte et produit.
- Entrée
- Fichiers
.json,.jsonlet.ndjsonjusqu'à 50 Mo, ou JSON collé dans la zone Paste JSON. - Pas pour GeoJSON ni TopoJSON
- Si le fichier est déjà du GeoJSON (
"type": "FeatureCollection") ou du TopoJSON ("type": "Topology"), un message vous renvoie vers la Visionneuse GeoJSON ou la Visionneuse TopoJSON de ce site. - Listes d'enregistrements
- Tableaux dont au moins la moitié des éléments sont des objets, à toute profondeur jusqu'à 8 niveaux, plus les objets dont toutes les valeurs sont des enregistrements. Les listes avec coordonnées viennent d'abord, puis les plus grandes.
- Coordonnées valides
- Latitude entre −90 et 90, longitude entre −180 et 180, en degrés décimaux (WGS84). Les enregistrements hors de ces plages sont comptés et ne sont pas dessinés.
- Alerte d'inversion
- Si un enregistrement est hors limites mais serait valide avec latitude et longitude inversées, la visionneuse le compte et propose un bouton Swap.
- Couleur par champ
- Tout champ avec au plus 10 valeurs différentes peut colorer les points, avec une légende et un compte par valeur.
- Performances
- Les points sont dessinés sur un canvas, donc des dizaines de milliers d'enregistrements restent fluides sur un ordinateur portable ordinaire.
- Export
- GeoJSON avec chaque champ en propriété, ou CSV avec
latitudeetlongitudeen deux premières colonnes, suivies des champs aplatis. - Confidentialité
- Le fichier est lu dans votre navigateur. Seules les tuiles du fond de carte viennent d'internet.
Comment mettre du JSON sur une carte, étape par étape
Voici tout le déroulé avec l'exemple intégré : 25 villes européennes dans une réponse imbriquée de style API, avec les coordonnées dans un objet `location` et un enregistrement sans position.

La carte s'ouvre avec un fond routier. Utilisez Upload, Paste JSON ou glissez un fichier sur la carte. Ici, j'ai cliqué sur Sample Data.

Le panneau Records montre la liste choisie (`data.cities`), combien d'enregistrements sont sur la carte et combien n'avaient pas de coordonnées. Dans l'exemple, un enregistrement a `"location": null`, donc 24 sur 25 sont affichés.

Le panneau Coordinates montre les champs détectés, ici `location.lat` et `location.lng`. Passez à « One field » pour des données avec un seul champ `[lng, lat]` ou `"lat, lng"`, et utilisez Swap si les points tombent au mauvais endroit.

Choisissez un champ sous « Color by field ». Ici, `capital` sépare les capitales des autres villes, avec une légende et un compte par valeur.

Cliquez sur un point pour voir ses coordonnées exactes et tous les champs de l'enregistrement, y compris les valeurs imbriquées et les tableaux.

Téléchargez les points en GeoJSON pour QGIS, ArcGIS ou une carte web, ou en CSV pour Excel et Google Sheets.
Autres façons de mettre des données JSON sur une carte
Cette visionneuse est le moyen le plus rapide de regarder un fichier JSON. Quand il faut faire le même travail dans une chaîne de traitement, voici les outils que j'utilise.
QGIS
QGIS ne sait pas placer seul des enregistrements JSON ordinaires sur une carte. Il lit le GeoJSON, et il lit le CSV avec « Ajouter une couche de texte délimité ». La voie habituelle consiste donc à convertir d'abord le JSON en CSV ou en GeoJSON, ce que font justement les boutons d'export ici.
Python avec pandas et GeoPandas
pandas.json_normalize aplatit le JSON imbriqué en colonnes aux noms pointés, comme cette visionneuse. Ensuite, geopandas.points_from_xy crée les points. Attention, il prend x (la longitude) en premier.
jq en ligne de commande
jq peut transformer n'importe quel JSON en FeatureCollection GeoJSON en une seule commande. C'est idéal dans les scripts qui récupèrent des données d'une API à intervalles réguliers.
JavaScript et Leaflet
Si vous construisez votre propre carte web, vous pouvez parcourir les enregistrements et ajouter des marqueurs. Leaflet attend [lat, lng], alors que GeoJSON stocke [lng, lat]. Les confondre est le bug le plus fréquent du code cartographique.
Le même travail en code
Les trois exemples lisent le fichier d'exemple utilisé plus haut, ignorent l'enregistrement sans position et gardent les autres champs.
# Python: pandas flattens nested JSON, GeoPandas builds the points
import json
import pandas as pd
import geopandas as gpd
with open("cities.json") as f:
data = json.load(f)
df = pd.json_normalize(data["data"]["cities"]) # columns: location.lat, location.lng
df = df.dropna(subset=["location.lat", "location.lng"])
gdf = gpd.GeoDataFrame(
df, geometry=gpd.points_from_xy(df["location.lng"], df["location.lat"]), crs="EPSG:4326"
)
gdf.to_file("cities.geojson", driver="GeoJSON")# jq on the command line: JSON records to a GeoJSON FeatureCollection
jq '{type: "FeatureCollection", features: [
.data.cities[] | select(.location != null) | {
type: "Feature",
properties: del(.location),
geometry: { type: "Point", coordinates: [.location.lng, .location.lat] }
}]}' cities.json > cities.geojson// JavaScript + Leaflet: note the order, Leaflet wants [lat, lng]
const res = await fetch("cities.json");
const json = await res.json();
for (const c of json.data.cities) {
if (!c.location) continue;
L.marker([c.location.lat, c.location.lng]).bindPopup(c.name).addTo(map);
}Mon avis : utilisez cette visionneuse pour comprendre un nouveau fichier JSON et vérifier ses coordonnées. Une fois la structure connue, quelques lignes de Python ou de jq le transforment en GeoJSON à chaque mise à jour des données.
Comment fonctionne la visionneuse
Voici ce qui se passe entre le dépôt d'un fichier et l'affichage des points. Chaque étape se déroule dans votre navigateur.
- Analyser le texte. Le texte est analysé comme du JSON. Si cela échoue et que le fichier a plusieurs lignes, chaque ligne est analysée en JSON Lines. Une marque d'ordre des octets au début est retirée.
- Refuser les fichiers qui ont leur propre visionneuse. Le GeoJSON et le TopoJSON sont reconnus par leur
typeet renvoyés vers la visionneuse adaptée de ce site, car ils contiennent déjà une vraie géométrie. - Trouver les listes d'enregistrements. La visionneuse parcourt le document jusqu'à 8 niveaux de profondeur et rassemble chaque tableau composé surtout d'objets, ainsi que chaque objet dont toutes les valeurs sont des enregistrements. Chaque enregistrement est aplati en chemins pointés.
- Détecter les coordonnées. Les noms de champs sont comparés aux listes ci-dessus. Chaque paire candidate est testée sur 300 enregistrements au plus, et la paire avec le plus de valeurs valides gagne. Si aucune paire ne convient, les champs uniques à deux nombres sont essayés.
- Construire les points. Chaque enregistrement est lu avec les champs choisis. Les nombres en texte sont convertis, les valeurs hors de ±90 / ±180 sont comptées et ignorées, et les enregistrements qui conviendraient une fois inversés sont comptés à part.
- Dessiner, colorer et exporter. Les points sont dessinés sur une couche canvas et la carte zoome dessus. Changer un champ, l'ordre ou la couleur redessine la carte aussitôt. Les exports utilisent exactement les enregistrements que vous voyez.
La détection n'est qu'une première proposition. Chaque choix se modifie dans le panneau latéral, et la carte se met à jour dès que vous le changez, donc une mauvaise proposition coûte un clic.
Vérifier les coordonnées : plages, inversions et précision
Une paire latitude/longitude, ce n'est que deux nombres. Ces trois vérifications vous disent si ces nombres ont un sens.
1. Plages valides
La latitude mesure vers le nord et le sud depuis l'équateur, elle ne peut donc aller que de −90 au pôle Sud à +90 au pôle Nord. La longitude mesure vers l'est et l'ouest depuis Greenwich et va de −180 à +180.
valide ⇔ −90 ≤ latitude ≤ 90 et −180 ≤ longitude ≤ 180 latitude 91.2, longitude 10.5 → non valide (latitude trop grande)
Une valeur hors de ces plages est presque toujours l'une de trois choses : les champs sont inversés, les données sont dans un système projeté comme l'UTM ou des mètres Web Mercator, ou la virgule décimale s'est perdue (52520000 au lieu de 52.52).
2. Détecter des valeurs inversées
Si une paire n'est pas valide telle quelle mais le devient quand les deux nombres échangent leur place, les champs sont probablement inversés. La visionneuse compte ces enregistrements et propose un bouton Swap.
stocké : lat = 151.21, lng = −33.87 → non valide inversé : lat = −33.87, lng = 151.21 → valide (Sydney)
Ce test ne détecte pas toutes les inversions. Quand les deux nombres sont entre −90 et 90, les deux ordres sont valides. Paris stocké en (2.35, 48.86) au lieu de (48.86, 2.35) tombe dans l'océan Indien, au large de la Somalie. Si vos points apparaissent dans la mauvaise partie du monde, essayez Swap et regardez la carte.
3. Décimales et précision
Un degré de latitude mesure environ 111 km partout. Un degré de longitude mesure environ 111 km à l'équateur et diminue avec le cosinus de la latitude. Chaque décimale rend donc la position environ dix fois plus précise.
1° latitude ≈ 111 320 m 1° longitude ≈ 111 320 m · cos(latitude) décimales pas en latitude pas en longitude à Berlin (52.52°) 1 11.1 km 6.8 km 2 1.1 km 680 m 3 111 m 68 m 4 11.1 m 6.8 m 5 1.1 m 0.68 m 6 0.11 m 0.07 m
Quatre décimales suffisent pour trouver un bâtiment, cinq pour trouver une porte, et six sont déjà plus fines que le GPS d'un téléphone ordinaire. Si votre JSON a 10 ou 15 décimales, les chiffres en plus n'ajoutent aucune précision ; ils viennent du calcul en virgule flottante.
Quand cette visionneuse est utile
Voici les situations où j'utilise une visionneuse de carte JSON.
- Vérifier une réponse d'API. Collez la réponse d'une API météo, de transport ou de localisation de magasins et voyez tout de suite si les positions ont un sens, avant d'écrire le moindre code de carte.
- Contrôler un export d'application ou de base de données. Les applications de livraison, les CRM et les plateformes IoT exportent souvent du JSON. Affichez l'export sur une carte pour trouver les enregistrements aux coordonnées manquantes ou fausses.
- Convertir du JSON en GeoJSON ou CSV. Obtenez un fichier GeoJSON pour QGIS ou ArcGIS, ou un CSV pour Excel, sans écrire de script.
- Repérer des coordonnées inversées. L'alerte et la carte rendent facile à voir le bug classique où latitude et longitude échangent leur place quelque part dans une chaîne de traitement.
- Explorer des portails open data. Beaucoup de portails open data proposent du JSON à côté du CSV. Le JSON garde souvent des détails imbriqués que le CSV perd, et vous pouvez le cartographier directement.
- Regrouper des points par champ. Colorez par statut, catégorie ou type pour voir des tendances, par exemple quelles stations sont hors ligne ou quels magasins ouvrent le dimanche.
- Déboguer du code de carte. Si votre propre carte affiche des points au mauvais endroit, chargez ici le même JSON. Si les points sont justes ici, le bug est dans votre code, souvent une confusion entre [lat, lng] et [lng, lat].
- Enseigner le JSON et les coordonnées. Les élèves peuvent coller de petits exemples de JSON et voir comment l'imbrication, les noms de champs et l'ordre des coordonnées changent le résultat sur la carte.
Questions fréquentes
1. Comment afficher des données JSON sur une carte ?
Importez le fichier, collez le JSON ou glissez le fichier sur la carte. La visionneuse trouve seule les enregistrements et les champs de latitude et de longitude. Si elle ne les trouve pas, choisissez les champs dans le panneau Coordinates.
2. Quelle est la différence entre JSON et GeoJSON ?
JSON est un format de données général. GeoJSON est une norme JSON (RFC 7946) avec une structure fixe pour la géométrie : des entités avec un objet geometry et des properties. Le JSON ordinaire peut stocker des coordonnées dans n'importe quel champ, sous n'importe quel nom, c'est pourquoi cette visionneuse doit les chercher.
3. Mes coordonnées sont dans un objet imbriqué. Est-ce que ça marche ?
Oui. Les objets imbriqués sont aplatis en chemins pointés, donc {"location": {"lat": 52.5}} devient le champ location.lat. La visionneuse cherche jusqu'à 8 niveaux de profondeur.
4. Mon fichier contient plusieurs listes. Laquelle est utilisée ?
La visionneuse préfère une liste qui contient des coordonnées, puis la plus grande. Toutes les listes trouvées sont dans le menu « List of records », vous pouvez donc en changer.
5. Mes points sont au mauvais endroit. Que faire ?
Cliquez d'abord sur Swap. Latitude et longitude sont souvent stockées à l'envers. Si les points restent faux, vérifiez le système de coordonnées : des valeurs de plusieurs milliers ou millions sont sans doute des mètres UTM ou Web Mercator, pas des degrés.
6. Pourquoi certains enregistrements manquent-ils sur la carte ?
Le panneau Records en donne la raison : soit l'enregistrement n'avait pas de valeur dans les champs de coordonnées, soit les valeurs étaient hors de ±90 pour la latitude ou de ±180 pour la longitude. Seuls les enregistrements valides sont dessinés et exportés.
7. Est-ce que ça marche avec des coordonnées stockées en texte ?
Oui. "52.52" et "52,52" sont tous deux lus comme des nombres. Les textes avec les deux valeurs, comme "52.52, 13.405", marchent aussi quand vous choisissez « One field ».
8. Quel ordre utilise un tableau [a, b] ?
Un champ nommé coordinates utilise l'ordre de GeoJSON, [longitude, latitude]. latlng veut dire latitude d'abord et lnglat longitude d'abord. Pour d'autres noms, la visionneuse teste les deux ordres et garde celui qui a le plus de valeurs valides. Vous pouvez toujours le changer dans le menu de l'ordre.
9. Puis-je ouvrir du GeoJSON ou du TopoJSON ici ?
Non, et ce n'est pas nécessaire. Ces formats contiennent déjà une géométrie, donc la visionneuse vous renvoie vers la Visionneuse GeoJSON ou la Visionneuse TopoJSON de ce site.
10. Combien d'enregistrements peut-elle gérer ?
Des fichiers jusqu'à 50 Mo. Les points sont dessinés sur un canvas, donc des dizaines de milliers de points restent fluides. Les très gros fichiers demandent quelques secondes d'analyse.
11. Mes données sont-elles envoyées ?
Non. Le fichier est lu dans votre navigateur, et les exports sont aussi créés dans votre navigateur. Seules les tuiles du fond de carte sont chargées depuis internet.
Bibliothèques et remerciements
La lecture du JSON et la détection des coordonnées ont été écrites pour ce site. La carte repose sur des logiciels open source.
- Leaflet 1.9 · BSD-2-Clause · Volodymyr Agafonkin and contributorsDessine la carte interactive, la couche de points en canvas et les fenêtres d'information.
- 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.
Outils associés
Les fichiers JSON sont lus dans votre navigateur et ne sont jamais envoyés à un serveur. Les coordonnées de l'exemple sont des centres-villes avec 4 décimales au plus. Tuiles de carte © contributeurs d'OpenStreetMap, dessinées avec Protomaps (hébergé par KONAKTIVE), avec CARTO en secours. Images satellite : Esri.
