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?
distm
fungsinya? Bisakah Anda menunjukkan apa yang Anda coba dan pesan kesalahan? Apakah Anda mencoba menghitung jarak dari beberapa titik ke titik terdekat di jaringan jalan?distm
adalah 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_sp
dari paket osmar, konversikan objek OSM yang dimuat ke Objek Spasial.> class(hw_lines)
[1] "SpatialLinesDataFrame"
attr(,"package")
[1] "sp"
Jawaban:
Saya mengunduh dataset dari Kota Roma menggunakan
osmar
paket. 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 fungsidist2line
darigeosphere
paket.Silakan coba kode di bawah ini:
sumber
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?mapview
tidak 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.get_osm(rome.box, source = api)
mengatakanSpace required after the Public Identifier
. Ada jawaban di sini tautan tentang cara memperbaikinya.