Je dois utiliser les routes pour comparer les positions GPS pour vérifier qu'il n'y a pas d'erreurs dans les données.
J'ai téléchargé le map.osm à partir d'un site contenant des informations sur la ville de Rome et je l'ai transformé en lignes spatiales 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")
Donc, avec l'objet Lignes spatiales, j'ai essayé d'utiliser la fonction distm mais on l'accuse que l'objet spatial ne peut pas être utilisé (il n'est pas dans un format approprié).
Il existe un autre moyen d'utiliser OSM pour obtenir des informations sur les routes uniquement que je peux comparer avec les données GPS dans R?
distm
fonction? Pouvez-vous montrer ce que vous avez essayé et le message d'erreur? Essayez-vous de calculer les distances de certains points au point le plus proche sur le réseau routier?distm
est une fonction de la géosphère du package dans R, il calcule la distance entre point à point ou point à objet spatial, renvoyant une matrice dans le second cas. `a <- distm (c (taxi $ lat [1], taxi $ lon [1]), hw_lines, fun = distHaversine)` L'erreur indique "Erreur dans .pointsToMatrix (y): les points doivent être des vecteurs de longueur 2, matrices à 2 colonnes, ou héritant d'un objet SpatialPoints * ".as_sp
du package osmar convertit l'objet OSM chargé en objet spatial.> class(hw_lines)
[1] "SpatialLinesDataFrame"
attr(,"package")
[1] "sp"
Réponses:
J'ai téléchargé un ensemble de données de la ville de Rome en utilisant le
osmar
package. Après cela, j'ai suivi votre requête pour obtenir les autoroutes souhaitées , puis j'ai construit un objet SpatialPoints aléatoire à l' intérieur des données récupérées de la boîte englobante de Rome. J'ai mesuré les distances entre les points et les lignes en utilisant la fonctiondist2line
dugeosphere
package.Veuillez essayer le code ci-dessous:
la source
api <- osmsource_api()
mais ils ont dit que la bbox avait trop de points alors j'ai essayé de télécharger un fichier .osm. J'ai utilisé rome.osm de http://metro.teczno.com/#rome . Je ne comprends pas, dans https://en.wikipedia.org/wiki/Rome dit que les coordonnées de Rome sont 41 ° 54′N 12 ° 30′E et dans OSM Rome dit qu'il est 41 ° 889'N 12 ° 48 ' E, mais vous avez utilisé des coordonnées différentes pour votre rome.box.get_osm()
avoir un système de coordonnées différent?mapview
ne fonctionnait pas car nos routines Rcpp ne prenaient pas en charge les objets 'POSIX *'. Quoi qu'il en soit, le problème est résolu maintenant sur la branche de développement de GitHub et sera disponible avec la prochaine mise à jour officielle sur CRAN.get_osm(rome.box, source = api)
disantSpace required after the Public Identifier
. Il y a un lien de réponse ici sur la façon de le réparer.