21juil. 2012
Exporter des éléments géoréférencés depuis OSM avec JOSM
16:09 - Par Fabien Poulard - Geek & Technique - 2 commentaires
La base de données OSM est une formidable source d'information concernant les lieux et autres artefacts composant nos villes et nos campagnes. Malheureusement, les gens perçoivent souvent le projet au travers uniquement des rendus de cartes et passent ainsi à côté de toute cette richesse. Il faut dire qu'interroger la base de données n'est pas chose aisée, les diverses API ne sont pas forcément facile à prendre en main, en particulier lorsque l'on n'est pas développeur. Je me suis moi-même cassé plusieurs fois les dents dessus lors d'hackatons.
Je propose dans ce billet une méthode assez simple et directe pour récupérer des données depuis OSM en utilisant le système de filtres de JOSM.
La méthode nécessite 3 étapes :
- Télécharger les données de la zone qui nous intéresse ;
- Créer un filtre pour sélectionner les objets d'intérêt ;
- Exporter les objets sélectionnés.
Petite illustration avec les objets touristiques de la ville de Changé !
1- Télécharger les données
La première étape consiste à lancer JOSM et télécharger les données de la zone couvrant la ville.
La définition de la zone à télécharger se fait dans une fenêtre dédiée accessible depuis le bouton Télécharger les données de la carte :
Il faut ensuite sélectionner à la souris la zone à télécharger après s'être potentiellement déplacer sur la carte en maintenant le clic droit appuyé :
Une fois la sélection effectuée, cliquer sur Télécharger. JOSM va alors récupérer toutes les données de la zone.
Attention, si votre zone est trop conséquente, il ne sera pas possible de toute récupérer en une fois. Il faudra télécharger une sous partie de la zone puis télécharger le reste par morceaux. C'est une des limites de cette approche.
2- Créer un filtre
La seconde étape consiste à filtrer parmi toutes les données récupérées uniquement celles qui nous intéressent.
Il vous faut tout d'abord faire apparaître la fenêtre de configuration des filtres : Fenêtres > Filtrer ou bien Alt+Maj-F.
Pour l'exemple nous allons récupérer toutes les installations touristiques ou de loisirs de la ville de Changé, soit grosso modo les tags :
Nous allons donc créer un nouveau filtre :

Les filtres sont définis comme des espèces d'expressions régulières sur les tags des objets, soit pour notre exemple :
amenity=*|leisure=*|sport=*|tourism=*|shop=*
Une fois le filtre créé il apparaît dans la liste des filtres. Par défaut le système cache les éléments acceptés par le filtre, nous souhaitons réaliser l'inverse... ça tombe bien il y a une case à cocher pour ça :

La carte n'affiche désormais plus que les installations géolocalisées qui nous intéressent.
3- Exporter les données
La troisième et dernière étape consiste à exporter les données concernant les objets filtrés.
Il suffit de sélectionner tous les objets promus par le filtre en dézoomant suffisamment et en sélectionnant la zone à l'aide de la souris. Les éléments sélectionnés apparaissent alors en rouge :
Une fois les éléments sélectionnés, il faut les copier (Ctrl-C), créer un nouveau calque de données (Ctrl-N) et copier les éléments vers ce nouveau calque (Ctrl-V) :
Finalement, nous pouvons exporter ce nouveau calque de données qui ne contient que les éléments qui nous intéressent : Fichier > Enregistrer sous en s'assurant que le calque sélectionné soit le bon. Deux format d'enregistrement sont intéressants :
Les deux sont basés sur XML et sont peu utilisés en dehors des outils de SIG. Il faudra passer par des outils de conversion pour les intégrer dans l'outil de visualisation votre choix.





2 commentaires
On peut gagner un peu d'efficacité en utilisant une des API améliorée (XAPI, jXAPI ou même OverpassAPI) pour ne charger que les données utiles. Par exemple, dans JOSM toujours, faire Fichier -> Ouvrir un emplacement (Crtl + L) et donner une URL comme http://overpass.osm.rambler.ru/cgi/... qui demande ici tous les éléments (nodes, ways & relations) ayant un tag amenity dans l'emprise de Changé ; ne pas oublier "meta" qui ajoute les champs nécessaires à JOSM (user id, etc.). La syntaxe est riche et peut-être trouvée ici http://wiki.openstreetmap.org/wiki/...
@Marcussacapuces91 Merci pour l'information !