Necesito usar las carreteras para comparar las posiciones de GPS para verificar que no haya errores en los datos.
Descargué el map.osm de un sitio que tiene información de la ciudad de Roma y lo transformé en Spatial Lines en R.
src <- osmsource_file(file = "rome.osm")
bb <- center_bbox(41.9, 12.3, 1000, 1000)
rome <- get_osm(bb, src)
ways <- find(rome, way(tags(k == "highway")))
ways <- find_down(rome, way(ways))
ways <- subset(rome, ids = ways)
hw_lines <- as_sp(ways, "lines")
Entonces, con el objeto Spatial Lines intenté usar la función distm pero se acusa de que el objeto espacial no se puede usar (no está en un formato adecuado).
¿Hay otra forma de usar OSM para obtener información de solo carreteras que puedo comparar con datos de GPS en R?
distm
función? ¿Puedes mostrar lo que intentaste y el mensaje de error? ¿Está tratando de calcular distancias desde algunos puntos hasta el punto más cercano en la red de carreteras?distm
es una función de la geosfera de paquete en R, calcula la distancia entre un punto a otro o un punto a un objeto espacial, devolviendo una matriz en el segundo caso. `a <- distm (c (taxi $ lat [1], taxi $ lon [1]), hw_lines, fun = distHaversine)` El error dice "Error en .pointsToMatrix (y): los puntos deben ser vectores de longitud 2, matrices con 2 columnas, o heredando de un objeto SpatialPoints * ".as_sp
del paquete osmar convierte el objeto OSM cargado en un objeto espacial.> class(hw_lines)
[1] "SpatialLinesDataFrame"
attr(,"package")
[1] "sp"
Respuestas:
Descargué un conjunto de datos de la ciudad de Roma usando el
osmar
paquete. Después de eso, seguí su consulta para obtener las carreteras deseadas y luego construí un objeto SpatialPoints aleatorio dentro de los datos recuperados del cuadro delimitador de Roma. Medí distancias entre puntos y líneas usando la funcióndist2line
delgeosphere
paquete.Por favor, intente el siguiente código:
fuente
api <- osmsource_api()
pero dijeron que el bbox tiene demasiados puntos, así que intenté descargar un archivo .osm. He usado rome.osm de http://metro.teczno.com/#rome . No entiendo, en https://en.wikipedia.org/wiki/Rome dice que las coordenadas de Roma son 41 ° 54′N 12 ° 30′E y en OSM Roma dice que es 41 ° 889'N 12 ° 48 ' E, sin embargo, usaste coordenadas diferentes para tu rome.box.get_osm()
tiene un sistema de coordenadas diferente?mapview
no funcionaba porque nuestras rutinas Rcpp no admitían objetos 'POSIX *'. De todos modos, el problema se resuelve ahora en la rama de desarrollo de GitHub y estará disponible con la próxima actualización oficial en CRAN.get_osm(rome.box, source = api)
dichoSpace required after the Public Identifier
. Hay una respuesta aquí enlace sobre cómo solucionarlo.