L'API ne permet d'accéder :

  • soit à des objets dont on connait l'identifiant (node, way, relation, changeset) ;
  • soit à tous les objets contenus dans une zone définie (bbox)

Outre ce système d'accès restreint en termes de fonctionnalité, il n'est pas possible de télécharger plus d'une certaine masse d'information à partir des serveurs. Sans qu'aucune limite ne soit précisée, il n'est pas envisageable de récupérer les données d'une ville telle que Nantes par exemple.

J'avais pour objectif d'obtenir la liste de tous les arrêts de bus, de tramway ainsi que toutes les lignes de Bus et de Tramway de la ville de Nantes.

J'ai commencé à développer un script Python basé sur OsmApi, mais j'ai rapidement dû me faire à l'idée que je ne pourrai pas atteindre cet objectif étant donné les limitations de l'API sus-citées. Alors que faire ?

L'XAPI offre un système de filtrage des objets lors de requêtes qui permet de passer outre les limitations de taille des données en ne récupérant que ce qui nous intéresse. Soit dans mon cas :

  • les nœuds correspondant à des arrêts de bus ou des arrêts de tramway -> il s'agit des nœuds possédant un tag highway=bus_stop ou bien railway=tram_stop
  • les relations correspondant à des lignes de bus ou des lignes de tramway -> il s'agit des relations possédant un tag route=bus ou bien route=tram

En sachant que je limite mes requêtes à la seule ville de Nantes. Je réduits donc grosso modo mes requêtes à la bbox de coordonnées -1.65,47.15,-1.45,47.28.

Une fois ces données identifiées il me suffit d'envoyer les requêtes XAPI adaptées :

  • pour les arrêts de bus : http://www.informationfreeway.org/api/0.6/node[highway=bus_stop][bbox=-1.65,47.15,-1.45,47.28]
  • pour les arrêts de tram : http://www.informationfreeway.org/api/0.6/node[railway=tram_stop][bbox=-1.65,47.15,-1.45,47.28]
  • pour les lignes de bus : http://www.informationfreeway.org/api/0.6/relation[route=bus][bbox=-1.65,47.15,-1.45,47.28]
  • pour les lignes de tram : http://www.informationfreeway.org/api/0.6/relation[route=tram][bbox=-1.65,47.15,-1.45,47.28]

De plus j'ai la bonne surprise de découvrir que lors des requêtes sur les relations, la réponse inclue les nodes et les ways qui les constituent. En d'autres termes les deux premières requêtes de récupération des arrêts deviennent inutiles, sous réserve de la correction des relations.

À l'aide d'OsmApi, dont je décrirai l'utilisation dans un prochain billet, j'ai ainsi été en mesure d'extraire la liste des arrêts de bus et de tramway de la ville de Nantes.