Réduire le poids d'un GeoJSON

Présentation de plusieurs techniques pour diminuer la taille d'un GeoJSON

Le blog Makina-corpus

Présentation de plusieurs techniques pour diminuer la taille d'un GeoJSON

Le format GeoJSON est largement utilisé en webmapping. La conversion directe de données géographiques vers le GeoJSON peut produire des fichiers de taille trop importante, qui seront longs à charger et à exploiter. Plusieurs techniques permettent de réduire le poids de ces fichiers.

Ce billet de blog prendra l'exemple des régions dans OpenStreetMap, pouvant être téléchargée dans les exports d'OpenStreetMap France.

Fichier GeoJSON initial

Le fichier téléchargé est au format shapefile. La conversion de ces données au format GeoJSON produit un fichier de 44,7 Mo : c'est beaucoup trop important pour le web.

Les opérations d'allègement dépendront de l'usage souhaité des données. Le cas fictif traité ici est de présenter une vision globale de la France et d'avoir comme attribut le code de la région (pour une jointure éventuelle).

Simplification géométrique

La première étape est de simplifier la géométrie des régions, dont la résolution est beaucoup trop importante pour ce que l'on souhaite faire. Un bon outil pour cela est mapshaper : l'interface web est très réactive et la simplification est topologique, c'est à dire qu'elle ne crée pas de vides entre deux polygones par exemple.

Dans notre exemple, une simplification à 0,5% (c'est à dire une division par 200 du nombre de points) permet d'obtenir un fichier de 214 ko : c'est déjà bien mieux ! L'image suivante présente les contours des régions avant et après simplification : le résultat obtenu est suffisant pour l'échelle à laquelle la carte sera affichée.

Suppression des décimales inutiles

En observant le GeoJSON obtenu, on remarque que la précision des coordonnées est beaucoup trop importante : une latitude est par exemple notée 44.304137114679435, soit 15 décimales. Une règle de conversion approximative est de considérer qu'un degré équivaut à 100km : 15 décimales correspond donc à une précision de 10-10 m, soit le rayon d'un atome.

Deux décimales sont satisfaisantes dans notre cas, puisque la précision sera d'environ 1 km. On peut utiliser ogr2ogr pour cela :

ogr2ogr -f "GeoJSON" -lco COORDINATE_PRECISION=2 initial.json simplifié.shp

Le fichier obtenu ne pèse plus que 98 ko.

Conserver uniquement les attributs utiles

Supprimer les colonnes inutiles permet d'alléger encore un peu le fichier : seule une colonne NOM est supprimé dans notre cas et le nouveau fichier pèse 97 ko. Le gain est faible ici mais est souvent bien plus important, sur des tables à plusieurs dizaines de colonnes.

Aller plus loin

La taille du nouveau fichier est 460 fois plus faible qu'initialement, et 97 ko ne posent pas de problème à être transférés. Les données sont suffisantes et ces étapes de simplification sont effectuées rapidement.

D'autres possibilités permettraient de réduire encore la taille, par exemple :

  • la minification du JSON pour supprimer les espaces et les retours à la ligne
  • l'utilisation du TopoJSON ou d'un format binaire
  • la compression gzip sur le serveur

Actualités en lien

Image
Vidéo conférence SIG Webmapping Frédéric Rodrigo
23/11/2021

Vidéo conférence : Makina Maps, un serveur de fond de carte vectorielle basé sur OpenStreetMap

Visionnez la vidéo de la conférence de Frédéric RODRIGO, expert OpenStreetMap Makina Corpus, à l'Open Source Expérience 2021 : Makina Maps, un serveur de fond de carte vectorielle basé sur OpenStreetMap.

Voir l'article
Image
OppServe_Martinique_comparaison.png
23/11/2021

OppServe, gérez l'Observatoire Photographique des Paysages de votre territoire !

Découvrez OppServe pour intégrer vos photos, influencer les politiques d’aménagement et sensibiliser le public

 

Voir l'article
Image
carte bitmap-vectorielle
12/05/2021

Tour d’horizon des serveurs de tuiles vectorielles pour fond de carte

Parcours des différentes étapes et composants de piles logicielles existantes pour la production de tuiles vectorielles.

Voir l'article

Inscription à la newsletter

Nous vous avons convaincus