Osmar : manipuler des données OpenStreetMap avec R
Billet publié le 15/12/2012
[yarpp]
Il y a parfois un intérêt certain à créer des cartes dans un format vectoriel. Je vais ici utiliser le paquet “osmar”, qui permet d’utiliser des données en provenance d’OpenStreetMap, avec le logiciel R.
cliquez pour ouvrir la carte au format pdf
Pour réaliser cette carte, j’ai suivi les instructions présentées dans ce document osmar: OpenStreetMap and R, by Manuel J. A. Eugster and Thomas Schlesinger.
Pourquoi passer par osmar ? L’on trouve des shapefiles extraits de OpenStreetMap sur différents sites (comme cloudmade), mais ces shapefiles commencent à être très lourds, et ils ne contiennent qu’une partie des informations disponibles sur OpenStreetMap.
install.package(osmar) library(osmar) src <- osmsource_api() bb <- center_bbox(3.0775880813598633,50.37404355240673, 1000, 1000) ua <- get_osm(bb, source = src) #tracer les bâtiments bg_ids <- find(ua, way(tags(k == "building"))) bg_ids <- find_down(ua, way(bg_ids)) bg <- subset(ua, ids = bg_ids) bg_poly <- as_sp(bg, "polygons") plot(bg_poly, col = "gray",border="gray") #tracer une zone "commerciale" nat_ids <- find(ua, way(tags(v %in% c("commercial")))) nat_ids <- find_down(ua, way(nat_ids)) nat <- subset(ua, ids = nat_ids) nat_poly <- as_sp(nat, "polygons") plot(nat_poly, col = "#ffaaaa11",add=TRUE,border="#ffffff00") #tracer les cours d'eau nat_ids <- find(ua, way(tags(k %in% c("waterway")))) nat_ids <- find_down(ua, way(nat_ids)) nat <- subset(ua, ids = nat_ids) nat_poly <- as_sp(nat, "polygons") plot(nat_poly, col = "#aaaaff",add=TRUE,border="#aaaaff",lwd=2) #tracer les parcs nat_ids <- find(ua, way(tags(k %in% c("leisure")))) nat_ids <- find_down(ua, way(nat_ids)) nat <- subset(ua, ids = nat_ids) nat_poly <- as_sp(nat, "polygons") plot(nat_poly, col = "#99dd99",add=TRUE,border="#99dd99") #tracer les rues, de différentes épaisseurs cw_ids <- find(ua, way(tags(v %in% c("residential","pedestrian")))) cw_ids <- find_down(ua, way(cw_ids)) cw <- subset(ua, ids = cw_ids) cw_line <- as_sp(cw, "lines") plot(cw_line, add = TRUE, col = "pink",lwd=1) cw_ids <- find(ua, way(tags(v %in% c("secondary")))) cw_ids <- find_down(ua, way(cw_ids)) cw <- subset(ua, ids = cw_ids) cw_line <- as_sp(cw, "lines") plot(cw_line, add = TRUE, col = "pink",lwd=5) cw_ids <- find(ua, way(tags(v %in% c("tertiary")))) cw_ids <- find_down(ua, way(cw_ids)) cw <- subset(ua, ids = cw_ids) cw_line <- as_sp(cw, "lines") plot(cw_line, add = TRUE, col = "pink",lwd=3)
3 commentaires
Un commentaire par Joël (15/12/2012 à 23:44)
Merci, très intéressant ! Par contre, comment fait-on pour connaître les coordonnées d’une zone qui nous intéresse ? Il y a un outil pour ça ?
Un commentaire par Baptiste Coulmont (16/12/2012 à 9:47)
> Joël : il y a http://www.getlatlon.com qui est fort utile.
Un commentaire par l'aménagerie » Blog Archive » #R et #OpenStreetMap avec #osmar (22/10/2013 à 18:03)
[…] boulangerie dans un désert (s’il en est). J’ai don trouvé une ressource sur le blog de Baptiste Coulmont, que j’ai cherché à adapter pour mes […]