VB :: Lecture & TIPs

[VB.NET] [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)

 

소스 코드

        Dim latx As Double = Val(X_Latitude.Text)
        Dim lngx As Double = Val(X_Longitude.Text)
        Dim laty As Double = Val(Y_Latitude.Text)
        Dim lngy As Double = Val(Y_Longitude.Text)

        Dim pi1 As Double = latx * Math.PI / 180
        Dim pi2 As Double = laty * Math.PI / 180
        Dim lambda1 As Double = lngx * Math.PI / 180
        Dim lambda2 As Double = lngy * Math.PI / 180

        Dim Bx As Double = Math.Cos(pi2) * Math.Cos(lambda2 - lambda1)
        Dim By As Double = Math.Cos(pi2) * Math.Sin(lambda2 - lambda1)

        Dim pi3 As Double = Math.Atan2(Math.Sin(pi1) + Math.Sin(pi2),
                                       Math.Sqrt((Math.Cos(pi1) + Bx) * (Math.Cos(pi1) + Bx) + By * By))

        Dim lambda3 As Double = lambda1 + Math.Atan2(By, Math.Cos(pi1) + Bx)

        Dim lat3 As Double = pi3 * 180 / Math.PI
        Dim lng3 As Double = lambda3 * 180 / Math.PI

        lng3 = (lng3 + 540) Mod 360 - 180

        MessageBox.Show(lat3 & ", " & lng3)

 

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

 

추가 링크

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

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

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: