Obrigado a @whuber por me colocar no caminho certo aqui. Parece que não haverá respostas adicionais por vir, então resolveremos essa questão postando minhas próprias observações que podem ser úteis para outras pessoas que aprendem sobre distâncias, agrupamentos e projeções.
O código a seguir R, usando o geosphere
, rgdal
e sp
pacotes demonstra que a seleção cuidadosa da projeção certo pode dar uma matriz exata distância (onde precisa é definido como a distância geodésica) quando os pontos são de até 2000 km uma da outra (eixos estão em metros).
library(sp)
library(rgdal)
library(geosphere)
## Produce 200 randomly positioned geographic coordinates
## in central Canada
xyLatLon <- data.frame(lon=(runif(200)*-30)-85,
lat=(runif(200)*5)+50)
## Convert to a Lambert Conformal Conic projection that should
## reasonably approximate the true distance
newProj <- "+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675
+lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000
+ellps=GRS80 +units=m +no_defs"
xyLcc <- spTransform(SpatialPoints(xyLatLon, proj4string=CRS("+proj=longlat")), CRS(newProj))
## Find the geodesic distance matrix from geographic coordinates
## assuming the WGS84 ellipsoid
xyDist1 <- distm(xyLatLon, fun=distMeeus)
## Find the Euclidean distance matrix from the projection
xyDist2 <- as.matrix(dist(coordinates(xyLcc)))
## Find the Euclidean distance matrix of the geographic coordinates
xyDist3 <- as.matrix(dist(xyLatLon))
Gráficos dos elementos dessas três matrizes de distância são mostrados abaixo. O gráfico à esquerda indica que a projeção selecionada está altamente correlacionada com a distância geodésica ao longo da faixa de distâncias usada aqui. Enquanto o gráfico correto demonstra o erro considerável que seria esperado se coordenadas geográficas não projetadas fossem usadas.