-
C# 두 위도와 경도 좌표 사이의 거리를 계산 하는 방법닷넷/C# 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으로 나눴다.
반응형'닷넷 > C#' 카테고리의 다른 글
c# 부팅시 자동 시작하는 프로그램, 레지스트리에 등록 또는 삭제 방법 (0) 2021.11.30 C# LINQ multiple select (0) 2021.11.11 C# A리스트에서 B리스트에 있는 것을 제외하는 방법(LINQ) (0) 2021.07.13 C# 네이버 지도 API(AI Naver-Directions 5)를 이용해서 거리 구하기 (0) 2021.05.13 C# 문자열을 문장으로 나누기 (Split('')할 때 'string'에서 'char'(으)로 변환할 수 없습니다. 해결 방법) (0) 2020.11.11