
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@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@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.