[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