Ich muss die Straßen verwenden, um GPS-Positionen zu vergleichen, um sicherzustellen, dass sie keine Fehler in den Daten sind.
Ich habe die map.osm von einer Site heruntergeladen, die Informationen über die Stadt Rom enthält, und sie in R in Spatial Lines umgewandelt.
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")
Also habe ich mit dem Spatial Lines Object versucht, die distm-Funktion zu verwenden, aber es wird beschuldigt, dass das Spatial Object nicht verwendet werden kann (nicht in einem geeigneten Format).
Gibt es eine andere Möglichkeit, mit OSM nur Informationen zu Straßen abzurufen, die ich mit GPS-Daten in R vergleichen kann?
distm
Funktion? Können Sie zeigen, was Sie versucht haben und die Fehlermeldung? Versuchen Sie, Entfernungen von einigen Punkten zum nächsten Punkt im Straßennetz zu berechnen?distm
ist eine Funktion aus der Paketgeosphäre in R, berechnet die Entfernung zwischen Punkt zu Punkt oder Punkt zum Raumobjekt und gibt im zweiten Fall eine Matrix zurück. `a <- distm (c (Taxi $ lat [1], Taxi $ lon [1]), hw_lines, fun = distHaversine)` Der Fehler lautet "Fehler in .pointsToMatrix (y): Punkte sollten Vektoren der Länge 2 sein, Matrizen mit 2 Spalten oder Erben von einem SpatialPoints * -Objekt ".as_sp
aus dem osmar-Paket konvertieren Sie das geladene OSM-Objekt in ein räumliches Objekt.> class(hw_lines)
[1] "SpatialLinesDataFrame"
attr(,"package")
[1] "sp"
Antworten:
Ich habe mit dem
osmar
Paket einen Datensatz aus der Stadt Rom heruntergeladen . Danach folgte ich Ihrer Anfrage, um die gewünschten Autobahnen zu erhalten und dann ein zufälliges SpatialPoints- Objekt innerhalb des Rom-Begrenzungsrahmens zu erstellen , in dem Daten abgerufen wurden. Ich habe Entfernungen zwischen Punkten und Linien mit der Funktiondist2line
aus demgeosphere
Paket gemessen .Bitte versuchen Sie den folgenden Code:
quelle
api <- osmsource_api()
aber sie sagten, dass die bbox zu viele Punkte hat, also habe ich versucht, eine .osm-Datei herunterzuladen. Ich habe rome.osm von http://metro.teczno.com/#rome verwendet . Ich verstehe nicht, in https://en.wikipedia.org/wiki/Rome heißt es, dass die Rom-Koordinaten 41 ° 54'N 12 ° 30'E sind und in OSM sagt Rom 41 ° 889'N 12 ° 48 ' E, aber Sie haben andere Koordinaten für Ihre rome.box verwendet.get_osm()
Haben Sie ein anderes Koordinatensystem?mapview
nicht funktioniert hat, da unsere Rcpp- Routinen keine POSIX * -Objekte unterstützen. Wie auch immer, das Problem ist jetzt im GitHub-Entwicklungszweig behoben und wird mit dem nächsten offiziellen Update auf CRAN verfügbar sein.get_osm(rome.box, source = api)
SprichwortsSpace required after the Public Identifier
. Es gibt eine Antwort hier Link auf , wie es zu beheben.