AI·데이터 분석

R에서 좌표 거리계산

iizi 2021. 11. 4. 14:42

지표 위에 있는 두 지점의 거리를 계산할 때는 유클리드 거리를 사용할 수가 없다.

두 지점이 평평한 지면 위에 놓여있다는 전제를 갖고 있는 유클리드 거리는 타원체인 지구 표면에서는 사용할 수가 없다. 물론 아주 근접한 지점을 측정한다면 오차가 크지는 않다.

따라서, 지구의 형태를 모델링한 다양한 지구 타원체 가정과 거리를 계산하는 알고리즘이 있다.

240만개와 20만개의 지점 간 거리 계산을 위해서는 상당한 속도와 쓸만한 정확도를 가진 알고리즘 선정이 필요했고,
아래와 같은 실험을 통해 Meeus 알고리즘을 채택했다.

geosphere 라이브러리에서 제공하는 거리계산 알고리즘 성능 비교
OpenR studio / 240만개(map_A) x 8개(map_B) 거리 계산

# 수행속도 정확도
1 distVincentyHaversine (0.719초) distVicentyEllipsoid
2 distMeeus (0.749초) distMeeus
3 distVincentySphere (0.77초) distVincentySphere
4 distVicentyEllipsoid (223초) distVincentyHaversine

Meeus와 Ellipsoid의 측정값 차이가 10cm 이하로 나타났기에 Meeus를 최종 채택했다.
실제로 거리계산은 아래 코드로 반영됐다.

distA <- distMeeus(map_A, map_B[, c("lon","lat")])