Preciso usar as estradas para comparar as posições do GPS e verificar se não há erros nos dados.
Eu baixei o map.osm de um site que tinha informações da cidade de Roma e o transformou em Spatial Lines in 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")
Então, com o Objeto de Linhas Espaciais, tentei usar a função distm, mas é acusado de que o objeto espacial não pode ser usado (não está em um formato adequado).
Existe outra maneira de usar o OSM para obter informações apenas de estradas que eu posso comparar com dados de GPS no R?
distm
função? Você pode mostrar o que tentou e a mensagem de erro? Você está tentando calcular distâncias de alguns pontos até o ponto mais próximo na rede rodoviária?distm
é uma função da geosfera do pacote em R, calcula a distância entre ponto a ponto ou ponto para Objeto Espacial, retornando uma matriz no segundo caso. `a <- distm (c (taxi $ lat [1], taxi $ lon [1]), hw_lines, fun = distHaversine)` O erro diz "Erro em .pointsToMatrix (y): os pontos devem ser vetores de comprimento 2, matrizes com 2 colunas ou herdadas de um objeto SpatialPoints * ".as_sp
do pacote osmar converte o objeto OSM carregado em um objeto espacial.> class(hw_lines)
[1] "SpatialLinesDataFrame"
attr(,"package")
[1] "sp"
Respostas:
Eu baixei um conjunto de dados da cidade de Roma usando o
osmar
pacote. Depois disso, segui sua consulta para obter as rodovias desejadas e depois construir um objeto SpatialPoints aleatório dentro dos dados recuperados da caixa delimitadora de Roma. Eu medi distâncias entre pontos e linhas usando a funçãodist2line
dogeosphere
pacote.Por favor, tente o código abaixo:
fonte
api <- osmsource_api()
mas eles disseram que o bbox tem muitos pontos, então tentei baixar um arquivo .osm. Eu usei rome.osm em http://metro.teczno.com/#rome . Eu não entendo, em https://en.wikipedia.org/wiki/Roma diz que as coordenadas de Roma são 41 ° 54′N 12 ° 30′E e no OSM Roma diz que é 41 ° 889'N 12 ° 48 ' E, no entanto, você usou coordenadas diferentes para o seu rome.box.get_osm()
tem um sistema de coordenadas diferente?mapview
não funcionou porque nossas rotinas Rcpp não suportavam objetos 'POSIX *'. De qualquer forma, o problema foi resolvido agora no ramo de desenvolvimento do GitHub e estará disponível com a próxima atualização oficial do CRAN.get_osm(rome.box, source = api)
dizendoSpace required after the Public Identifier
. Há uma resposta aqui no link sobre como corrigi-lo.