Un peu de prospective avec et sur OpenStreetMap đ
Posted by MĂ©dĂ©ric Ribreux 🗓 In blog/OpenStreetMap/
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:
- Est-ce-que ma ville est bien équipée en transports en communs ?
- Combien y-a-t il de kilomÚtres de pistes cyclables dans mon département ?
- Quel est le niveau d'exhaustivité d'OSM sur un thÚme particulier ?
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`
-c
: permet de créer les tables dans la base de données.-d GEOBASE\_LOCALE
: permet d'indiquer le nom de la base de données spatiale qui va servir à stocker les données.-E 2154
: permet de préciser que nous voulons des données en RGF93.-u
: permet de gérer les problÚmes d'encodage UTF-8.-U sid\_admin
: permet d'indiquer le login de l'utilisateur sous PostgreSQL.-H localhost
: le serveur est sur localhost.-W
: demande un mot de passe pour le login PostgreSQL.
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:
- planet_osm_point: qui contient les données ponctuelles.
- planet_osm_line: qui contient les données linéaires.
- planet_osm_polygon: données sous forme de polygones.
- planet_osm_roads: table contenant les données linéaires des routes.
Ă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.
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:
- Se connecter à la base de données spatiale.
- Sélectionner la couche planet_osm_polygon (ne pas double-cliquer).
- Cliquer sur le bouton "Construire une requĂȘte":
- Dans la liste des champs, vous pouvez voir tous les Tags d'OpenStreetMap qui existent. Dans notre cas, nous allons sélectionner uniquement les polygones ayant un tag de limite administrative (boundary).
- Sélectionner le champ
boundary
comme sur l'image précédente. - Cliquer sur le bouton
=
pour indiquer qu'on cherche une valeur. - Cliquer sur le bouton "échantillon" afin de voir quelles sont les valeurs qui existent pour ce champ.
- Dans notre cas, il n'y a que deux valeurs: null ou "administrative".
- Choisir la valeur "administrative".
- La requĂȘte sous QGIS est en fait une simple clause WHERE, ce qui dans notre cas est parfaitement ce que nous voulons: WHERE "boundary" = 'administrative'
- En cas de problĂšme, il est possible de revenir en arriĂšre en affichant les propriĂ©tĂ©s de la couche et, Ă partir de l'onglet "GĂ©nĂ©ral", de cliquer sur le bouton "Constructeur de requĂȘte".
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:
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
Ă 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'
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'
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'
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.