지도api 의 거리계산 공식 문의

안녕하세요,

카카오 지도 API의 거리계산 함수 getLength() 로 계산된 거리와,
일반적인(?) 두 좌표의 거리계산공식인

6371 * ACOS(COS(RADIANS(P1.y)) * COS(RADIANS(P2.y)) * COS(RADIANS(P2.x) - RADIANS(P1.x)) + SIN(RADIANS(P1.y)) * SIN(RADIANS(P2.y)))

으로 계산된 거리의 차이가 조금 있어… 문의 드립니다.

카카오 지도 API의 거리 계산 공식을 알 수 있을까요?

1개의 좋아요

카카오 지도에서 사용하고 있는
변형된 TM 직교좌표계로 투영 후에 평면에서의 두 점 사이의 거리를 구하는 공식을 사용합니다.
때문에 지오이드의 곡률이 적용된 위경도 거리 구하기 공식으로 도출된 거리와는 차이가 있습니다.

+투영 공식은 제공해 드리기 어려우니 양해 부탁드립니다.

카카오 지도 API의 거리 계산 값이 조금 더 정확하다는 의미로 이해해도 될까요?

좀 더 정확하다… 음…
아마도 그럴겁니다.

이 공식의 차이는 타원체를 무엇으로 두느냐에 따라 다른건데,
제시해 주신 공식은
6371Km을 지구 반지름으로 하는 구를 기준으로 구한 공식이라고 예상됩니다.
즉 지구가 구 임을 가정하고 만들어진 공식입니다.

카카오 지도는 구가 아닌 타원체(장반경 6378, 단반경 6356)라 가정하고
평면으로 프로젝션 하여 서비스 됩니다.
실제 지구도 구가 아닌 타원체이기 때문에
getLength 방식이 타원체를 기준으로 프로젝션을 거치게 되므로
실제와 비교하여 상대적으로 오차 범위가 작을 거라고 생각됩니다.

답변 감사합니다 :slight_smile:

1개의 좋아요

안녕하세요, 답변해주신 내용을 바탕으로 WGS84 좌표를 WTM(중부원점, EPSG:5186) 좌표로 변환하여
평면상의 두 점에 대한 거리 공식을 이용하여 거리를 재계산 해보았습니다.

내부 로직으로 재 계산된 거리와
카카오 지도 API의 getLength()로 계산된 값과 비교해 보니 거의 일치는 하나, 소수 7번째 자리에서 조금 차이가 있는것 같습니다.

[거리값]
카카오: 1706.4166040738333
내부로직: 1706.4166041612872

물론, 그 차이가 유의미 하다고 생각 하진 않지만, 문득 getLenth() 함수로 계산된 거리와의 차이가 나는 이유가 궁금하여 다시 문의 남겨 봅니다!

혹, 짐작 되시는 이유가 있을까요?

감사합니다 :slight_smile:

차이가 나는 이유를 생각해보자면
좌표 변환하는 과정에서 적용시키는
투영 공식의 차이에서 비롯된 것이라 생각됩니다.

같은 식이라도 공식을 어떤 순서로 적용시켰는지,
코드상으로 계산의 효율을 위해 오차를 감수한 부분이 있는지에 따라 다를 수 있을 것 같습니다.

컴퓨팅으로 뽑아낸 수치 치고는
꽤나 차이가 나는 것은 사실이나
해당 값은 실측상으로
1.7km가 떨어진 두 지점 사이에서 고작 몇 마이크로미터 미만의 차이밖에 없습니다.
image
거시적인 관점에서 거의 동일한 값으로 취급해도 좋을 차이라 생각합니다.