Pourquoi convertir un shapefile en GeoJSON
Si vous vous êtes déjà demandé comment convertir un shapefile en GeoJSON, la réponse courte est qu'un shapefile n'est pas du tout un seul fichier. Ce que la plupart des gens appellent « un shapefile » est en réalité un ensemble d'au moins trois fichiers distincts partageant le même nom avec des extensions différentes : `.shp` pour la géométrie, `.shx` pour un index positionnel dans cette géométrie, et `.dbf` pour la table d'attributs. Un export shapefile réel ajoute souvent un fichier `.prj` pour le système de référence de coordonnées et un fichier `.cpg` pour l'encodage du texte. Ouvrez uniquement le fichier `.shp` dans un éditeur de texte et vous obtenez du bruit binaire ; ouvrez uniquement le `.dbf` et vous obtenez des attributs sans aucune forme à laquelle les rattacher.
Le GeoJSON, en revanche, est un fichier JSON unique et autonome, défini par une seule spécification (RFC 7946), qui fixe le système de référence de coordonnées à la longitude/latitude WGS84. C'est exactement cette conception à fichier unique et à SRC unique qui explique pourquoi tant de cartes web, de bibliothèques JavaScript et d'API SIG modernes attendent du GeoJSON en entrée plutôt qu'un ensemble shapefile. Convertir des shapefiles en geojson est généralement la première étape avant qu'un jeu de données puisse être chargé dans Leaflet, Mapbox GL, un aperçu de carte rendu par GitHub, ou presque tout autre outil de cartographie basé sur navigateur.
Cet outil existe pour rendre cette première étape indolore. Plutôt que d'installer GDAL, d'ouvrir un logiciel SIG de bureau, ou d'écrire un script Python juste pour convertir un fichier, vous zippez vos fichiers `.shp` / `.shx` / `.dbf` (et `.prj`, si vous l'avez) ensemble, déposez le zip dans votre navigateur, et récupérez un fichier `.geojson` fonctionnel en quelques clics. La conversion s'exécute entièrement côté client, donc l'outil fonctionne de la même façon pour dix entités ou pour cent mille, et vos données ne sont jamais envoyées nulle part.
Le format Shapefile : histoire et structure
Le format shapefile a été publié par ESRI (Environmental Systems Research Institute) en juillet 1998 dans un document intitulé « ESRI Shapefile Technical Description ». Bien qu'il ait presque trois décennies et manque nativement de prise en charge des noms de champs d'attributs de plus de 10 caractères, de plusieurs couches de géométrie par fichier, ou de l'Unicode par défaut, il reste l'un des formats SIG vectoriels les plus utilisés au monde dans les jeux de données gouvernementaux, des services publics et académiques, en grande partie parce qu'il a été adopté si tôt et si largement avant l'existence de formats plus modernes.
Le fichier .shp commence par un en-tête fixe de 100 octets : les octets 0 à 3 sont un « code de fichier » big-endian toujours égal à l'entier 9994, les octets 24 à 27 donnent la longueur du fichier en mots de 16 bits (big-endian), les octets 28 à 31 donnent la version du shapefile (little-endian, toujours 1000), les octets 32 à 35 donnent le type de forme sous forme de code entier (1 = Point, 3 = PolyLine, 5 = Polygone, 8 = MultiPoint, avec des variantes +10 ou +20 pour les valeurs de coordonnées Z et M), et les octets 36 à 67 donnent la boîte englobante de tout le fichier sous forme de quatre doubles little-endian : Xmin, Ymin, Xmax, Ymax. Après cet en-tête, le fichier est une séquence d'enregistrements de longueur variable, chacun avec son propre petit en-tête indiquant le numéro d'enregistrement et la longueur du contenu avant les octets de géométrie eux-mêmes.
Le fichier .dbf est une table dBase III / dBase IV : un bloc d'en-tête décrivant chaque champ (nom, type, longueur en octets, nombre de décimales), suivi d'un enregistrement à largeur fixe par ligne. L'ordre des lignes dans le .dbf correspond exactement à l'ordre des enregistrements dans le fichier .shp, position par position, car il n'existe aucune clé étrangère explicite entre eux. Le fichier .shx existe purement comme raccourci : il stocke une paire (décalage, longueur) de 8 octets par enregistrement afin qu'un lecteur puisse sauter directement à n'importe quelle forme sans parcourir tous les enregistrements précédents, ce qui compte bien davantage pour un shapefile de 500 Mo que pour un petit fichier.
Une particularité structurelle se répercute directement sur la logique de conversion : un enregistrement de polygone shapefile n'a aucune notion de « cet anneau est un trou dans cet autre anneau ». C'est simplement une liste plate d'anneaux fermés. La convention (selon la spécification) veut que les anneaux orientés dans le sens horaire soient des limites extérieures et que les anneaux orientés dans le sens antihoraire soient des trous, et un lecteur est censé déterminer lui-même quel trou appartient à quel anneau extérieur. Les polygones GeoJSON suivent la même convention d'orientation (la RFC 7946 la recommande, sans toutefois l'exiger strictement), mais un convertisseur de shapefile vers GeoJSON doit tout de même parcourir chaque anneau, le classer, et reconstituer l'imbrication avant de pouvoir produire une géométrie Polygon ou MultiPolygon valide.
Guide étape par étape : comment convertir shp en geojson

Zippez vos fichiers `.shp`, `.shx` et `.dbf` ensemble (incluez aussi le `.prj`, si vous l'avez), puis choisissez ce fichier zip dans le convertisseur, ou cliquez sur « Try sample » pour charger un petit shapefile d'exemple déjà prêt. Le shapefile est analysé immédiatement et prévisualisé sur la carte sous forme de couche grise « Source shapefile ».

Le panneau Layers liste le shapefile source avec son nombre d'entités. Vérifiez la carte pour confirmer que les bonnes données ont été chargées, puis cliquez sur « Convert to GeoJSON » quand vous êtes prêt.

Une seconde couche « Converted GeoJSON » est ajoutée par-dessus la source, et un résumé apparaît : combien d'entités ont été converties, quels types de géométrie ont été trouvés, la boîte englobante, les colonnes d'attributs, et la taille du fichier GeoJSON résultant.

Utilisez les cases à cocher du panneau Layers pour afficher ou masquer indépendamment la couche source et la couche convertie, et activez « Show basemap » si vous voulez un fond de carte routière sous les deux.

Cliquez sur « Download converted.geojson » pour enregistrer le fichier GeoJSON terminé et conforme aux normes sur votre ordinateur.
Six cas d'usage concrets
Où la conversion de shapefiles en geojson intervient réellement dans le travail SIG quotidien.
- Publier des données ouvertes gouvernementales sur le web. De nombreux portails de données ouvertes municipaux, régionaux et nationaux diffusent encore des jeux de données de parcelles, de zonage et de limites sous forme de shapefiles. Convertir des shapefiles en geojson transforme ce téléchargement en quelque chose qu'une carte web ou une application JavaScript peut charger directement, sans traitement côté serveur.
- Charger des données de relevé ou de terrain dans une carte web. Les appareils GPS de terrain et les anciens flux de travail SIG de bureau exportent fréquemment des shapefiles. Une conversion rapide de shp en geojson est souvent la seule étape entre la sortie d'un géomètre et une carte partageable sur Leaflet ou Mapbox GL.
- Préparer des données pour les aperçus de cartes GitHub ou GitLab. GitHub affiche automatiquement les fichiers `.geojson` sous forme de carte interactive, mais ne rend pas du tout les shapefiles. Convertir un shapefile avant de le committer fait toute la différence entre une carte rendue et quatre fichiers binaires illisibles dans un dépôt.
- Alimenter des bibliothèques cartographiques JavaScript. Leaflet, Mapbox GL JS, OpenLayers et deck.gl consomment tous nativement du GeoJSON. Aucun d'eux ne peut lire un shapefile directement dans le navigateur, donc un convertisseur shp vers geojson est une étape obligatoire dans tout pipeline cartographique côté client partant de données shapefile.
- Migrer d'anciennes archives SIG vers des formats modernes. Les organisations qui abandonnent d'anciens systèmes SIG de bureau détiennent souvent des années d'archives shapefile. Convertir des shapefiles en geojson (ou plus loin vers GeoParquet ou GeoPackage) est généralement la première étape de migration, puisque le GeoJSON est lisible par pratiquement tous les outils modernes.
- Vérifications rapides ponctuelles sans installer de SIG de bureau. Parfois, vous voulez simplement voir ce qui se trouve dans un fichier `.shp` que quelqu'un vous a envoyé par e-mail. Le convertir en GeoJSON et le prévisualiser sur une carte est plus rapide que d'installer QGIS ou ArcGIS pour un seul fichier.
L'algorithme de conversion, étape par étape
Convertir un shapefile en GeoJSON n'est pas une opération unique mais un petit pipeline d'étapes bien définies d'analyse et de reconstruction de géométrie. Voici exactement ce qui arrive à vos données, dans l'ordre.
1. Décompresser et localiser l'ensemble de fichiers correspondant
Le .zip importé est décompressé en mémoire, et le convertisseur regroupe les fichiers par leur nom de base commun pour trouver un triplet correspondant .shp / .shx / .dbf (plus un .prj et un .cpg optionnels). Si un zip contient plus d'un tel triplet, il est traité comme un export shapefile multicouche et chaque couche est convertie indépendamment.
2. Analyser l'en-tête fixe de 100 octets du `.shp`
L'en-tête est lu en premier pour confirmer que le code de fichier vaut 9994, pour lire le type de forme (qui indique à l'analyseur quelle structure d'enregistrement attendre ensuite), et pour lire la boîte englobante au niveau du fichier. La disposition des champs pertinents pour la conversion est :
Bytes 0-3 File code big-endian int, always 9994 Bytes 24-27 File length big-endian int, in 16-bit words Bytes 28-31 Version little-endian int, always 1000 Bytes 32-35 Shape type little-endian int (1=Point, 3=PolyLine, 5=Polygon, 8=MultiPoint) Bytes 36-67 Bounding box 4 little-endian doubles: Xmin, Ymin, Xmax, Ymax
Tout ce qui suit l'octet 100 est lu comme un flux d'enregistrements de longueur variable, chacun précédé de son propre petit en-tête donnant le numéro d'enregistrement et la longueur du contenu en mots de 16 bits, ensuite convertie en nombre d'octets en multipliant par deux.
3. Reconstruire les anneaux en géométries Polygon et MultiPolygon
Pour les enregistrements de type Polygone, chaque anneau de l'enregistrement est lu comme un tableau plat de paires (x, y). Le convertisseur calcule ensuite l'aire signée de chaque anneau à l'aide de la formule du lacet (shoelace formula), aire = 0.5 * Σ(x[i] * y[i+1] - x[i+1] * y[i]). Un résultat positif (selon la convention horaire-positive du shapefile) marque un anneau extérieur ; un résultat négatif marque un trou. Chaque anneau-trou est ensuite associé au plus petit anneau extérieur dont la boîte englobante le contient entièrement, et les deux sont combinés en un seul tableau coordinates d'un Polygon GeoJSON, avec l'anneau extérieur en premier et chaque anneau-trou ensuite. Lorsqu'un enregistrement contient plus d'un anneau extérieur, le résultat devient un MultiPolygon.
4. Reprojeter les coordonnées et rattacher les attributs
Si un fichier .prj est présent et que son système de référence de coordonnées n'est pas déjà le WGS84, chaque paire de coordonnées produite à l'étape précédente est reprojetée en longitude/latitude WGS84, puisque c'est le système de coordonnées exigé par la RFC 7946 pour un GeoJSON valide. En parallèle, la table .dbf est analysée champ par champ, et l'enregistrement i du .dbf est rattaché comme objet properties de la géométrie construite à partir de l'enregistrement i du fichier .shp, puisque les deux fichiers sont associés purement par position, et non par une clé explicite.
La dernière étape enveloppe chaque géométrie convertie et ses propriétés dans un Feature GeoJSON, rassemble chaque entité dans une seule FeatureCollection, et sérialise cette structure en texte, prête à être téléchargée sous forme de fichier .geojson. Comme chaque étape ci-dessus est une transformation déterministe et bien définie, convertir deux fois le même shapefile produit toujours une sortie GeoJSON identique octet par octet.
Les bibliothèques SIG derrière la conversion de shapefiles
Un convertisseur shp vers geojson vaut ce que vaut l'analyseur de shapefile qui se trouve derrière lui. Voici ce qui fait réellement le travail, dans cet outil et ailleurs.
- shpjs: Le moteur derrière cet outil. shpjs est une bibliothèque en JavaScript pur qui décompresse l'archive, analyse la géométrie binaire `.shp` et la table d'attributs `.dbf`, reprojette les coordonnées à l'aide des données `.prj` lorsqu'elles sont présentes, et assemble le résultat en GeoJSON, le tout sans quitter le navigateur ni un processus Node.js.
- GDAL / OGR (ogr2ogr): La bibliothèque C/C++ qui sous-tend la plupart des logiciels SIG de bureau et côté serveur. La commande `ogr2ogr -f GeoJSON output.geojson input.shp` est la méthode standard de facto pour convertir des shapefiles en geojson en ligne de commande, et c'est le même moteur que QGIS appelle en interne lorsque vous utilisez sa boîte de dialogue « Export Features ».
- Fiona et GeoPandas: La pile d'E/S de fichiers géospatiaux de Python. Fiona enveloppe directement GDAL/OGR, et GeoPandas s'appuie sur Fiona, de sorte que `gpd.read_file('data.shp')` suivi de `gdf.to_file('data.geojson', driver='GeoJSON')` est l'une des façons les plus courantes pour les développeurs de convertir des shapefiles en geojson au sein d'un pipeline de données.
- Mapshaper: Un outil très utilisé en ligne de commande et basé sur navigateur (par Matthew Bloch) qui lit les shapefiles avec son propre analyseur et peut simplifier la géométrie tout en la convertissant, utile lorsqu'un shapefile est trop détaillé pour une carte web et nécessite à la fois conversion et simplification en une seule passe.
- QGIS et ArcGIS: Les deux applications SIG de bureau peuvent ouvrir un shapefile nativement et l'exporter en GeoJSON via une action de menu, « Export Features » pour QGIS et « Feature Class to GeoJSON » ou des outils similaires pour ArcGIS, qui appellent tous deux GDAL/OGR ou une bibliothèque équivalente sous l'interface utilisateur.
Tous ces outils s'accordent sur la même spécification shapefile sous-jacente et le même format de sortie GeoJSON, donc un fichier converti par l'un d'eux devrait être structurellement équivalent. La différence pratique réside dans l'endroit où le travail s'effectue : GDAL, Fiona et les logiciels SIG de bureau s'exécutent tous sur une machine avec quelque chose d'installé, tandis que le moteur basé sur shpjs de cet outil s'exécute directement dans l'onglet de votre navigateur, ce qui explique qu'aucune installation ni aucun import de fichier vers un serveur ne soit jamais nécessaire ici.
Questions et réponses techniques
Dix questions courantes sur comment convertir un shapefile en GeoJSON, avec des réponses directes.
1. Comment convertir un shapefile en GeoJSON ?
Placez les fichiers .shp, .shx et .dbf (plus .prj si vous l'avez) dans une seule archive .zip, importez ce zip dans ce convertisseur, et cliquez sur « Convert to GeoJSON ». L'outil lit la géométrie binaire du shapefile, la fait correspondre à la table d'attributs, et produit un fichier .geojson conforme aux normes que vous pouvez télécharger immédiatement, le tout dans votre navigateur.
2. Pourquoi cet outil demande-t-il un fichier zip plutôt que le fichier .shp directement ?
Un fichier .shp seul ne contient que de la géométrie, sans attributs et, surtout, sans aucun champ décrivant ce que représente réellement chaque forme. Un shapefile valide est un ensemble d'au moins trois fichiers (.shp, .shx, .dbf) qui doivent être lus ensemble, donc ce convertisseur, comme tout autre convertisseur shp vers geojson, a besoin des trois à la fois, et un zip est le moyen le plus simple de fournir un ensemble assorti.
3. Cette conversion shp vers geojson est-elle gratuite, et y a-t-il une limite de taille de fichier ?
Oui, elle est entièrement gratuite et sans inscription. Il n'y a pas de plafond artificiel de taille de fichier, bien que les très gros shapefiles (plusieurs centaines de Mo) prendront plus de temps à analyser puisque tout se passe sur votre propre appareil plutôt que sur un serveur.
4. Le convertisseur préserve-t-il mes données d'attributs ?
Oui. Chaque champ de la table .dbf est lu et rattaché à l'entité correspondante sous forme d'objet properties GeoJSON, en préservant les noms et valeurs de champs, y compris les nombres, le texte et les dates.
5. Qu'advient-il du système de référence de coordonnées ?
Si votre zip inclut un fichier .prj, le convertisseur lit le système de référence de coordonnées qu'il décrit. Le GeoJSON, selon la RFC 7946, est toujours en longitude/latitude WGS84, donc si le shapefile source utilise une projection différente (un cas courant pour les systèmes de grille nationaux), les coordonnées sont reprojetées en WGS84 pendant la conversion. Si aucun fichier .prj n'est présent, les coordonnées sont supposées être déjà en WGS84.
6. Peut-il gérer correctement les shapefiles de type Polygone avec des trous ?
Oui. Les enregistrements de polygone shapefile stockent les anneaux sous forme de liste plate sans relation parent-enfant explicite, en s'appuyant sur le sens d'orientation des anneaux pour distinguer les limites extérieures des trous. Le convertisseur classe chaque anneau selon son aire signée, réassocie les trous à leur anneau parent correct, et produit des géométries GeoJSON Polygon ou MultiPolygon correctes.
7. Quels types de géométrie sont pris en charge ?
Point, MultiPoint, PolyLine (converti en LineString ou MultiLineString), et Polygone (converti en Polygon ou MultiPolygon), y compris leurs variantes Z (élévation) et M (mesure). Les enregistrements de type nul sont ignorés, car ils ne portent aucune géométrie à convertir.
8. Un shapefile comportant plusieurs couches peut-il être converti ?
Un seul fichier .shp contient toujours exactement une couche de géométrie, donc si votre zip contient plusieurs fichiers .shp (un export multicouche), chacun est converti séparément et clairement étiqueté dans le résultat, afin que vous puissiez savoir quelles entités proviennent de quel shapefile d'origine.
9. Pourquoi certains attributs textuels semblent-ils corrompus après la conversion ?
Le format .dbf stocke le texte selon une page de codes (encodage de caractères) spécifique, et les anciens shapefiles n'incluent pas toujours un fichier .cpg indiquant laquelle. Lorsqu'aucun encodage n'est déclaré, le convertisseur se rabat sur une valeur par défaut courante ; si vos données source utilisaient un encodage régional inhabituel, certains caractères accentués peuvent nécessiter une correction manuelle après la conversion.
10. Mon shapefile est-il envoyé sur un serveur ?
Non. La décompression de l'archive, l'analyse de la géométrie binaire .shp, la lecture de la table d'attributs .dbf, et l'assemblage du GeoJSON final se déroulent tous localement dans votre navigateur en JavaScript. Votre fichier ne quitte jamais votre appareil.
La conversion s'exécute entièrement dans votre navigateur grâce à shpjs. Aucun fichier n'est jamais importé sur un serveur. Map tiles © OpenStreetMap contributors.
