Un peu de prospective avec et sur OpenStreetMap 🔗

Posted by MĂ©dĂ©ric Ribreux 🗓 In blog/OpenStreetMap/

#PostGIS #OSM #GIS #QGIS

Introduction

Je l'ai déjà affirmé maintes fois, OpenStreetMap, c'est bien
 Maintenant, c'est encore mieux de savoir ce qu'on peut faire avec. Pour l'instant, la partie visible de l'iceberg, celle qui est mise en avant par l'outil, consiste en un outil de réalisation de carte sur internet à la "Google Maps". Cette fonctionnalité est certes trÚs intéressante mais en fait, on peut aller beaucoup plus loin !

C'est parce que les données sont libres, qu'on peut en faire ce que l'on veut. Puisqu'OSM contient plus que des informations sur les routes et chemins, on peut en extraire davantage d'informations et les recouper pour former une argumentation, pour vérifier ce que le terrain révÚle plutÎt que du pifométrique. Quelques exemples de questions qui peuvent trouver réponses avec OSM:

Cet article a pour objet d'illustrer le potentiel d'OSM sur la prospective au niveau d'un territoire. La limite d'étude, car il faut bien en fixer une, sera l'emprise de la région des Pays-de-la-Loire. D'abord parce que c'est une région que je connais, ce qui me permettra d'éviter les erreurs d'appréciation (genre si une commune disparaßt du lot de données, je devrais bien pouvoir l'identifier). Ensuite parce qu'il y a suffisamment de données au niveau régional pour permettre une analyse comparative entre départements par exemple.

Avant de nous lancer, il ne faut pas oublier qu'OSM est loin d'ĂȘtre exhaustif en termes de donnĂ©es. Explorer les donnĂ©es va nous permettre Ă©galement de nous en rendre compte mais surtout de voir "lĂ  oĂč le bĂąt blesse" et oĂč il faudrait apporter de l'effort.

Étape 0: PrĂ©-requis

Pour les besoins de l'expérience, vous avez besoin d'un SGBD spatial et d'un visualisateur de couches géographiques. Dans mon cas, j'utilise PostGIS comme SGBD spatial et QGIS pour visualiser les données. Si vous ne disposez pas de ces outils, allez sur Google et renseignez-vous sur la maniÚre de les installer. Je pars du principe que ces outils sont bien installés et configurés. L'objet de cet article n'est pas de passer en revue ce point important certes mais qui prendrait des plombes à expliquer.

Etape 1: Récupérer les données

Avant de commencer, il convient de rĂ©cupĂ©rer les donnĂ©es. En effet, si OSM permet de downloader en temps rĂ©el les informations dont vous avez besoin, nous n'allons pas utiliser ce moyen direct mais bien tĂ©lĂ©charger des donnĂ©es snapshots rĂ©centes. Si on procĂšde ainsi, c'est avant tout pour des raisons d'efficacitĂ©: des serveurs proposent des snapshots de donnĂ©es, prĂȘts Ă  ĂȘtre intĂ©grĂ©s dans une base de donnĂ©es spatiale. Ensuite, il y a les problĂšmes de trafic rĂ©seau: notre limite d'Ă©tude (RĂ©gion Pays-de-la-Loire) reprĂ©sente dĂ©jĂ  25Mo de donnĂ©es brutes.

Pour plus d'informations, sur les modes de rĂ©cupĂ©ration, je vous laisse lire l'URL suivante: http://wiki.openstreetmap.org/wiki/FR:Planet.osm . Pour ma part, j'utilise les extraits de gĂ©ofabrik qui ont l'avantage d'ĂȘtre mis Ă  jour tous les jours. Les donnĂ©es sont disponibles ici: http://download.geofabrik.de/osm/europe/france/ . Pour rĂ©cupĂ©rer les donnĂ©es de notre rĂ©gion d'Ă©tude, un simple wget http://download.geofabrik.de/osm/europe/france/pays-de-la-loire.osm.bz2 suffit.

Ces donnĂ©es sont au format .osm qui est du XML Ă  la sauce OSM. Pour information, c'est le format utilisĂ© par JOSM. La rĂ©fĂ©rence du XML est prĂ©sentĂ©e dans le Wiki officiel: http://wiki.openstreetmap.org/wiki/.osm . Maintenant, il reste Ă  passer du format .osm Ă  du SQL Ă  injecter dans PostGIS. Pour cela, il existe un script nommĂ© osm2pgsql, qui se charge d'effectuer la transformation et le chargement en base de donnĂ©es directement. Sous Debian, ce script est prĂ©sent dans le paquet osm2pgsql (d'oĂč un simple # aptitude install osm2pgsql.

L'utilisation du script est triviale: $ osm2pgsql -c -d GEOBASE_LOCALE -E 2154 -u -U sid_admin -H localhost -W pays-de-la-loire.osm.bz2

Le lancement du script prend généralement du temps: compter environ 1 à 5 minutes de chargement pour une région. Le script génÚre 4 tables dans la base de données spatiale:

Étape 2: Afficher les donnĂ©es avec QGIS

Les tables générées par le chargement des données d'OSM sont directement utilisables dans QGIS. Il suffit de lancer ce dernier, de se connecter à la base de données spatiale, de sélectionner les 4 couches et d'afficher le résultat.

OSM brut

Bon, c'est beau, mais on peut mieux faire: sĂ©lectionner ce qu'on veut voir en utilisant une requĂȘte SQL depuis QGIS. Un exemple est souvent parlant par rapport Ă  un discours. Si vous voulez afficher uniquement les polygones des communes, la marche Ă  suivre est la suivante:

Pour connaßtre la signification des Tags, vous pouvez consulter la page du Wiki dédiée: http://wiki.openstreetmap.org/wiki/FR:Map_Features .

Étape 3: Un peu de recherche

Limites communales:

Couche ~ planet_osm_polygon

Clause WHERE ~ "admin_level" = 8

Tag OSM ~ http://wiki.openstreetmap.org/wiki/Key:admin_level#admin_level

En suivant la méthode présentée plus haut, on obtient le résultat suivant:

Limites communales

Comme on peut le voir, la couverture du territoire de la rĂ©gion Pays-de-la-Loire est loin d'ĂȘtre complĂšte en ce qui concerne les limites communales. Le dĂ©partement de la Mayenne est complĂštement dĂ©pourvu. A ce niveau, j'ai l'impression que les polygones de limites communales n'ont pas Ă©tĂ© rattachĂ©s Ă  la bonne rĂ©gion administrative. Ensuite, le Maine-et-Loire est Ă©galement loin d'ĂȘtre couvert en totalitĂ©. En revanche, en Loire-Atlantique, il ne manque qu'une seule commune et la Sarthe comme la VendĂ©e semblent complĂštes.

Ce premier niveau d'information est trÚs important: en disposant d'un fond de limites communales, on peut réaliser des cartes statistiques simples. C'est pourquoi, une couverture complÚte des départements est un impératif. Avec cette couche, on peut élaborer des modÚles géométriques simplifiés à l'image de ce que l'IGN fait avec les contours GéoFLA(r).

ArrĂȘts de bus

Couche ~ planet_osm_point

Clause WHERE ~ "highway" = 'bus_stop'

Tag OSM ~ http://wiki.openstreetmap.org/wiki/Tag:highway%3Dbus_stop

Bus stop

À premiĂšre vue, on constate une nette diffĂ©rence avec les villes de Nantes et du Mans comparativement Ă  Angers. Dans le Maine-et-Loire, assez peu d'arrĂȘts de bus sont reprĂ©sentĂ©s.

Passage Ă  niveau:

Couche ~ planet_osm_point

Clause WHERE ~ "railway" = 'crossing'

:Tag OSM:

Passages Ă  niveau

On dispose de vraiment peu d'informations sur ce sujet. Peut-ĂȘtre que la donnĂ©e sera disponible uniquement quand le rĂ©seau routier et de chemin de fer aura Ă©tĂ© davantage reprĂ©sentĂ© dans OSM. C'est un tag que j'ai pris au pif !

Pistes cyclables

Couche ~ planet_osm_line

Clause WHERE ~ "bicycle" IN ('yes','private') OR "highway" = 'cycleway'

:Tag OSM:

Pistes cyclables Bon, il y a un peu plus de matiÚre, mais on est loin du compte. Par exemple, seule une partie de la "Loire à Vélo" est vectorisée. En revanche, on peut remarquer la présence du chemin de halage de la Mayenne.

Radars automatiques

Couche ~ planet_osm_point

Clause WHERE ~ "highway" = 'speed_camera'

:Tag OSM:

Radars automatiques

Encore une fois, l'information est loin d'ĂȘtre exhaustive alors qu'il est peut-ĂȘtre possible de rĂ©cupĂ©rer lĂ©galement et librement les emplacements (si l'information est considĂ©rĂ©e comme publique).

Étape 4: Soyons exhaustifs

Maintenant que nous avons vu quelques exemples, il est important de disposer d'un récapitulatif complet des données présentes dans notre export par Tag d'OSM et par département.

SELECT DISTINCT count(access) As access,
      count("addr:flats"),
      count("addr:housenumber"),
      count("addr:interpolation"),
      count(admin_level) As admin_level,
      count(aerialway),
      count(aeroway),
      count(amenity),
      count(area),
      count(barrier) As barrier,
      count(bicycle) As bicycle,
      count(bridge) As bridge,
      count(boundary) As boundary,
      count(building) As building,
      count(capital) As capital,
      count(construction),
      count(cutting),
      count(disused),
      count(ele),
      count(embankment),
      count(foot),
      count(highway),
      count(historic),
      count(horse),
      count(junction),
      count(landuse),
      count(layer),
      count(learning),
      count(leisure),
      count("lock"),
      count(man_made),
      count(military),
      count(motorcar),
      count("name"),
      count("natural"),
      count(oneway),
      count(poi),
      count(power),
      count(power_source),
      count(place),
      count(railway),
      count(ref),
      count(religion),
      count(residence),
      count(route),
      count(service),
      count(sport),
      count(tourism),
      count(tunnel),
      count(waterway),
      count(width),
      count(wood)
from planet_osm_point;

Conclusion

AprĂšs ce petit tour dans les donnĂ©es d'OSM, on voit qu'on peut faire pas mal de choses avec. On voit Ă©galement que le niveau d'exhaustivitĂ© est Ă  amĂ©liorer avec, par exemple, les limites communales qui ne sont pas toujours complĂštes d'un dĂ©partement Ă  l'autre. OSM dispose d'un vrai potentiel que notre petit exercice vient illustrer. Il donne au citoyen, l'occasion de se rendre compte avec des Ă©lĂ©ments simples de la rĂ©alitĂ© du terrain. Cela lui permet de devenir un peu plus acteur de son environnement grĂące Ă  l'apport d'une meilleure connaissance du territoire oĂč il vit.

On le voit bien, la crĂ©dibilitĂ© d'OSM ne se fera que lorsqu'il sera plus complet car pour l'instant, le volume d'information est assez faible et on voit que des disparitĂ©s grandes sont prĂ©sentes selon le lieu oĂč l'on se trouve (grandes mĂ©tropoles urbaines souvent bien fournies au contraire des zones rurales). Maintenant, on comprend mieux pourquoi OSM est surtout orientĂ© sur le "remplissage": tous les outils de base sont faits pour crĂ©er de la donnĂ©e alors qu'on compte assez peu d'outils qui s'appuient sur cette donnĂ©e. En attendant, concrĂštement, l'accent doit ĂȘtre mis sur les limites communales: c'est le premier effort Ă  porter, car il permet de disposer d'Ă©lĂ©ments de comparaison avec d'autres sources de donnĂ©es.