Intégrer les données OpenStreetMap dans son SIG pour s'engager dans un processus de contribution réciproque#
Date de publication initiale : 05 Octobre 2021
Prérequis#
- l'interpréteur Bourne-Again shell
- l'outil de conversion ogr2ogr
- psql et nécessairement le SQL associé
- cURL
Intro#
Après cette première année bien remplie à la Communauté de Communes, j'ai profité du calme estival pour travailler sur la possibilité de créer des liens entre les informations renseignées dans OpenStreetMap et les données que nous produisons en interne avec pour objectif de consolider les deux bases de données de manière réciproque. Pour l'instant, la solution proposée a été uniquement utilisée pour valider nos données ponctuelles mais n'hésitez pas à partager vos expériences avec d'autres types de données ainsi que vos adaptations éventuelles.
Fonctionnement et processus#
graph TD;
A[Données Geofabrik] -->|Télécharger| B(region.pbf);
B --> C{Script ogr2ogr};
C --> D[config.env];
D --> C;
C --> J[emprise.shp];
J --> C;
C -->|Intégration composteurs_osm| E{PostgreSQL/PostGIS};
E --> G[Table composteurs_osm];
G -->|Mise à jour id_osm - Proximité| H[Table composteurs_sig];
H --> I(Vue permettant de visualiser les différences);
G --> I;
1. Télécharger les données OpenStreetMap#
Pour télécharger les données OpenStreetMap depuis le site Geofabrik, j'utilise cURL :
Télécharger les données OpenStreetMap | |
---|---|
2. Configurer l'environnement de travail : config.env#
Avant de se lancer, il est bon de paramétrer le fichier de configuration que vous devrez adapter à votre organisation et qui sera utilisé par les scripts qui vont vous servir à intégrer les données OpenStreeMap préalablement structurées dans votre base de données. On y définit les différents répertoires de travail ainsi que les variables permettant d'accéder à la base de données.
Voici le fichier config.env
à adapter :
3. Un fichier shp pour définir l'emprise#
Afin de restreindre l'extraction des données OpenStreetMap à notre périmètre d'étude, il est préférable d'utiliser un fichier d'emprise que je stocke au format .shp dans mon répertoire de travail.
4. Un script par donnée à extraire et à intégrer dans PostgreSQL#
Pour la suite des opérations, j'utilise ogr2ogr pour lire le fichier OpenStreetMap (.pbf) préalablement téléchargé afin d'intégrer une information structurée dans PostgreSQL. Si je reprends l'exemple de mes composteurs, je commence par parcourir le wiki OpenStreetMap pour identifier les tags qui vont me permettre de les extraire facilement et je les ajoute dans le fichier osmconf.ini utilisé par ogr2ogr.
Récupérer des données OpenStreetMap via GDAL/OGR
Voici les tags à ajouter pour les composteurs :
Consulter le fichier osmconf.ini par defaut
Maintenant que le fichier de configuration est paramétré, on va passer au script qui va nous permettre d'extraire la donnée d'OpenStreetMap pour ensuite le mettre en forme et l'intégrer dans PostgreSQL :
Tip
Une fois le fichier configuré, vous pouvez lancer l'intégration des données dans la base PostgreSQL et l'automatiser à l'aide d'une tâche cron pour qu'elle soit réalisée chaque nuit par exemple.
5. Un script SQL pour associer les composteurs OSM à nos données SIG#
Après avoir intégré les données OpenStreetMap dans PostgreSQL, il est maintenant possible de les visualiser avec QGIS pour notamment faire une comparaison visuelle avec les données internes mais cela s'apparente à chercher des aiguilles dans une meule de foin. Je vous propose donc de créer une requête pour associer spatialement l'entité OpenStreetMap la plus proche de notre donnée si elle se trouve dans un rayon de 20m (choix purement arbitraire).
Après avoir créé une colonne id_osm
dans ma table des composteurs, on va lancer la requête pour renseigner l'identifiant OSM dans la table des composteurs, il sera donc stocké en dur.
A ce stade, on peut d'ores et déjà :
- visualiser les composteurs associés ou non à nos données
- identifier les contributions que nous devrions réaliser pour enrichir la carte collaborative
Tip
Comme pour le script d'intégration des composteurs OpenStreetMap, vous pouvez l'automatiser en lançant une commande psql pour que la mise à jour de l'identifiant soit réalisée juste après l'intégration de la donnée dans la base (cron est notre ami ).
6. Visualiser les différences entre la donnée OpenStreetMap et les données du SIG#
Afin de visualiser plus rapidement, les lacunes de notre SIG et celles d'OpenStreetMap, il est possible de créer une vue dans PostgreSQL pour catégoriser les actions à réaliser à la fois en interne et dans OpenStreetMap.
- Contour vert : la donnée existe à la fois dans OpenStreetMap et dans notre SIG
- Contour orange : une contribution est nécessaire pour enrichir OpenStreetMap
- Contour rouge : La donnée n'existe que dans OpenStreetMap, il faut éventuellement aller la contrôler pour l'ajouter à nos données ou la supprimer d'OpenStreetMap si elle n'a plus d'intérêt.
Voici un autre exemple avec des données sur le patrimoine :
7. Edition de la donnée et récupération de l'id_osm à travers un trigger#
Vous l'avez compris la mise à jour de notre id_osm
ne se fait qu'après l'intégration des données OpenStreetMap actualisées mais pour gérer les actions réalisées par les utilisateurs de notre base de données interne nous utilisons un trigger afin de mettre à jour l'id_osm
à une entité modifiée ou ajoutée. Ce trigger utilise la même définition que la requête SQL lancée après l'intégration des données OSM.
Conclusion#
Avec cette solution "low cost" nous pouvons identifier rapidement des évolutions ou des différences entre nos données et les informations saisies dans OpenStreetMap ce qui nous permet d'une part d'améliorer l'information que nous apportons à nos utilisateurs et d'autre part de contribuer pleinement au projet collaboratif.
Après la phase de mise en œuvre et d'état des lieux sur le territoire, nous allons maintenant entrer dans la phase longue d'harmonisation de l'information mais ce travail s'inscrit pleinement dans notre participation aux géo-communs.
Auteur·ice#
Florian Boret#
Géomaticien/cartographe, je suis arrivé dans le monde de la géomatique en suivant un cursus « professionnalisant » (BTS Géomètre-Topographe, Licence pro GGAT, Master SIGAT). J’ai ensuite travaillé dans un bureau d’études spécialisé dans la production de données d’occupation du sol et puis pour des raisons personnelles je me suis expatrié quelques années au Sénégal où je me suis lancé comme géomaticien indépendant (DATA\WAX).
Depuis mon retour en France, je suis en charge du SIG de la communauté d'agglomération Lunel Agglo.
En dehors de ces expériences, j'ai aussi régulièrement initié de petits projets personnels iGeo-Topo, GIS-Blog.fr, osm2igeo, osm2igeotopo. Aujourd'hui, c’est avec plaisir que j’interviens également comme contributeur de GeoTribu.
Licence #
Ce contenu est sous licence Creative Commons International 4.0 BY-NC-SA, avec attribution et partage dans les mêmes conditions, sauf dans le cadre d'une utilisation commerciale.
Les médias d'illustration sont potentiellement soumis à d'autres conditions d'utilisation.
Réutiliser, citer l'article
Vous êtes autorisé(e) à :
- Partager : copier, distribuer et communiquer le matériel par tous moyens et sous tous formats
- Adapter : remixer, transformer et créer à partir du matériel pour toute utilisation, exceptée commerciale.
Citer cet article :
"Intégrer les données OpenStreetMap dans son SIG pour s'engager dans un processus de contribution réciproque" publié par Florian Boret sur Geotribu sous CC BY-NC-SA - Source : https://geotribu.fr/articles/2021/2021-10-05_lien_sig_osm/
Commentaires
Une version minimale de la syntaxe markdown est acceptée pour la mise en forme des commentaires.
Propulsé par Isso.
Ce contenu est sous licence Creative Commons BY-NC-SA 4.0 International