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 © 2019 Libre @ vous. Tous droits réservés.
Joomla! est un logiciel libre sous licence GNU/GPL.
03
Mar
2011
Extraire et transformer des données OpenStreetMap au format shapefile Imprimer
Dans un précédent billet, j'ai brièvement présenté le projet de cartographie libre et collaborative OpenStreetMap. Je vais ici vous présenter quelques outils et manipulations qui permettent d'extraire des données depuis la base OpenStreetMap et de les transformer au format shapefile afin de les exploiter avec n'importe quel logiciel SIG.

Comme rien ne vaut l'explication par l'exemple, je vais prendre un cas concret que j'ai eu à traiter dans le cadre de mes activités professionnelles. Il s'agissait de récupérer au format shape toutes les autoroutes sur le territoire allemand.

1ère étape : le téléchargement des données


Les données OpenStreetMap sont disponibles en téléchargement sur le site de la société Cloudmade, fondée par le créateur d'OpenStreetMap Steve Coast. Les données à télécharger sont fournies au format OSM spécifique à OpenStreetMap, mais également au format shape. Voici le lien direct en ce qui concerne l'Allemagne : http://downloads.cloudmade.com/europe/germany

Les fichiers disponibles sont mis à jour régulièrement depuis la base de données d'OpenStreetMap. Ils sont découpés par continents, pays ou régions (Länder en Allemagne). Si vous choisissez de télécharger le format shape, vous obtenez un fichier zip contenant plusieurs couches : routes, limites administratives, surface en eau, ...

Les données sur le site de Cloudmade sont très peu souvent mises à jour. Vous pouvez également trouver des fichiers Shape extrait d'OSM sur le site de Goefabrik : http://download.geofabrik.de/osm/

Dans mon cas le problème était que je ne devais récupérer que les routes de types "autoroute" (c'est à dire caractérisées par le tag highway=motorway dans OpenStreetMap). Une première possibilité aurait été de récupérer le shape contenant les routes et d'utiliser directement un SIG pour filtrer les données en se basant sur les valeurs attributaires. Mais le traitement aurait sans doute été très long étant donné la taille importante du fichier (620 Mo).
J'ai donc préféré récupérer le fichier au format OSM germany.osm.highway.bz2 et utiliser un outil spécialement conçu pour traiter les données OSM qui s'appelle Osmosis.

2ème étape : l'extraction des données avec Osmosis


Le fichier highway issu d'OpenStreetMap regroupe tous les types de voies de circulation existants : autoroutes, voies rapides, routes primaires, secondaires, tertiaires, résidentielles, pistes en terre, sentiers, etc. Il s'agissait donc d'extraire seulement les autoroutes depuis ce fichier contenant toutes les routes d'Allemagne. Osmosis est un outil en java (donc qui fonctionne sous Windows, GNU/Linux ou Mac) qui s'exécute en ligne de commande. L'absence d'interface graphique permet de très bonnes performances pour l'extraction de données dans des gros fichiers. Voici comment j'ai réalisé l'extraction dans mon cas :
osmosis --read-xml file="germany.osm.highway.bz2" --tag-filter accept-ways highway=motorway --used-node --tag-filter reject-relations --write-xml file="germany.motorway.osm"

Il s'agit de préciser le fichier en entrée avec l'option --read-xml et le fichier en sortie avec l'option --write-xml. Les options --tag-filter permettent de préciser les éléments à conserver ou ceux à supprimer. Ici on conserve tous les chemins caractérisés par le tag highway=motorway et on rejette toutes les relations. L'option --used-node permet de récupérer également tous les points empruntés par les chemins récupérés. Si on ne veut que le linéaire des autoroutes, on n'est pas obligé d'ajouter cette option. Le traitement a duré environ 20 minutes pour un fichier d'entrée de 620Mo. Le fichier de sortie obtenu faisait une taille de 45Mo.

3ème étape : la transformation en shape


Pour cette étape il existe plusieurs outils, dont un également en java ligne de commande. J'ai essayé de l'utiliser mais je n'ai pas réussi à le faire fonctionner correctement.  Du coup, j'ai choisi d'utiliser un SIG libre bien connu : QuantumGIS. En effet depuis la version 1.2, ce SIG propose une extension pour OpenStreetMap. Il suffit de l'activer avec le gestionnaire d'extensions pour bénéficier d'une nouvelle barre d'outils dédiés à OpenStreetMap.

qgis_osm

Le premier icône à gauche permet d'ouvrir un fichier local au format OSM. J'ai donc pu ouvrir le fichier germany.motorway.osm contenant les autoroutes d'Allemagne.

qgis_osm2
Pour finir, il ne reste plus qu'à sauver la couche nommée germany_lines au format shapefile en sélectionnant la couche puis en cliquant sur le menu Couche > Sauvegarder sous. A noter que QGIS propose un grand nombre de formats de sauvegarde autres que le shape (MapInfo, KML, ...)

Vous voilà maintenant prêt à utiliser les données d'OpenStreetMap dans vos SIG.

 

Commentaires  

 
#1 maxe 02-02-2012 09:26
jai besoin de plus des détails si possible merci.
Citer
 
 
#2 Isabelle 03-10-2013 08:55
Bizarrement, je tombe souvent sur ce blog dès que je cherche des solutions aux problèmes que je rencontre dans ma découverte de QGIS ;)
Et j'ai la réponse que je cherche ^^

Merci NicoM !
Citer
 
 
#3 Nicolas Moyroud 03-10-2013 09:52
Bonjour IsaP,

C'est toujours un plaisir de rendre service concernant QGIS et les données OSM. Et encore plus quand ça permet de retrouver des vieilles connaissances grâce à mon site :-)
Citer
 
 
#4 THEO 19-10-2013 13:50
Bonjour!
Tu as l'air de maitriser bien plus que moi sur OSM donc je te soumet mon problème: j'ai des cartes en format osm.pbf. Je souhaite les utiliser depuis un gps twonav sportiva et/ou un nokia N900.
Sais tu comment décompresser le osm.pbf en osm et comment travailler ces formats?
merci d'avance
Citer
 
 
#5 Nicolas Moyroud 21-10-2013 09:58
Bonjour Theo,

Pour convertir entre les différents formats de données OSM, il y a osmconvert : http://wiki.openstreetmap.org/wiki/Osmconvert#Converting_Files
Il fait cela, et bien plus encore ! ;-)
Citer
 
 
#6 Valère 19-03-2014 09:09
Merci
Citer
 
 
#7 sarra ben 09-05-2016 16:48
Bonjour

je voudrai une réponse urgente,
j'ai un fichier osm et je veux le convertir en xml.

commenet je peux le faire SVP
Citer
 
 
#8 Nicolas Moyroud 09-05-2016 16:54
Bonjour,

Les réponses urgentes en général c'est payant ! ;-)
Quoi qu'il en soit la réponse est facile : le format osm c'est déjà du xml, donc il n'y a rien à faire. Pour vous en convaincre ouvrez un fichier osm avec un éditeur de texte, vous verrez.
Citer
 
 
#9 Simballa Diakhaby 14-06-2016 09:35
Bonjour,
Vous avez l'air de bien maîtriser OSM alors je vous expose mon problème :-) .
J'ai téléchargé le fichier intégral France métropolitaine en format pbf(sur le site de OSM) que j'ai converti en xml avec l'outil Osmosis. Par contre le fichier est trop long(des millions de lignes). Je souhaite juste extraire les données liées aux routes, lieux touristiques et au contour de quelques communes (celle de Paris par exemple).
Comment je peux le faire SVP?
Citer
 
 
#10 Nicolas Moyroud 14-06-2016 09:54
Bonjour,

Osmosis ne sert pas qu'à transformer les données OSM dans différents formats mais également à réaliser des extractions en se basant sur les tags des objets. Vous pouvez donc l'utiliser pour extraire les éléments liés aux routes (les ways portant des tags highway=*). Pour les lieux touristiques c'est assez vague donc il faudra que vous définissiez la liste des différents tags concernés pour faire l'extraction. En ce qui concerne les limites de communes c'est un peu plus complexe car il faut gérer des relations OSM. Mais pour faire plus simple vous pouvez utiliser les extraits de limites administratives issues d'OSM déjà réalisés qui sont disponibles sur data.gouv : https://www.data.gouv.fr/fr/search/?q=openstreetmap
Si vous avez besoin d'aide pour la réalisation n'hésitez pas à me contacter via mon autre site dédié à OSM : http://www.osmlab.fr/index.php/presentation
Citer
 
 
#11 Simballa Diakhaby 15-06-2016 09:00
Bonjour,
merci de votre réponse précédente qui m'a beaucoup servi. En effet, j'ai déjà extrait les infos dont j'ai besoin. Maintenant j'aimerai savoir comment utiliser les infos que j'ai, en format csv, pour les représenter sur une carte sur une carte.
Par exemple utiliser les infos sur la commune de Paris pour tracer le contour de la ville de Paris.
Citer
 
 
#12 Nicolas Moyroud 15-06-2016 09:49
Si vous avez des données csv que vous voulez représenter sur un fond de carte OSM, vous pouvez utiliser l'outil Umap : http://umap.openstreetmap.fr/fr/
Pour les limites de Paris, je ne suis pas sûr d'avoir compris. Avec Umap, vous pouvez également afficher le fichier osm des limites extrait avec osmosis. Si vous avez plutôt utilisé le fichier Shape provenant de data.gouv, il vous faudra le convertir en format geojson ou kml pour pouvoir le charger avec Umap. Vous pouvez par exemple utiliser qgis ou ogr2ogr pour faire ça.
Citer
 
 
#13 Simballa Diakhaby 15-06-2016 10:41
Merci super outil :-)
Pour les limites de Paris(disons de l'Ile-de-France), je voudrai juste tracer le contour de l'ile-de-France à l'aide du fichier ile-de-france.osm qui contient toutes les infos sur l'ile-de-France(route, rue, ...) avec un polyline par exemple.
Par ailleurs j'aimerai aussi savoir comment lire les nodes de ce fichier xml qui est trop volumineux. On peut avoir par exemple plusieurs balises node qui correspondent à une même route. Comment savoir toutes les balises node qui correspondent à une même route par exemple ou place par exemple?
Merci d'avance
Citer
 
 
#14 Nicolas Moyroud 15-06-2016 10:55
Si vous voulez tracer un contour administratif il ne faut pas utiliser un fichier qui contient toutes les données et faire un polyligne englobant. Vous n'obtiendrez de toute façon rien de précis parce que vous risquez d'avoir quelques éléments en dehors de votre zone (bouts de routes qui débordent etc...) Ce qu'il faut faire c'est extraire uniquement les limites qui vous intéresse depuis le fichier osm global (avec osmosis) ou utiliser celles qui sont déjà extraites depuis data.gouv. Une fois les limites de l'Ile-de-France récupérées dans un fichier à part vous pourrez les afficher sans problème dans un calque avec Umap.
Pour extraire uniquement les nodes qui font parti d'un way précis ça peut aussi se faire avec osmosis (option --used-node).
Si vous avez besoin d'aide n'hésitez pas à me solliciter je peux vous faire une prestation dans le cadre de mon activité d'auto-entrepreneur.
Citer
 
 
#15 Simballa Diakhaby 15-06-2016 12:16
Merci pour votre réponse mais la commande pour extraire uniquement les nodes que je veux ne fonctionne pas on dirait :sad: En effet avec la commande suivante : osmosis --read-xml france-latest.osm.bz2 --tf accept-ways highway=* --used-node --write-xml highways.osm

le fichier highways.osm est créé mais il est vide. Savez-vous où se situe le problème?
Citer
 
 
#16 Nicolas Moyroud 15-06-2016 13:29
Vous ne devriez pas obtenir un fichier vide c'est bizarre. Par contre pour ce que vous souhaitez faire ça ne conviendra pas. Avec cette commande vous obtenez bien les nodes contenus dans les highways, mais les ways seront toujours présents.
Il faudrait plutôt faire :
osmosis --read-xml france-latest.osm.bz2 --tf accept-ways highway=* --tf reject-relations --used-node --tf reject-ways --write-xml highways.osm

C'est le reject-ways à la fin qui permet de ne conserver que les nodes.

Une petite remarque : pour aller plus vite dans le traitement sur un aussi gros fichier, vous devriez plutôt utiliser en entrée une fichier au format binaire pbf en utilisant l'option read-pdf.
Citer
 
 
#17 Simballa Diakhaby 15-06-2016 13:44
Merci je vois ce que vous voulez dire. En fait quand je lance la commande je vois que c'est en cours d'exécution mais ça s'arrête jamais et le fichier devrait se remplir petit à petit mais ça reste vide :sad:
Citer
 
 
#18 Nicolas Moyroud 15-06-2016 14:00
Oui c'est bien ce que je craignais le traitement doit être beaucoup trop long. Je ne connais pas exactement le fonctionnement interne d'osmosis mais d'après mes expériences le fichier résultat ne se remplit en général qu'à la toute fin du processus. Donc c'est normal que vous ne voyiez rien apparaître si cela ne se termine pas.

L'option pbf sera sans doute plus performante et même encore mieux je pense que vous ne deviez pas travailler avec le fichier france entière mais seulement avec le fichier ile-de-france déjà pré-découpé :
http://download.geofabrik.de/europe/france/ile-de-france-latest.osm.bz2
Citer
 
 
#19 Simballa Diakhaby 16-06-2016 09:37
Merci de votre réponse, effectivement c'est plus simple de travailler avec le fichier ile-de-france déjà pré découpé...
Par contre sur le fichier ile-de-france prédécoupé il n'y a pas la localisation GPS des rues par exemple et j'ai besoin de ces données. Je vois dans les balises node de ce fichier des positions gps mais je ne pense pas que ça correspond aux rues. Savez vous comment récupérer ces positions GPS dans mon fichier ile-de-france? Et si les positions qui sont dans les balises node correspondent bien aux positions gps des différents points savez-vous comment savoir que telle position correspond à tel point?
Désolé pour cette avalanche de questions depuis hier ;-)
Citer
 
 
#20 John 17-06-2016 09:01
Bonjour, j'ai commencé à utiliser OSM il n'y a pas trop longtemps. J'ai téléchargé le fichier ile-de-france.osm pour extraire des données mais je ne comprend pas la structure de ce fichier. Quel est le rôle des balises node, relation, tag, way, member, ...
Merci d'avance
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