[R-br] Calculo Distancia entre Coordenadas [loop]
Daniel Guimarães Tiezzi
dtiezzi em usp.br
Seg Dez 17 14:33:52 -02 2018
Boa tarde Bruno, Seria ideal colocar um exemplo dos dois data frames para que possamos reproduzir. Mas da uma olhada na condicional. Eh isso mesmo que você quer?
# 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
### AQUI, a condição executa se j > 1. Na verdade, o j varia de 1 a 11195. Eh isso mesmo?
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]
}
}
}
}
daniel
> On Dec 17, 2018, at 2:23 PM, Bruno Rhuan por (R-br) <r-br em listas.c3sl.ufpr.br> wrote:
>
>
> 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 <http://site.id/> <- as.character(y$SITE.ID <http://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 <http://site.id/>[j]
> }
> else {
> menor_dist <- dista1[k]
> x$Distancia[i] <- menor_dist
> x$SiteID[i] <- y$SITE.ID <http://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
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20181217/d3b2e61a/attachment.html>
Mais detalhes sobre a lista de discussão R-br