닷넷/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으로 나눴다.
반응형