Billet

Osmar : manipuler des données OpenStreetMap avec R

Billet publié le 15/12/2012

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)

Created by Pretty R at inside-R.org

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 […]