RSS Libre@vous
RSS de la rubrique Géomatique

Dernière mise à jour
le 14/01/2016 à 15h43
Les contenus de ce site sont publiés sous la licence CC by-sa, sauf mention contraire.
licence_CC-by-sa
Copyright © 2017 Libre @ vous. Tous droits réservés.
Joomla! est un logiciel libre sous licence GNU/GPL.
13
Mar
2014
Exploiter les données OpenStreetMap avec un logiciel SIG Imprimer
Il existe de nombreux exemples de cartes ou de services en ligne proposant des fonds de cartes produits à partir du projet OpenStreetMap. On peut les utiliser comme on le fait avec des fonds de cartes provenant d'autres fournisseurs de cartes propriétaires (Géoportail IGN, Google Maps). Mais à la différence de ces services propriétaires, OpenStreetMap permet beaucoup plus que cela et l'utiliser seulement comme fond cartographique "prêt à consommer", c'est passer à côté du plus gros potentiel de ce projet ! OpenStreetMap est en fait une base de données géographiques sous licence libre. Toutes les données vectorielles qui se trouvent dans cette base sont à votre disposition et vous pouvez les exploiter comme bon vous semble dans le respect de la licence libre ODbL.

Malheureusement ces données sont encore largement sous-exploitées par les géomaticiens ou les utilisateurs de logiciels SIG. Je vous propose dans ce billet de découvrir comment réaliser facilement des extractions de données depuis la base OpenStreetMap et les exploiter avec le logiciel SIG libre QGIS.


Des données complexes à exploiter ?


Le modèle des données OSM a été pensé avant tout pour faciliter la production des données par des contributeurs qui ne sont pas des spécialistes de la géomatique. L'avantage c'est qu'il n'y a pas besoin de connaître les concepts du monde SIG pour devenir contributeur OSM ! L'inconvénient c'est que le modèle des données OSM ne correspond aux usages habituels dans le monde des SIG : les objets de type polygônes n'existent pas, un concept de relations est introduit, les valeurs attributaires sont remplacées par des tags dont la saisie n'est pas contrainte.

Pour utiliser les données OSM avec un logiciel SIG, il existe des outils qui vont permettre d'extraire les données puis de les transformer dans un format exploitable. Il y a de nombreux outils qui sont proposés pour réaliser ces opérations soit à partir de fichiers locaux au format brut OSM (Osmosis, GDAL/OGR, Osmfilter, Osmconvert), soit directement en lançant des requêtes vers les serveurs de base de données OSM (XAPI, OverpassAPI). Malheureusement ces outils ne sont pas très conviviaux car ils ne proposent en général pas d'interface graphique : il faut taper des lignes de commandes pour les utiliser. Or la plupart des géomaticiens ne sont pas à l'aise avec ce mode de fonctionnement et c'est sans doute là une des raisons qui font que le potentiel des données OSM est largement sous-exploité.

Une interface graphique pour extraire les données OSM


Heureusement il existe le portail web Overpass Turbo qui permet l'extraction et la conversion de données OSM. Il est basé sur l'OverpassAPI et permet de lancer des requêtes directement depuis une interface graphique conviviale, avec prévisualisation des résultats sur une carte.

Pour présenter son fonctionnement, je vous propose de prendre un exemple concret. Mettons nous dans la peau d'un géomaticien travaillant au service SIG de la région Languedoc-Roussillon et qui souhaite réaliser une carte touristique de la région. Il a besoin d'une couche contenant les campings de la région et souhaite extraire ces données depuis la base OSM. Pour lancer sa requête avec l'interface Overpass Turbo, il y a un pré-requis : savoir comment sont décrits les campings dans la base OSM. Pour cela, il existe sur le wiki d'OpenStreetMap une page qui liste les principaux objets qui sont présents dans la base de données : http://wiki.openstreetmap.org/wiki/FR:Map_Features. En cherchant le mot camping sur cette page, on trouve différents objets liés au campings (point d'eaux potables, vidanges des eaux usées, réception d'un camping, ...) et on y trouve le tag qui sert à décrire les campings dans OSM : tourism=camp_site.

Il s'agit maintenant d'utiliser ce tag avec Overpass Turbo pour lancer l'extraction. Dans la barre en haut de l'interface, se trouve un bouton Wizard. Quand on clique dessus une fenêtre s'ouvre avec un champ de recherche qui donne la possibilité de saisir les tags des objets que l'on souhaite extraire. Nous allons donc y recopier notre tag tourism=camp_site mais pas seulement ! Si nous nous contentons de ça, nous allons lancer une requête qui va extraire tous les campings présents dans la base OSM sur le monde entier. N'oubliez pas qu'OSM est une base de données mondiale ! La requête va donc être très longue, à tel point qu'elle va d'ailleurs être refusée par le serveur au bout d'un certain temps... Mais le Wizard d'overpass-turbo permet également de restreindre géographiquement la requête. Dans le champ de recherche, saisissez ce qui suit : tourism=camp_site in Languedoc-Roussillon puis cliquez sur le bouton build and run query. Au bout d'un certain temps, une erreur peut s'afficher avec un query time out après 26 secondes. C'est normal car le traitement a dépassé le temps limite précisé dans la requête qui est par défaut de 25 secondes. On va donc augmenter ce temps. Dans la partie gauche de l'interface Overpass Turbo se trouve le texte complet de la requête que l'on vient de lancer. Vers le haut, dans la ligne osm-script est précisé le temps limite. Il suffit de changer timeout="25" par timeout="120" pour obtenir 120 secondes de temps d'exécution maximum. On clique ensuite sur le bouton Exécuter en haut à gauche de l'interface pour relancer la requête. En fonction des heures et de la charge du serveur, une même requête peut prendre plus ou moins de temps à s'exécuter donc n'hésitez pas à augmenter le temps maximum d'exécution si besoin (sans trop exagérer tout de même pour ne pas sur-exploiter les ressources de l'OverpassAPI).

Pré-visualisation des résultats


Dès que la requête est terminée, les résultats s'affichent sur le fond de carte OSM. Vous pouvez naviguer et cliquer sur les différents objets pour voir leur description détaillée. Il y a des campings qui ont été saisis comme des points (Node) et d'autres dont l'emprise a été saisie par les contributeurs et qui sont indiqués comme Way. Zoomez suffisamment sur certains de ces Ways et vous verrez s'afficher le polygone d'emprise. Si vous regardez en bas à droite de la carte, il y a une indication du nombre total d'objets qui ont été extrait. A la date du 13 mars 2014 j'ai 247 points et 296 polygônes, ce qui fait donc 543 campings saisis par les contributeurs OSM dans la région Languedoc-Roussillon. Cela fait déjà une belle quantité, et même si il en manque encore pas mal, les contributeurs OSM se chargeront d'en ajouter encore ! Remarquez en haut à droite de l'interface le bouton Données qui permet d'afficher à la place de la carte les données brutes. Mais bon c'est moins joli à voir comme ça n'est ce pas ?

Exportation des données


Maintenant que vous avez récupéré les données, il s'agit de les exporter dans un format que vous allez pouvoir exploiter avec un logiciel SIG. Il faut cliquer dans la barre en haut à gauche sur le bouton Exporter. Il est possible d'exporter les données, la carte ou la requête. Ce qui vous intéresse c'est d'exporter les données au format geoJSON. Il s'agit d'un format de données géographiques qui peut être lu par les logiciels SIG. Dans la partie Données, cliquez sur le lien geoJSON puis enregistrez le fichier proposé en le nommant par exemple campings_LR.geojson.

Exploitation avec QGIS


Si vous n'avez encore jamais utilisé QGIS c'est le moment d'essayer ! C'est un logiciel SIG libre et très complet qui est disponible pour à peu près tous les systèmes d'exploitation. Vous pouvez le télécharger sur le site qgis.org.

Ouvrez le logiciel QGIS et chargez une couche vecteur (menu Couche > Ajouter une couche vecteur) en sélectionnant le fichier geojson. Une fenêtre s'ouvre en vous proposant un choix parmi deux couches à charger. En effet, votre fichier contient à la fois des points et des polygônes et QGIS ne peut pas mélanger ces deux types d'objets dans une même couche. Sélectionnez les deux lignes pour tout charger. Vous obtenez deux couches que vous pouvez par exemple renommer campings LR Polygon et campings LR Point.

Si vous visualisez les valeurs attributaires des couches (menu Couche > Ouvrir la table d'attributs), vous remarquerez qu'un grand nombre de colonnes ont été générées. La première @id reprend l'identifiant de l'objet dans la base OSM. Vous avez ensuite une colonne name qui contient le nom des campings, puis une colonne tourism qui contient toujours la valeur camp_site. C'est normal car elle provient du tag tourism=camp_site qui a servi au départ à sélectionner les objets. En fait l'outil d'exportation a converti en colonne tous les tags de tous les objets qui avait été renvoyés par la requête. La plupart de ces colonnes sont remplies presque exclusivement de valeurs NULL et ne vous serviront pas. Si elles vous gênent et que vous souhaitez les supprimer ou les renommer, vous pouvez installer l'extension Table Manager de QGIS qui permet de faire ce travail. Pour terminer, vous pouvez sauver les deux couches en format Shapefile (il s'agit d'un format très couramment utilisé avec les logiciels SIG).

Tout regrouper en une seule couche de points


En bonus un peu hors sujet parce que ça relève plutôt d'un tutoriel QGIS, voici la procédure à effectuer si vous souhaitez regrouper tous les campings sous forme de points dans une même couche. Si ce n'est pas encore fait, commencez par sauver la couche de points en Shapefile (clic droit sur la couche, Sauvegarder sous et choisissez le format Esri Shapefile). Pour transformer les polygônes en points, vous pouvez utiliser l'outil disponible dans le menu Vecteur > Outils de géométrie > Centroïdes de polygones en travaillant sur la couche des polygônes. Pour finir vous pouvez fusionner le dernier Shapefile obtenu avec le Shapefile des points grâce à l'outil Vecteur > Outils de gestion des données > Fusionner les shapefiles en un seul.
 

Respect de la licence ODbL


Si vous réalisez des cartes à partir des données OSM, vous pouvez bien entendu en faire un usage commercial comme la licence l'autorise, mais n'oubliez pas que cette licence demande que vous citiez la source des données. Cela se fait de préférence en indiquant la mention suivante : ©2014 OpenStreetMap et contributeurs.


Si vous testez d'autres extractions depuis OSM n'hésitez pas à laisser un commentaire ci-dessous pour faire un retour d'expérience. Et si vous avez une difficulté ou un problème, n'hésitez pas non plus. Sourire

Bonnes cartes libres à tous !

 

Commentaires  

 
#1 Yann Tuyetnho 17-03-2014 20:02
Merci Nicolas pour cet excellent tuto.
J'ai pu extraire les limites communales de l'Hérault :
boundary=administrative and admin_level=8 in herault
Le résultat est conforme à mes attentes.
Mais il y a un problème à l'export geoJSON : "Le script ne répond pas" (je travaille avec Firefox).
Que faire ?
Je te remercie par avance pour ta réponse.
Yann (Tuyetnho)
Citer
 
 
#2 Nicolas Moyroud 18-03-2014 10:29
Salut Yann,

Dans un cas comme celui-là on dépasse malheureusement les limites de l'utilisation de l'overpass-turbo. La requête sur les limites communales de l'Hérault renvoie tout de même près de 70 000 noeuds OSM et si tu regardes dans l'onglet Données ça atteint presque les 600 000 lignes ! Le problème c'est que le navigateur doit charger en mémoire tout le résultat GeoJSON et ça il n'aime pas du tout.

Dans un cas comme ça il faut se tourner vers d'autres solutions : les outils en ligne de commande que j'ai cité (notamment OGR version > 1.10) ou bien des exports déjà tout prêt.

Pour les limites administratives des extractions ont déjà été réalisée par l'association OSM France et sont disponibles sur le portail opendata.gouv : http://www.data.gouv.fr/fr/organization/openstreetmap

Sinon pour les limites communales de la région LR j'avais produit moi-même en 2013 un jeu de données issu d'une fusion d'OSM et de wikipédia : http://libreavous.teledetection.fr/telechargements/file/55-geocomm-lr-2013

Concernant les outils ligne de commande, OGR est capable de générer directement du Shape depuis le format OSM. Il faudra que je fasse un autre tuto ici pour expliquer comment ça marche. Dès que j'ai le temps... ;-)
Citer
 
 
#3 Samvol 02-01-2015 18:35
Bonjour Nicolas,
Merci pour la procédure expliquée dans ton tutoriel.
J'ai récupérer les contours de glaciers dont j'avais besoin en geoJSON puis je les ai converti en .shp.
Néanmoins, je connais un problème dans les coordonnées et ne peux réaliser des calculs de surface, etc
Merci de ta réponse
Samvol
Citer
 
 
#4 Nicolas Moyroud 09-01-2015 11:08
Bonjour,
Est-ce que tu pourrais préciser d'avantage la nature du problème ? Attention le système de projection dans lequel les données OSM sont fournies est le WGS84 (EPSG:4326). Donc si tu fais un calcul directement tu obtiendras des surfaces en degrés carrés. Il faut passer dans un système de projection métrique (par exemple Lambert93 EPSG:2154) avant de faire le calcul des surfaces si tu veux des mètres carrés.
Citer
 
 
#5 Gilles 15-03-2017 12:42
Bonjour,

J'ai découvert ce post hier en cherchant comment récupérer les campings (notamment) pour les intégrer dans Locus, j'ai lu que tu utilisais Oruxmap qui doit avoir un fonctionnement proche.

Mon objectif étant de récupérer les données comme waypoint que j'importe ensuite dans Locus Pro sur mon mobile. En exportant au format gpx ce qui est décrit dans le message, j'ai pu importer ces campings du Languedoc, avec le petit problème que le tour du terrain est aussi importé, ce problème doit pouvoir je suppose être réglé de différente manière.

Mais la régionalisation à part, ça me fait sensiblement la même chose que les points récupérés dans l'appli Archies qui sont là nationaux.

La question est donc peut-on faire cette extraction en se basant sur ce qui se trouve à x kilomètres d'un tracé GPX qui serait donc la référence et non plus une référence géographique comme dans l'exemple.
Ce qui aurait comme avantage d'avoir un fichier plus léger que celui de 9000 points pour la France par exemple (on est heureusement pas obligé de tout afficher).
Merci
Citer
 
 
#6 Nicolas Moyroud 15-03-2017 14:17
Bonjour,

On ne peut malheureusement pas charger une trace GPS dans overpass-turbo pour définir une zone de téléchargement avec. Mais on peut toujours aller sur la zone manuellement avec l'interface et faire une extraction des campings sans préciser de clause "in". overpass-turbo se base alors sur la zone en cours d'affichage.

Sinon une autre solution est de passer directement par QGIS en utilisant le plugin QuickOSM qui permet d'y charger des données OSM. Il suffit d'ouvrir le fichier GPS avec QGIS, puis de sélectionner l'emprise de cette couche dans l'outil "requête rapide" de QuickOSM en précisant la clé tourism et la valeur camp_site.

Pour supprimer les "tours de terrain" issus des polygones de campings, il faut réaliser avec QGIS la procédure que j'ai expliqué dans l'article (tout regrouper en une seule couche de points).
Nicolas
Citer
 
 
#7 gilles 15-03-2017 21:14
ok merci pour les orientations,
Je ne suis pas arrivé pour le moment à charger les campings qui seraient liés à la trace la seule possibilité de sélection sur une grande surface est "emprise vue actuelle".
Pour ce qui concerne la récupération des points j'ai utilisé l'extension POI exporter le test de récupération dans Locus a été satisfaisant, ne me reste plus qu'à trouver les bons items à sélectionner.
Enfin désolé c'est mon premier essai ;)
Citer
 
 
#8 Nicolas Moyroud 16-03-2017 10:25
Pas de quoi :-)

Oui je pensais que ça te suffisait comme solution en utilisant l'emprise autour de la trace. Je ne connaissais pas l'extension "POI exporter" de QGIS merci pour l'info, ça peut servir !

Si tu veux les données OSM avec une distance autour de ta trace, tu peux faire quelques manips avec QGIS. Voici l'idée générale :
- télécharger les données OSM avec QuickOSM sur l'emprise de ta trace comme tu l'as déjà fait
- transformer tous les objets OSM en points
- faire un buffer avec la distance tampon souhaitée autour de ta trace (menu Vecteur > Outils de géotraitement > Tampon)
- faire une intersection entre la couche précédente et celle des points issus d'OSM (menu Vecteur > Outils de géotraitement > Intersection)

Si besoin tu peux réaliser avec le modeleur graphique de QGIS (menu Traitement > Modeleur graphique) un modèle qui chaîne toutes ces étapes (y compris le téléchargement des données OSM) en prenant simplement en paramètre d'entrée le nom de ton fichier GPX. Si tu veux ensuite refaire la manip, il suffira de relancer le modèle avec un autre fichier GPX !
Citer
 
 
#9 Gilles 09-05-2017 12:15
Bonjour,

Mini retour tardif,
dans un premier temps je n'arrivais pas à faire les fusions, mais il apparaît que c'est un bug de la version que j'avais après la mise à jour, ça marche beaucoup mieux :)
Par contre j'ai abandonné OSM comme base de données pour les campings, il y a encore trop d'inexactitudes.
J'utilise à la place Archies, ce que j’utilisais déjà auparavant mais ça réduit fortement la taille du fichier = 89 ko pour Amsterdam Clermond-Ferrand...
Merci pour les indications en tout cas
Citer
 

Ajouter un Commentaire

Tout les contenus de ce site sont publiés selon les termes de la licence Creative Commons by sa. En ajoutant votre commentaire, vous acceptez implicitement sa mise à disposition selon les termes de cette licence.


Code de sécurité
Rafraîchir