닷넷/C#

C# 두 위도와 경도 좌표 사이의 거리를 계산 하는 방법

FreeBear 2021. 7. 19. 16:34
반응형

c#에서 두 위도와 경도 좌표 사이의 거리를 계산 하는 방법은 다음과 같다.

첫 번째 방법, NuGet 패키지에서 NEST를 설치한다.

 

설치 후 다음과 같이 코드를 작성한다. 참고로 단위는 미터이다.

// c#에서 두 위도와 경도 좌표 사이의 거리를 계산 하는 첫 번째 방법
GeoCoordinate pin1 = new GeoCoordinate(lat1, lng1);
GeoCoordinate pin2 = new GeoCoordinate(lat2, lng2);

double distanceBetween = pin1.GetDistanceTo(pin2);

 

단, 이 방법은 닷넷프레임워크 버전을 타기 때문에 설치가 안 되는 경우 두 번째 방법을 사용하면 된다.

 

 

두 번째 방법,  NEST가 설치 되지 않는 경우

다음의 GetDistance 함수 코드를 사용한다.

// c#에서 두 위도와 경도 좌표 사이의 거리를 계산 하는 두 번째 방법
public double GetDistance(double longitude, double latitude, double otherLongitude, double otherLatitude)
{
    var d1 = latitude * (Math.PI / 180.0);
    var num1 = longitude * (Math.PI / 180.0);
    var d2 = otherLatitude * (Math.PI / 180.0);
    var num2 = otherLongitude * (Math.PI / 180.0) - num1;
    var d3 = Math.Pow(Math.Sin((d2 - d1) / 2.0), 2.0) + Math.Cos(d1) * Math.Cos(d2) * Math.Pow(Math.Sin(num2 / 2.0), 2.0);

    return 6376500.0 * (2.0 * Math.Atan2(Math.Sqrt(d3), Math.Sqrt(1.0 - d3)));
}

.....

// 실제 GetDistance 함수 사용 예
private void SetText()
{
	double slat = Convert.ToDouble(labelStartLat.Text);
    double slng = Convert.ToDouble(labelStartLng.Text);
    double dlat = Convert.ToDouble(labelDestinationLat.Text);
    double dlng = Convert.ToDouble(labelDestinationLng.Text);

    labelDistance.Text = string.Format("거리: {0:0.00} Km", GetDistance(slng, slat, dlng, dlat) / 1000);
}

 

두 번째 방법도 계산 결과 단위가 미터이기 때문에 실제 사용 예에서는 Km로 환산하기 위해 1000으로 나눴다.

반응형