안녕하세요 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)을 곱하여 실제 거리(미터 단위)를 얻습니다.
이렇게 작성을 하면
지구가 완벽한 구가 아니기 때문에 오차가 있을 수 있습니다.
그것에 대한 해결 방법은 다음에 또 추가하도록 하겠습니다.
0 Comments