Вычисление матрицы расстояний большого круга

dist(coords) предоставляет матрицу расстояний, используя евклидовы расстояния; это также обеспечивает несколько других вариантов. Но это не обеспечивает никакой опции, такой как формула haversine.

distHaversine() вычисляет желаемое расстояние (большой круг) для заданных двух наборов координат широты и долготы. Мне интересно, существует ли существующий пакет / функция, которая вычисляет матрицу расстояний большого круга, используя формулировку haversine.

1 ответ

Решение

Как вы уже могли заметить, 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(),

Другие вопросы по тегам