Gracias por tu respuesta, por supuesto os envío un ejemplo de mi problema:
```
library(ggplot2)
library(tspmeta)
coord=read.csv2("CoordinatesUKExample.txt")
coords.df=data.frame(long=coord$Longitude,lat=coord$Latitude)
coords.mx=as.matrix(coords.df)
dist.mx=dist(coords.df)
tsp.ins <-tsp_instance(coords.mx,dist.mx)
tour=run_solver(tsp.ins,method="2-opt")
autoplot(tsp.ins,tour)
head(coord)
#> Postcode City Latitude Longitude
#> 1 AB53 8BJ Aberdeenshire 57.52995 -2.4509960
#> 2 NE46 4SA Acomb 54.99080 -2.1184036
#> 3 NE66 2HT Alnwick 55.39723 -1.6900000
#> 4 CA16 6QR Appleby 54.57808 -2.4929927
#> 5 CA16 6JP Appleby 54.60883 -2.5188636
#> 6 CO7 7LG Ardeigh 51.92808 0.9833302
```
En este caso
obtengo una unión optima de todos los puntos. Pero yo quiero detectar que
puntos están cerca de la ruta que une los dos puntos principales (ciudades).
También he hecho
un mapa con Ias ciudades de Reino Unido para hacerlo más fácil de entender. He
calculado las distancias reales entre los puntos y creado clusters en función
de las distancias entre ellos. En este ejemplo solo hay 10 ciudades aunque en
el problema hay más de 80 ciudades diferentes.
```
**library**(gmp)
**library**(cluster)
**library**(raster)
#Geo distance function
geo.dist = function(df) {
require(geosphere)
d <- function(i,z){ # z[1:2] contain long, lat
dist <- rep(0,nrow(z))
dist[i:nrow(z)] <- distHaversine(z[i:nrow(z),1:2],z[i,1:2])
return(dist)
}
dm <- do.call(cbind,lapply(1:nrow(df),d,df))
return(as.dist(dm))
}
df <- data.frame(long=coord$Longitude, lat=coord$Latitude, city=coord$City)
d <- geo.dist(df) # distance matrix
hc <- hclust(d) # hierarchical clustering
df$clust <- cutree(hc,k=10)
UK <- getData("GADM", country = "GBR", level = 1)
map.df <- fortify(UK)
ggplot(map.df)+
geom_path(aes(x=long, y=lat, group=group))+
geom_point(data=df, aes(x=long, y=lat, color=factor(clust)), size=4)+
scale_color_discrete("Cluster")+
coord_fixed()
```
He obtenido el siguiente mapa con los puntos a tratar (sin la línea roja):
Mi objetivo es
ser capaz de decir que si voy desde el punto 1 hasta el punto 7 (línea roja),
paso cerca de los puntos 9, 3 y 5, por lo que podrían ser paradas en la ruta.
Quizá existe un
package para hacerlo más fácil. Yo he visto algo con package que interactúan
con google maps pero no he sido capaz de montar un programa con éxito.
Si alguien sabe cómo
ayudarme seria genial.
Un saludo y
gracias,
Rafa