Acceder a OSM primero cargamos la Libreria OSMAR luego nos conectamos con la API de OSM y obtenemos un area con la funcion center_bbox
library(osmar)
## Loading required package: XML
## Loading required package: RCurl
## Loading required package: bitops
## Loading required package: geosphere
##
## Attaching package: 'osmar'
## The following object is masked from 'package:utils':
##
## find
src <- osmsource_api(url = "https://api.openstreetmap.org/api/0.6/")
bb <- center_bbox(-58.8429093, -27.469345, 1500, 1500)
centro <- get_osm(bb, source = src)
centro
## osmar object
## 3195 nodes, 808 ways, 73 relations
plot(centro)
summary(centro$nodes)
## osmar$nodes object
## 3195 nodes, 8515 tags
##
## ..$attrs data.frame:
## id, visible, timestamp, version, changeset, user, uid, lat,
## lon
## ..$tags data.frame:
## id, k, v
##
## Bounding box:
## lat lon
## min -27.48671 -58.85683
## max -27.45575 -58.81562
##
## Key-Value contingency table:
## Key Value Freq
## 1 addr:postcode 3400 1273
## 2 addr:city Corrientes 1266
## 3 addr:country AR 1200
## 4 addr:state Corrientes 1194
## 5 addr:street Bolivar 65
## 6 addr:street Belgrano 61
## 7 addr:street Moreno 56
## 8 highway traffic_signals 55
## 9 addr:street La Rioja 54
## 10 addr:street Hipolito Yrigoyen 53
summary(centro$way)
## osmar$ways object
## 808 ways, 2226 tags, 3334 refs
##
## ..$attrs data.frame:
## id, visible, timestamp, version, changeset, user, uid
## ..$tags data.frame:
## id, k, v
## ..$refs data.frame:
## id, ref
##
## Key-Value contingency table:
## Key Value Freq
## 1 addr:inclusion actual 601
## 2 addr:interpolation odd 301
## 3 addr:interpolation even 299
## 4 oneway yes 129
## 5 surface paved 91
## 6 highway residential 84
## 7 maxspeed 40 59
## 8 addr:postcode 3400 47
## 9 addr:city Corrientes 45
## 10 maxspeed 60 43
Selecciono los nodos que son traffic_signals
ts_ids <- find(centro, node(tags(v == "traffic_signals")))
ts_ids
## [1] 638725881 2303351858 2286347269 3160246664 639588451 638725917
## [7] 639276201 639234468 1227482063 639234466 638727671 639552743
## [13] 639234622 639552739 639552735 639552734 638726021 2255971748
## [19] 2255971750 1243935379 2286347267 3481512227 3481512226 3481512225
## [25] 2412369511 2412369512 1227482045 1243935377 2255971770 639284047
## [31] 2412369515 639557423 1227482050 2302887900 2286347270 1227482065
## [37] 1227482053 3481512228 639557425 2861027741 639545207 638731185
## [43] 2826659897 3481512224 638726014 638728144 638731271 2256066281
## [49] 2704378808 1227482041 2258998525 1227482047 639557447 639565909
## [55] 3481512229
El resultado es un vector con ID de nodo (en este caso, 55 nodos de señal de tráfico) o desconocido, los operadores binarios definidos # % agrep% para las coincidencias aproximadas (ver ?agrep) y % grep% para coincide con el patrón (ver ?grepl)
bs_ids <- find(centro, node(tags(v %agrep% "busstop")))
bs_ids
## [1] 4649774612 4649774613 4649774614 4649774615 4649774640 4654056280
## [7] 4654056281 4654994144 4654994143 4654994145 4654994147 4654994148
## [13] 4654994149 4654994150 4654994152 4654994153 4654994154 4654994158
## [19] 4654994159 4654994160 4654994162 4654994165 2335718632 4456298627
## [25] 4456304251 4456305995 4456306672 4456311189 4456311213 4573730535
## [31] 4717799354 4654994161 4573699533 4573693769 4649774618 4649774619
## [37] 5002387598 5045493903 5045493904 5415318321 4654994156 4654994157
## [43] 5654724052 4456297824
node<—–way<——relation
centro$ways
## osmar$ways object
## 808 ways, 2226 tags, 3334 refs
hw_ids <- find(centro, way(tags(k == "highway")))
hw_ids <- find_down(centro, way(hw_ids))
Estas dos funciones nos permiten encontrar los elementos relacionados arriba y abajo de la jerarquía. por ejemplo,fin_up() en un nodo devuelve todos los nodos, ways y relaciones relacionadas; find_down() en un nodo devuelve solo el nodo.
str(hw_ids)
## List of 3
## $ node_ids : num [1:1137] 2.26e+09 2.56e+08 4.54e+09 4.54e+09 4.24e+08 ...
## $ way_ids : num [1:144] 2.21e+08 5.02e+07 2.16e+08 1.28e+08 2.16e+08 ...
## $ relation_ids: NULL
Subset:El valor de retorno de las funciones de búsqueda se puede usar para crear subconjuntos de objetos Osmar.Los metodos de subset() para objetos de OSMAR, tomo los ID’s y devuelve datos como un objeto de OSMAR. Por ejemplo, los dos subconjuntos basados en los ID´s de señal de tráfico y de parada de autobús son:
ts <- subset(centro, node_ids = ts_ids)
ts
## osmar object
## 55 nodes, 0 ways, 0 relations
bs <- subset(centro, node_ids = bs_ids)
bs
## osmar object
## 44 nodes, 0 ways, 0 relations
hw <- subset(centro, ids = hw_ids)
hw
## osmar object
## 1137 nodes, 144 ways, 0 relations
Ahora el Grafico
plot(centro)
plot_ways(hw, add = TRUE, col = "green")
plot_nodes(ts, add = TRUE, col = "red")
plot_nodes(bs, add = TRUE, col = "blue")
title("Corrientes-Análisis de POI")
Mail:jmourglia@gmail.com Twiter: @yeyomourglia