Extraire des données OpenStreetMap

Il est possible d’extraire facilement des données d’OSM. L’une des méthodes possibles est d’utiliser l’API Overpass à partir du site web Overpass Turbo.

Un exemple : extraire le bâti d’une commune

1. Savoir ce que l’on veut extraire.

C’est par là qu’il faut commencer.

Dans notre exemple, nous voulons les bâtiments d’un petit village rural du Jura qui porte le nom poétique de Longcochon.

On commence donc par se rendre sur OpenStreetMap, et taper Longcochon dans la barre de recherche. On clique sur le seul résultat, un petit coup de zoom et nous y voici.

Ensuite, sur la droite de la carte, on clique sur le bouton Couches puis on coche la case Données de la carte. Les données s’affichent en surbrillance.

Attention : votre ordinateur peut subir de forts ralentissements lorsque les données sont affichées en surbrillance. Ne le faites pas sur des zones trop grandes ou avec une densité d’informations trop importante.

On clique sur un bâtiment. À ce moment là, à gauche, s’affichent des informations.

osmscr1

Le bâtiment sur lequel nous avions cliqué comporte deux attributs : un attribut building qui a pour valeur yes et un attribut source dont la valeur décrit la source des données (ici, le cadastre).

Il est donc facile de comprendre que pour extraire les bâtiments, il nous faudra extraire tous les polygones ayant l’attribut building avec la valeur yes. Et cela restera valable n’importe où, qu’on soit à Longcochon, à Courchaton, ou à Longbird.

2. Extraire

Cette fois, on se rend sur l’interface Overpass Turbo. On commence par chercher notre village et zoomer dessus.

Ensuite, on saisit dans l’interface de gauche la requête suivante :

<osm-script>
  <query type="way">
    <has-kv k="building" v="yes"/>
    <bbox-query {{bbox}}/>
  </query>
  <!-- added by auto repair -->
  <union>
    <item/>
    <recurse type="down"/>
  </union>
  <!-- end of auto repair -->
  <print/>
</osm-script>

Et on l’exécute.

Je connais encore mal le langage de requête d’Overpass, et je travaille souvent en copiant-collant la doc et en modifiant les valeurs qui vont bien.

En résumé, on va chercher tous les way qui disposent de l’attribut building avec la valeur yes, dans la zone affichée à l’écran ({{bbox}}).

Dans OSM, un way peut représenter toutes sortes de lignes (route, ligne à haute tension, rivière…), y compris des lignes fermées (une place, un bâtiment…).

L’exécution prend un peu de temps, puis le résultat s’affiche sur la carte.

osmscr2

Maintenant, il nous reste plus qu’à exporter cela depuis le menu, en choisissant un format de données qui vous convient. Pour une utilisation dans QGIS, j’utilise le format GeoJSON qui me donne satisfaction.

Pour aller plus loin

On peut assez vite construire des requêtes simples, sans même connaître le langage.

Il faut juste savoir que, hormis les way, on peut récupérer des points (node), des zones (area) et des relations (relation). Une fois qu’on sait cela, il suffit de choisir les bons attributs et les bonnes valeurs comme expliqué au premier paragraphe.

Par exemple, si l’on ne veut extraire de Longcochon que les départementales, la requête se fera sur l’attribut highway et la valeur tertiary, tandis que si l’on ne veut que la D 287, on pourra utiliser l’attributs ref avec la valeur D 287. Et en cas de besoin, on peut bien sûr combiner plusieurs attributs.

<osm-script>
  <query type="way">
    <has-kv k="highway" v="tertiary"/>
    <has-kv k="ref" v="D 287"/>
    <bbox-query {{bbox}}/>
  </query>
  <!-- added by auto repair -->
  <union>
    <item/>
    <recurse type="down"/>
  </union>
  <!-- end of auto repair -->
  <print/>
</osm-script>

Sachez pour terminer qu’il existe deux sortes de langages : celui-ci, Overpass XML, et un autre qui s’appelle Overpass QL et qui est plus compact. Je suis plutôt habitué à XML, mais si ce n’est pas votre cas je vous suggère de commencer avec QL.

Les documentations sont disponibles ici :

Le langage overpass API :
http://wiki.openstreetmap.org/wiki/Overpass_API/Language_Guide
http://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL

La doc générale :
http://wiki.openstreetmap.org/wiki/Overpass_API

Pour le wizard qui est propre à OverpassTurbo :
http://wiki.openstreetmap.org/wiki/Overpass_turbo/Wizard

Je remercie un lecteur de ce site qui se reconnaîtra car ces dernières lignes ne sont qu’un copier-coller d’un de ses commentaires sur un autre de mes articles.

 

Ce contenu a été publié dans Astuces, Informatique. Vous pouvez le mettre en favoris avec ce permalien.

7 réponses à Extraire des données OpenStreetMap

  1. Etienne T dit :

    Lis la doc alors ;-)

    [pub=on]
    Et pour requêter directement l’overpass dans QGIS, il y a le plugin QuickOSM ;-)
    [pub=off]

    PS : J’aime bien ton onglet facebook.

    • Adrien dit :

      Lis la doc, tu dis ça en réponse à quoi ? Je lis quand j’ai besoin.

      De quel onglet Facebook tu parles ?

      Il faut que je teste QuickOSM. C’est toi qui l’as développé ?

      • Etienne T dit :

        Bon anniversaire, je pense que je dois être le premier sur ton blog ;-)

        Oui en effet, j’étais speed. Le wizard d’overpass turbo (en haut à gauche) est vraiment très pratique pour t’éviter de taper des requêtes.
        Tu peux mettre « building in Longcochon » et l’assistant fait le reste. Pas mal non ?

        Je parle de l’onglet FB « camions d’autrefois » sur tes captures, c’est « ta » signature pour tes captures.

        Pour QuickOSM, oui durant mon stage chez 3Liz l’année dernière mais je continue ponctuellement le développement.

        • Adrien dit :

          Ouais, j’aime bien les camions d’autrefois. :-)
          Les vélos et les voitures, aussi.

          Merci pour mon anniversaire.

          J’aime bien l’idée de pouvoir mettre building in Longcochon. Je lirai la doc du wizard, alors. Un jour. :-)

          Il faut vraiment que je teste QuickOSM… Pareil, un jour. :-)

  2. Gaboriau dit :

    Bonjour Adrien,

    Sur « http://overpass-turbo.eu/ », j’ai exécuter la requête suivante :
    (
    node[tourism]({{bbox}});
    way[tourism]({{bbox}});
    relation[tourism]({{bbox}});
    );
    out;
    J’ai du mal à trouver des docs qui répondent à mes deux questions : 1) je voudrais d’abord savoir s’il y a possibilité de faire une recherche de tous les événements touristiques possibles en france ?
    2) Il y a-t-il d’autres « key » ou autres qui permettent de ressortir d’autres types d’événements (exemples: salon privé, salon d’entreprise, manifestation, festival , concert, …) Tous ce qui ramène beaucoup de monde.

    Merci d’avance pour votre réponse,
    M.Gaboriau

  3. Aidara MAdhy CHERIF dit :

    Merci Pour votre article
    J’aimerai savoir comment trouver toutes villages qui sont dans un pays seulement avec overpass turbo,
    J’ai essayer l’assistant mais j ai eu un resultat pas trop satisfaisant. Voici ma requête:
    // query part for: “village”
    node["place"="village"]({{bbox}});
    way["place"="village"]({{bbox}});
    relation["place"="village"]({{bbox}});

    alors que je ne veux pas que ça utilise la bbox car je me retrouve dans avec le resultat dans trois pays différents.
    merci pour votre compréhension

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>