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) 
> <[email protected]> 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
> [email protected]
> 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.

_______________________________________________
R-br mailing list
[email protected]
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.

Responder a