Bagaimana saya bisa menggunakan jalan dari data OSM di R?


8

Saya perlu menggunakan jalan untuk membandingkan posisi GPS untuk memverifikasi bahwa tidak ada kesalahan dalam data.

Saya mengunduh map.osm dari situs yang memiliki informasi Kota Roma dan mengubahnya menjadi Garis Spasial di 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")  

Jadi dengan Objek Garis Spasial saya mencoba menggunakan fungsi distm tetapi dituduh bahwa objek spasial tidak dapat digunakan (tidak dalam format yang sesuai).

Ada cara lain menggunakan OSM untuk mendapatkan informasi hanya jalan yang bisa saya bandingkan dengan data GPS di R?


1
Apa distmfungsinya? Bisakah Anda menunjukkan apa yang Anda coba dan pesan kesalahan? Apakah Anda mencoba menghitung jarak dari beberapa titik ke titik terdekat di jaringan jalan?
Spacedman

distmadalah fungsi dari paket geosphere dalam R, ini menghitung jarak antara titik ke titik atau titik ke Objek Spasial, mengembalikan matriks dalam kasus kedua. `a <- distm (c (taksi $ lat [1], taksi $ lon [1]), hw_lines, fun = distHaversine)` Kesalahan tersebut mengatakan "Kesalahan dalam .pointsToMatrix (y): poin harus berupa vektor dengan panjang 2, matriks dengan 2 kolom, atau mewarisi dari objek SpatialPoints * ". as_spdari paket osmar, konversikan objek OSM yang dimuat ke Objek Spasial. > class(hw_lines) [1] "SpatialLinesDataFrame" attr(,"package") [1] "sp"
Fabio Jojima

Jawaban:


7

Saya mengunduh dataset dari Kota Roma menggunakan osmarpaket. Setelah itu, saya mengikuti permintaan Anda untuk mendapatkan jalan raya yang diinginkan dan kemudian membangun objek SpatialPoints acak di dalam kotak pembatas Roma mengambil data. Saya mengukur jarak antara titik dan garis menggunakan fungsi dist2linedari geospherepaket.

Silakan coba kode di bawah ini:

# 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)

jalan raya


Saya mencoba menggunakan api <- osmsource_api()tetapi mereka mengatakan bahwa bbox memiliki terlalu banyak poin jadi saya mencoba mengunduh file .osm. Saya telah menggunakan rome.osm dari http://metro.teczno.com/#rome . Saya tidak mengerti, di https://en.wikipedia.org/wiki/Rome mengatakan bahwa koordinat Roma adalah 41 ° 54′N 12 ° 30′E dan di OSM Roma mengatakan itu 41 ° 889'N 12 ° 48 ' E, namun Anda menggunakan koordinat yang berbeda untuk rome.box Anda. get_osm()punya sistem koordinat yang berbeda?
Fabio Jojima

@FabioJojima Maaf, Itu kesalahan! Saya menemukan "Roma" sebagai kota di AS! Saya memperbarui jawabannya. Silakan periksa apakah sekarang jawab pertanyaan Anda!
Guzmán

1
Saya menemukan bahwa panggilan opsional untuk mapviewtidak berfungsi karena rutinitas Rcpp kami tidak mendukung objek 'POSIX *'. Bagaimanapun, masalah ini diselesaikan sekarang di cabang pengembangan GitHub dan akan tersedia dengan pembaruan resmi berikutnya pada CRAN.
fdetsch

1
Saya mendapatkan error mengeksekusi get_osm(rome.box, source = api)mengatakan Space required after the Public Identifier. Ada jawaban di sini tautan tentang cara memperbaikinya.
Jesper Hybel
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.