GeoJSON contre Shapefile

GeoJSON contre Shapefile

GeoJSON et le shapefile sont les deux formats vectoriels les plus utilisés pour échanger des données spatiales. Tous deux stockent des points, des lignes, des polygones et leurs attributs, mais ils ont été conçus pour des environnements différents : le shapefile pour les SIG bureautiques des années 1990, GeoJSON pour le web. Cet article compare leur structure, leurs systèmes de coordonnées, leurs règles d'attributs, leurs performances et leur usage pratique.

GeoJSON contre Shapefile : quelle est la différence ?

Le shapefile est un format binaire composé de plusieurs fichiers qui doivent toujours circuler ensemble, et il peut stocker des données dans n'importe quel système de coordonnées avec une gamme complète de types d'attributs définis à l'avance. GeoJSON est un fichier texte unique en syntaxe JSON, lisible dans n'importe quel éditeur, toujours en coordonnées géographiques, avec des attributs définis pour chaque entité plutôt que par un schéma de table fixe.

GeoJSON contre Shapefile

Caractéristique

GeoJSON

Shapefile

Type de format

Fichier texte en syntaxe JSON

Binaire, plusieurs fichiers

Spécification

RFC 7946 (2016)

Description technique d'Esri (1998)

Fichiers

Un fichier .geojson ou .json

.shp, .shx, .dbf et, en option, .prj et .cpg

Système de coordonnées

WGS 84 uniquement, longitude et latitude

Au choix, déclaré dans le fichier .prj

Types de géométrie

Types mixtes autorisés dans une collection

Un type de géométrie par fichier

Valeurs Z et M

Altitude facultative, pas de valeurs M

Valeurs Z et M prises en charge

Schéma d'attributs

Par entité, objets imbriqués autorisés

Table dBASE fixe

Noms de champs

Longueur et caractères libres

10 caractères maximum

Types d'attributs

Chaîne, nombre, booléen, null, objet

Texte, nombre, date sans heure

Encodage

UTF-8

Page de codes déclarée dans .cpg

Limite de taille

Aucune dans le format, la mémoire est la contrainte

2 Go par fichier composant

Index spatial

Ne fait pas partie du format

Facultatif : .sbn/.sbx ou .qix

Usage type

Cartes web, API, données ouvertes

SIG bureautiques, échanges établis

Qu'est-ce qu'un shapefile ?

Un shapefile est un ensemble de fichiers qui décrivent ensemble une classe d'entités. La géométrie est stockée dans le fichier .shp, un index des positions des enregistrements dans .shx et les attributs dans la table .dbf, à raison d'une ligne par entité dans le même ordre. Le fichier facultatif .prj contient la définition du système de coordonnées au format WKT, et .cpg indique l'encodage des caractères de la table.

Comme les positions des enregistrements sont indexées, un logiciel peut accéder directement à une entité précise sans lire tout le fichier. Cela rend les shapefiles efficaces pour le travail bureautique, mais cela signifie aussi que le format n'est valide que si tous les fichiers obligatoires sont présents et portent le même nom de base.

Qu'est-ce que GeoJSON ?

GeoJSON décrit les données spatiales à l'aide d'objets JSON ordinaires. Une FeatureCollection contient des entités, chacune dotée d'une géométrie et d'un objet properties qui regroupe les attributs. Le format prend en charge Point, LineString, Polygon, leurs variantes Multi et GeometryCollection, et une entité peut aussi avoir une géométrie nulle.

GeoJSON étant du JSON simple, il fonctionne directement avec les technologies web. Un navigateur peut l'analyser sans bibliothèque, une API peut le renvoyer comme réponse, et il peut être stocké dans des bases de données documentaires ou dans un système de gestion de versions, où les modifications sont visibles ligne par ligne.

Systèmes de coordonnées

C'est la différence qui pose le plus de problèmes en pratique. La RFC 7946 définit un seul système de référence de coordonnées pour GeoJSON : WGS 84, avec la longitude et la latitude en degrés décimaux, dans cet ordre. L'ancienne spécification de 2008 autorisait un membre crs, et certains logiciels en écrivent encore un, mais les lecteurs conformes à la norme l'ignorent et interprètent les nombres comme des degrés.

Un shapefile transporte son système de coordonnées dans le fichier .prj et peut stocker des données dans n'importe quelle projection ; c'est pourquoi les shapefiles projetés doivent être reprojetés en WGS 84 avant leur conversion en GeoJSON. Si le fichier .prj est absent, le logiciel ne peut pas connaître la projection et en suppose généralement une par défaut, ce qui place les données au mauvais endroit.

Attributs et encodage

La table dBASE sur laquelle repose le shapefile impose plusieurs limites : des noms de champs de 10 caractères au maximum, 255 champs au plus, des valeurs texte de 254 caractères au maximum et des champs de date qui stockent la date mais pas l'heure. Les valeurs nulles ne sont pas prises en charge : les nombres vides deviennent zéro et le texte vide une chaîne vide, ce qui modifie le sens des données lors de l'analyse.

L'encodage est une autre source de problèmes. La norme dBASE a été conçue autour de pages de codes à un octet, si bien que les valeurs d'attributs non latines apparaissent sous forme de caractères illisibles lorsque le fichier .cpg est absent ou incorrect. GeoJSON évite entièrement ce problème en imposant l'UTF-8, et il ne restreint ni les noms de champs ni la longueur des valeurs, de sorte que les attributs sont conservés sans troncature lors de la conversion.

Taille des fichiers et performances

Un fichier composant d'un shapefile ne peut pas dépasser 2 Go, ce qui correspond à environ 70 millions de points, et les shapefiles occupent aussi nettement plus d'espace disque qu'une géodatabase pour les mêmes données. La spécification GeoJSON ne fixe aucune limite de taille, mais le texte est verbeux : les coordonnées sont stockées sous forme de chaînes décimales et chaque entité répète tous les noms de propriétés, si bien que le même jeu de données est généralement plusieurs fois plus volumineux qu'un shapefile.

La contrainte la plus importante tient à la manière dont le fichier est lu. GeoJSON n'a pas d'index : une application charge donc normalement tout le fichier en mémoire avant d'afficher quoi que ce soit. Un fichier de quelques mégaoctets reste confortable dans un navigateur, quelques dizaines de mégaoctets deviennent lents et plusieurs centaines de mégaoctets sont impraticables. Pour les grands jeux de données, les tuiles vectorielles, FlatGeobuf, GeoParquet ou une base de données spatiale sont de meilleures options qu'un fichier GeoJSON unique.

Cartes web et API

Les bibliothèques de cartographie web comme Leaflet, OpenLayers, MapLibre et ArcGIS Maps SDK lisent GeoJSON nativement, et OGC API - Features le renvoie comme format de réponse par défaut. Les attributs arrivent sous forme d'objets JavaScript et peuvent donc être utilisés directement dans les fenêtres contextuelles, les filtres et les règles de style, sans conversion.

Les shapefiles ne peuvent pas être affichés dans un navigateur sans traitement supplémentaire. Une application web les convertit côté serveur ou décompresse les fichiers binaires avec une bibliothèque JavaScript ; c'est pourquoi les services qui acceptent l'import de shapefiles les convertissent immédiatement en couches hébergées ou dans un autre format interne.

Conversion entre les formats

La conversion dans les deux sens est prise en charge par GDAL/OGR, QGIS, ArcGIS Pro et la plupart des outils en ligne, mais elle n'est pas sans perte. Passer du shapefile au GeoJSON exige une reprojection en WGS 84 et révèle souvent des noms de champs tronqués lors d'une étape antérieure. Passer du GeoJSON au shapefile répartit les géométries de types différents dans des fichiers séparés, tronque les noms de champs longs, supprime les propriétés imbriquées et convertit les valeurs nulles en zéros ou en chaînes vides.

Erreurs fréquentes

L'erreur la plus fréquente consiste à envoyer un shapefile incomplet. Sans .shx ou .dbf, les données ne peuvent pas être ouvertes du tout, et sans .prj, il faut deviner le système de coordonnées. Lorsqu'on partage un shapefile, tous les fichiers doivent être regroupés dans une seule archive.

La deuxième consiste à supposer que GeoJSON peut contenir des coordonnées projetées. Des coordonnées en mètres écrites dans un fichier GeoJSON sont lues comme des degrés : la géométrie se retrouve alors bien au-delà de la plage valide ou se concentre près de l'origine de la carte.

La troisième consiste à utiliser GeoJSON comme format de travail pour des jeux de données volumineux ou fréquemment modifiés. Chaque modification réécrit tout le fichier, et il est impossible d'interroger un sous-ensemble sans tout lire ; une base de données ou un GeoPackage est donc préférable dès que les données grossissent ou que plusieurs personnes y travaillent.

FAQ

GeoJSON remplace-t-il le shapefile ?

Dans le développement web et la publication de données ouvertes, largement oui. Dans les SIG bureautiques, les shapefiles restent très produits, car de nombreuses organisations et chaînes logicielles en dépendent, même si GeoPackage est de plus en plus recommandé comme successeur moderne.

GeoJSON peut-il stocker des données dans un système de coordonnées projeté ?

Pas selon la RFC 7946. Certains outils écrivent encore un membre crs ou acceptent des coordonnées projetées par accord entre les parties, mais ces fichiers ne sont pas interopérables et seront mal positionnés par les logiciels conformes à la norme.

Pourquoi les noms de mes champs ont-ils été raccourcis après l'export ?

Parce que les attributs d'un shapefile sont stockés dans une table dBASE, qui n'autorise que 10 caractères par nom de champ. Les noms plus longs sont tronqués et les doublons renumérotés ; il faut donc documenter séparément les noms d'origine ou exporter les données dans un autre format.

Quelle taille de fichier GeoJSON est acceptable pour une carte web ?

À titre indicatif, les fichiers de quelques mégaoctets se chargent sans difficulté. Au-delà, il convient de simplifier la géométrie, de réduire les attributs ou de servir les données sous forme de tuiles vectorielles ou via une API qui ne renvoie que les entités de la vue courante.

Quel format utiliser pour partager des données avec un collègue ?

Si le destinataire travaille dans un navigateur ou avec une API, GeoJSON en WGS 84. S'il travaille dans un SIG bureautique et que les données comportent un seul type de géométrie et des attributs simples, un shapefile zippé reste accepté partout. Pour tout cas plus complexe, GeoPackage évite les limites des deux formats.

Points clés

GeoJSON et le shapefile répondent au même besoin à des époques différentes des SIG. Le shapefile stocke les données de façon compacte et indexée, conserve son propre système de coordonnées et est profondément ancré dans les processus bureautiques, au prix de plusieurs fichiers et d'une table d'attributs restrictive. GeoJSON est un fichier unique et lisible qui fonctionne nativement sur le web, au prix de sa taille, d'un système de coordonnées imposé et de l'absence d'index.

En pratique, le choix dépend de la destination des données. Pour les cartes web, les API et les portails de données ouvertes, GeoJSON est le format naturel. Pour les échanges entre SIG bureautiques, le shapefile reste un choix sûr par défaut, mais lorsque les attributs, le volume ou la structure des données comptent, GeoPackage est la meilleure option moderne.

Transformez vos données spatiales en perspectives commerciales

Arrêtez de vous battre avec des outils SIG complexes. Importez, analysez et visualisez vos données géographiques en quelques minutes, et non en plusieurs heures.

Transformez vos données spatiales en perspectives commerciales

Arrêtez de vous battre avec des outils SIG complexes. Importez, analysez et visualisez vos données géographiques en quelques minutes, et non en plusieurs heures.

Transformez vos données spatiales en perspectives commerciales

Arrêtez de vous battre avec des outils SIG complexes. Importez, analysez et visualisez vos données géographiques en quelques minutes, et non en plusieurs heures.