[R-br] Calculo Distancia entre Coordenadas [loop]
Bruno Rhuan
rhuanjayme em gmail.com
Seg Dez 17 14:23:47 -02 2018
Boa Tarde,
Estou escrevendo um algorítimo que calcule a distância entre uma serie de
coordenadas e retorne qual o ponto mais próximo.
Para isso, o código utiliza dois datasets de coordenadas geográficas
(lat/long) e o calculo da distancia é feito utilizando a biblioteca
"geosphere".
Porém, basicamente todos os resultados do algorítimo sempre apontam para a
ultimo ponto do segundo dataset como sendo o mais próximo, assim creio ter
algum erro no loop.
Alguma sugestão?
Abaixo o código
______
#biblioteca necessária
#install.packages("geosphere")
library("geosphere")
#carregar arquivos
x <- read.csv(file.choose(),sep=";",dec=",") # carregar lista de pontos
nominais TIM
y <- read.csv(file.choose(),sep=";",dec=",") # carregar base de sites
#converter site id em characther
x$SiteID <- as.character(x$SiteID)
y$SITE.ID <- as.character(y$SITE.ID)
#Mostrar tabelas
View(y)
View(x)
dista1 <- c() #distancia do ponto nominal ao site
# Calculo Distancia
for (i in 1:216) {
coord1 <- c(x$LONG[i],x$LAT[i])
for (j in 1:11195 ) {
coord2 <- c(y$Longitude[j],y$Latitude[j])
dista1[j] <- as.numeric(distm(coord1,coord2, fun = distGeo))
#Calculo da menor distancia
if (j>1) {
k <- j-1
if (dista1[j]<dista1[k]) {
menor_dist <- dista1[j]
x$Distancia[i] <- menor_dist
x$SiteID[i] <- y$SITE.ID[j]
}
else {
menor_dist <- dista1[k]
x$Distancia[i] <- menor_dist
x$SiteID[i] <- y$SITE.ID[k]
}
}
}
}
write.csv(x, "Resultado.csv", row.names = FALSE)
_______________
Resultado retornado:
ï*..END_ID* *LAT* *LONG* *Distancia (m)* *SiteID*
BASDR_1 -1.296.434 -3.847.421 144.669.250.579.953 YBARWL
BALFS_2 -1.289.767 -3.832.365 146.401.362.045.206 YBARWL
CEFLA_3 -377.709 -3.855.802 222.607.630.292.628 YBARWL
Distancia (m) = distancia ao ponto mais próximo
SiteID = nome do ponto mais próximo.
At.te
Bruno
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20181217/008788d7/attachment.html>
Mais detalhes sobre a lista de discussão R-br