8 votos

¿Cómo puedo utilizar las carreteras de los datos de OSM en R?

Necesito utilizar las carreteras para comparar las posiciones del GPS y verificar que no hay errores en los datos.

He descargado el map.osm de un sitio que tiene información de la ciudad de Roma y lo he transformado en líneas espaciales 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")  

Así que con el objeto de líneas espaciales traté de usar la función distm pero se acusa que el objeto espacial no puede ser usado (no está en un formato adecuado).

¿Existe otra forma de utilizar OSM para obtener información sólo de carreteras que pueda comparar con los datos del GPS en R?

7voto

Chris McKee Puntos 1133

He descargado un conjunto de datos de la ciudad de Roma utilizando el osmar paquete. Después de eso, seguí su consulta para obtener el deseado carreteras y luego construir un SpatialPoints dentro del cuadro delimitador de Roma recuperó los datos. Medí las distancias entre puntos y líneas utilizando la función dist2line de la geosphere paquete.

Por favor, pruebe el siguiente código:

# Load libraries
library('osmar')
library('geosphere')

# Define the spatial extend of the OSM data we want to retrieve
rome.box <- center_bbox(center_lon = 12.5450, center_lat = 41.8992, width =  2000, height = 2000)

# Download all osm data inside this area
api <- osmsource_api()
rome <- get_osm(rome.box, source = api)

# General plot
plot(rome)

# Find highways
ways <- find(rome, way(tags(k == "highway")))
ways <- find_down(rome, way(ways))
ways <- subset(rome, ids = ways)

# SpatialLinesDataFrame object
hw_lines <- as_sp(ways, "lines")  

# Plot
spplot(hw_lines, zcol = "uid")

# Interactive view
mapview::mapview(hw_lines) 

# Make a random points dataset (like GPS)
gpsPoints <- spsample(x = hw_lines, n = 100, type = "random")

# Plot points
plot(hw_lines, xlab = "Lon", ylab = "Lat")
plot(gpsPoints, add = TRUE, pch = 19, col = "red")
box()

# Distances between Higways and random points
distances <- dist2Line(p = gpsPoints, line = hw_lines)

romehighways

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X