RSS Libre@vous
RSS de la rubrique Géomatique

Dernière mise à jour
le 03/09/2014 à 17h46
Les contenus de ce site sont publiés sous la licence CC by-sa, sauf mention contraire.
licence_CC-by-sa
Copyright © 2014 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
 

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