XAPI OSM#
Date de publication initiale : 28 mai 2010
OpenStreetMap est un formidable projet, on ne le dira jamais assez. La constitution d'une base de données mondiale pour la constitution d'une carte libre est une avancée majeure dans la libéralisation des données géographiques. Preuve en est, certaines villes françaises commencent à alimenter la base grùce à leurs propres données.
Cependant, mis Ă part le fait de visualiser la carte sur le site, la façon dont on peut rĂ©cupĂ©rer des donnĂ©es reste pour beaucoup de personnes assez obscure. Et pourtant, au delĂ des API existantes, il en existe une qui permet trĂšs facilement de 'requĂȘter' la base afin d'obtenir les entitĂ©s voulues.
L'API OpentreetMap v0.6#
L'API principale (que j'aurais plutĂŽt nommĂ©e protocole) d'OpenStreeMap est une Web API (type RESTful). Pour faire simple, cela signifie que les requĂȘte vont s'appuyer sur le protocole HTTP pour dialoguer avec le serveur. Si cette notion est totalement nouvelle pour vous, je vous conseille la lecture de l'excellent blog BioloGeek . Pour en revenir Ă XAPI, nous disions donc qu'elle permet d'interroger, via une URL, le serveur contenant les donnĂ©es afin d'effectuer toutes sortes d'opĂ©rations :
- ajout d'objets
- modification d'objets
- suppression d'objets
Ces opérations entrainant des modifications dans la base, il est donc nécessaire de s'authentifier avant toutes actions. C'est d'ailleurs ce que vous faites quand vous utilisez des outils tels que JOSM et Potlatch. Pour plus de facilité, l'API d'OSM a été traduite dans différents langages de programmation tels que Ruby, Java ou encore Python. Je n'ai rien trouvé concernant une implémentation PHP mais cela doit, trÚs certainement, exister.
L'authentification peut paraitre un peu compliquĂ©e et surtout superflue si vous souhaitez simplement tĂ©lĂ©charger quelques donnĂ©es sur une zone prĂ©cise. C'est pourquoi il existe une API simplifiĂ©e, XAPI, qui permet d'interroger la base de donnĂ©es via une simple requĂȘte URL.
La XAPI ... zappy#
Cette API, ne fonctionne qu'en lecture seule. Vous ne pourrez rĂ©aliser aucune modification sur la base. Ăa tombe bien, c'est ce que nous souhaitons faire ici.
Les serveurs#
La XAPI tourne sur plusieurs serveurs différents, il est donc possible d'interroger la base de données sur ces derniers :
- http://xapi.openstreetmap.org/api/0.6
- http://osmxapi.hypercube.telascience.org/api/0.6
- http://osm.bearstech.com/osmxapi/api/0.6
Cependant ces serveurs ne sont pas toujours en trĂšs grande forme. C'est pourquoi la rĂ©ponse Ă une requĂȘte peut parfois ĂȘtre trĂšs longue. Mais rassurez-vous, lĂ encore, cela est plutĂŽt bien fait. En effet, InformationFreeway redirige la requĂȘte vers le serveur appropriĂ© : le dĂ©but de la requĂȘte sera alors le suivant : http://www.informationfreeway.org/api/0.6.
La construction d'une requĂȘte#
Une requĂȘte est donc une simple URL bien formatĂ©e qui nous retournera un fichier XML. Celle-ci doit contenir les diffĂ©rents Ă©lĂ©ments ci-dessous :
Bounding box#
Tout d'abord il convient de définir l'emprise géographique. Pour des raisons évidentes de charge serveur, une limitation a été instaurée :
- l'API normale avec authentification n'autorise une emprise géographique que de 0.25 degré carré.
- la XAPI, elle, permet une zone bien plus large : 100 degrĂ©s carrĂ© soit environ 788 000 kmÂČ Ă une latitude de 48° - Ă peu prĂšs Paris.
La définition de l'emprise s'écrit donc de cette façon :
GET /api/0.6/map?bbox=left,bottom,right,top
- left = longitude ouest
- bottom = latitude nord
- right = longitude est
- top = latitude sud
Si vous ne connaissez pas l'étendue géographique de la zone que vous désirez intérroger, je vous renvoie vers l'astuce donnée sur le blog weait. Vous y trouverez tous les renseignements nécessaires.
Cette requĂȘte est Ă©quivalente Ă celle-ci - que nous prĂ©fĂšrerons par la suite parce qu'elle permet de 'poser' des questions sur les entitĂ©s :
GET /api/0.6/*[bbox=left,bottom,right,top]
Les objets#
OpenStreetMap propose 3 types d'entités : les noeuds, les chemins et les relations - cf. ici
- Les noeuds sont des points.
- Les chemins sont des groupes de noeuds.
- Les relations sont composées de chemins et de noeuds ayant des rÎles.
Les noeuds#
Pour récupérer des noeuds sur une zone prédéfinie, ce n'est pas trÚs compliqué :
GET /api/0.6/node[amenity=pub][bbox=left,bottom,right,top]
Notons que le principal tag des noeuds est amenity qui permet de spécifier le type du noeud. Voir la liste des valeurs principales.
Les ways#
Pour les chemins, c'est la mĂȘme structure :
GET /api/0.6/way[admin_level=8][bbox=left,bottom,right,top]
Pour avoir les limites administratives de niveau 8 - les communes - sur la zone demandée.
Les relations#
GET /api/0.6/relation[landuse=residential][bbox=left,bottom,right,top]
Pour les zones résidentielles.
Voici la liste complĂšte des tags utilisĂ©s dans OSM. Evidemment cette liste n'est pas arrĂȘtĂ©e, il est possible d'en proposer des nouveaux.
Il est possible aussi de voir la liste actualisée des relations en France grùce à Tagwatch.
Note : il est malheureusement impossible pour le moment de 'demander' un objet ou un autre objet - le OR n'existe pas - il faut faire plusieurs requĂȘtes.
Démonstration#
Un petit exemple sur Toulouse en affichant les positions des toilettes présentes dans la base de données.
Ici nous avons utilisé la classe Strategy Cluster d'OpenLayers pour représenter les données - cherchez un peu sur le site pour voir comment cette derniÚre fonctionne :-)
Info
Le serveur hébergeant la démonstration n'étant plus disponible depuis de nombreuses années, la démonstration, autre fois intégrée en iFrame est désactivée.
<iframe src="http://88.191.39.115/fabien/geotribu/application/osm/xapi" height="400px" width="640px"></iframe>
Auteur·ice#
L'équipe Geotribu#
Toute l'actualité de la géomatique Open Source ! Mais aussi des tutoriels, des billets de blog, des tests et surtout une bonne humeur géographique !
Commentaires
Une version minimale de la syntaxe markdown est acceptée pour la mise en forme des commentaires.
Propulsé par Isso.
Ce contenu est sous licence Creative Commons BY-NC-SA 4.0 International