C# :: Lecture & TIPs

[C#] [Algorithm] 지구에서 두 곳의 위치 사이의 중간지점 구하기

지구에서 두 곳의 위치 사이의 중간지점을 구하는 방법을 알아보도록 합시다.

 

 

중간 지점

아래의 공식은 대원 (大圓) 에서 좌표로 이루어진 두 곳의 위치 사이의 중간지점을 도출해내는 공식입니다.

Bx = cos φ2 × cos Δλ
By = cos φ2 × sin Δλ
φm = atan2( sin φ1 + sin φ2, √(cos φ1 + Bx)² + By² )
λm = λ1 + atan2(By, cos(φ1) + Bx)

 

소스 코드

            double latx= Double.Parse(X_Latitude.Text);
            double lngx= Double.Parse(X_Longitude.Text);
            double laty= Double.Parse(Y_Latitude.Text);
            double lngy = Double.Parse(Y_Longitude.Text);

            double pi1 = latx * Math.PI / 180;
            double pi2 = laty * Math.PI / 180;
            double lambda1 = lngx * Math.PI / 180;
            double lambda2 = lngy * Math.PI / 180;

            double Bx = Math.Cos(pi2) * Math.Cos(lambda2 - lambda1);
            double By = Math.Cos(pi2) * Math.Sin(lambda2 - lambda1);

            double pi3 = Math.Atan2(Math.Sin(pi1) + Math.Sin(pi2), Math.Sqrt((Math.Cos(pi1) + Bx) * (Math.Cos(pi1) + Bx) + By * By));

            double lambda3 = lambda1 + Math.Atan2(By, Math.Cos(pi1) + Bx);

            double lat3 = pi3 * 180 / Math.PI;
            double lng3 = lambda3 * 180 / Math.PI;

            lng3 = (lng3 + 540) % 360 - 180;

            MessageBox.Show(lat3 + ", " + lng3);

 

초기 방위각이 최종 방위각과 일치하지 않는 것과 마찬가지로, 위도에 따라 왜곡률의 값이 변화하므로 중간 지점은 위도와 경도 사이의 중간 지점에 위치하지 않을 수 있습니다.

 

추가 링크

라디안
https://en.wikipedia.org/wiki/Radian

대원
https://en.wikipedia.org/wiki/Great_circle

 

Leave a comment