안녕하세요 IT박사 Ho입니다.


오늘은 지구의 지도상의 거리를 알아내는 방법에 대해서 알아보겠습니다.
세상은 넓고 천재는 많은 것 같습니다.
정말 코딩을 배우다보면 대단한 사람이 많다는 것을 느끼게 합니다.
어릴적 수학을 포기했던 저 자신이 정말 안타깝네요 
그럼 각설하고 좌표간의 거리를 구하는 공식에 대해서 알아볼까요?
제가 알아본 방법은 haversine이라는 방법입니다.
저는 flutter dart로 작업을 했습니다.
아래는 코드고 해석도 달아놓았습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
  double _calculateDistance(double lat1, double lon1, double lat2, double lon2) {
    var R = 6371e3; // 지구의 반경(m)
    var phi1 = lat1 * pi / 180; // 위도 라디안 값
    var phi2 = lat2 * pi / 180;
    var deltaPhi = (lat2 - lat1) * pi / 180;
    var deltaLambda = (lon2 - lon1) * pi / 180;
 
    var a = sin(deltaPhi / 2) * sin(deltaPhi / 2) +
        cos(phi1) * cos(phi2) *
            sin(deltaLambda / 2) * sin(deltaLambda / 2);
    var c = 2 * atan2(sqrt(a), sqrt(1 - a));
 
    return R * c; // 결과 거리(m)
  }
cs
해석
  • R: 지구의 반경을 미터 단위로 나타냅니다. 이 값은 대략적으로 지구의 평균 반경을 6,371킬로미터(6,371,000 미터)로 가정합니다.
  • phi1 및 phi2: 첫 번째 및 두 번째 지점의 위도 값(lat1, lat2)을 라디안 단위로 변환합니다. 이는 Haversine 공식이 라디안 단위를 사용하기 때문입니다. 각도를 라디안으로 변환하기 위해 각도에 π(파이)를 곱한 다음 180으로 나눕니다.
  • deltaPhi 및 deltaLambda: 두 지점 간의 위도 차이와 경도 차이를 라디안 단위로 계산합니다. 이는 두 지점 사이의 각도 차이를 나타냅니다.
  • a: 이것은 Haversine 공식의 핵심 부분입니다. 두 지점의 위도 및 경도 차이를 사용하여 구면 삼각법을 통해 두 지점 사이의 구면상의 거리를 계산하는 데 사용되는 중간 값입니다.
  • c: 이것은 a를 사용하여 계산된 구면상의 거리에 대한 각도입니다.
  • R * c: 마지막으로, 구면상의 각도(c) 지구의 반경(R) 곱하여 실제 거리(미터 단위) 얻습니다.
이렇게 작성을 하면 
지구가 완벽한 구가 아니기 때문에 오차가 있을 수 있습니다.
그것에 대한 해결 방법은 다음에 또 추가하도록 하겠습니다.