Как вы, возможно, уже заметили, distHaversine()
вычисляет расстояние между единственной точкой и двухколоночной матрицей координат.
Чтобы вычислить все попарные расстояния между двумя матрицами координат, просто используйте apply()
для итерации строка за строкой по одной из матриц, вычисляя расстояние от каждой ее точки до всех точек в другой.
library(geosphere)
## Example coordinates (here stored in two column matrices)
cc1 <- rbind(c(0,0),c(1,1))
cc2 <- rbind(c(90,0),c(90,90), c(45,45))
## Compute matrix of distances between points in two sets of coordinates
apply(cc1, 1, FUN=function(X) distHaversine(X, cc2))
# [,1] [,2]
# [1,] 10018754 9907452
# [2,] 10018754 9907435
# [3,] 6679169 6524042
Интересное примечание: беглый взгляд на sp::spDists()
(который действительно вычисляет попарные расстояния между двумя матрицами) показывает, что он использует по существу идентичную стратегию на основе apply()
. Основное отличие, помимо дополнительной проверки ошибок и передачи аргументов, заключается в том, что он применяет функцию spDistsN1()
, где мы применяем distHaversine()
.
person
Josh O'Brien
schedule
12.05.2014
library("sos"); findFn("{great circle} distance")
(и варианты)? - person Ben Bolker   schedule 12.05.2014