Une carte des stations Vélo’V avec R (Partie 3 : Participer à OpenStreetMap)

Une carte des stations Vélo’V avec R (Partie 3 : Participer à OpenStreetMap)

OpenStreetMap est un formidable projet de cartographie collaborative en ligne. Dans deux précédents billets (ici et ) nous avons vu comment importer des données en provenance d’OSM dans R et un exemple (parmi une infinité) de traitement et de rendu cartographique. Mais les données que nous avons utilisées n’étaient pas vraiment complètes. Là où réside tout l’intérêt d’OSM c’est que tout le monde peut intervenir en complétant la base de donnée sur la base de ses propres connaissances, d’une sortie terrain ou encore avec l’imagerie satellite fournie par Bing.

Dans notre cas toutes les stations Vélo’V de la ville de Lyon ont déjà été localisé par les cartographes d’OSM mais pour un certain nombre d’entre elles les tags associés ne sont pas assez informatifs. On s’est par exemple intéressé à la capacité des stations (i.e. le nombre de vélos que l’on peut y garer) qui est renseignée dans la base de données avec le tag capacity. A l’heure où j’écris ces lignes – et cette précision est importante car les choses vont très vite sur OSM – la capacité est indisponible pour 87 stations. Il pourrait alors être intéressant de produire une carte de ces stations « incomplètes » pour optimiser le travail de terrain. Une carte statique comme on en a produit jusqu’à présent n’est pas idéale. L’idée ici est d’utiliser l’outil Google Maps qui permet d’une part d’accéder à une carte interactive mais aussi d’ajouter des points d’intérêts définis par l’utilisateur et accessoirement de profiter d’un module GPS.

Google Maps peut être très pratique pour s'orienter sur le terrain et localiser des éléments à cartographier

Dans ce billet, on réalisait l’importation des données à partir d’une extraction de la base téléchargée sur geofabrik mais dans le cas présent cette méthode se révèle lourde car il faudra re-télécharger le fichier à chaque fois qu’on voudra mettre à jour la carte. Ici il est plus intéressant de faire appel à une API pour extraire directement les données qui nous intéressent. J’utilise ici l’Overpass API, j’en ai essayé d’autre mais elles sont soit très peu réactives, soit HS, soit non à jour… Pour ce qui est du code on charge d’abord les données avec RCurl puis on parse le XML. Si les choses étaient simples on pourrait directement interpréter le XML avec la fonction as_osmar mais les API retournent souvent les objets en leur enlevant certains attributs ce qui pose problème à la fonction as_osmar. Une solution simple ici est de créer artificiellement les attributs manquants. Une fois l’objet converti au format sp, on exporte les données au format KML.

library(osmar)
library(sp)
library (XML)
library(rgdal)
osm.xml <- getURL("http://overpass-api.de/api/interpreter?data=node[amenity=bicycle_rental](45.64,4.57,45.86,5.12);out;", .encoding="UTF-8")
osm.xml <- xmlParse(osm.xml)
xmlSApply(xmlRoot(osm.xml), addAttributes,
"version"=1,
"timestamp"="2000-01-01T01:01:01Z",
"uid"=1,
"user"="a",
"changeset"=1)

stations <- as_osmar(osm.xml)
stations <-addtags(stations)
stations <- as_sp(stations, what="points")
stations$capacity <- as.numeric(as.character(stations@data$capacity))
stations.fix <- stations[which(stations$capacity==0 | is.na(stations$capacity)),]
writeOGR(stations.fix[,-5], dsn="stafix.kml", layer= "stations", driver="KML")

Il s’agit maintenant d’ouvrir le fichier KML avec Google Maps. Pour cela, il faut héberger son fichier KML soit sur votre propre serveur, soit à l’aide d’un service comme Google Sites. Ne reste plus qu’à ouvrir l’URL dans Google Maps et récupérer un lien abrégé pour retrouver sa carte sur n’importe quel appareil capable d’afficher Google Maps. Bien sur les données ne sont pas mises à jour de façon dynamique mais cette méthode a l’avantage d’être relativement simple et rapide à mettre en place.

Facebooktwitter

Laisser un commentaire

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