티스토리 뷰
목차
반응형
C# 위도 경도 거리 계산, 1km 소스 (두 좌표 측정 단위 m, km)
[지도에서 위치값 알아내기]
먼저 소스를 소개합니다.
아래 소스는 C# 위도 경도 거리 계산 소스입니다. 미터 단위로 구한 결과에 1,000을 곱하여, 두 좌표의 1km 당 거리를 계산합니다.
1 2 3 4 5 6 7 8 | for (int i = 3; i <= Daejeonch1.Length; i += 2) { km[cnt] = (Distance(Daejeonch1[i - 3], Daejeonch1[i - 2], Daejeonch1[i - 1], Daejeonch1[i])) * 1000; AccrueDistance += km[cnt]; cnt++; } | cs |
일단 구현 방법에 따라, 위도와 경도를 처리하는 방법은 각기 다를 겁니다.
위의 코드는 Double형 배열 Daejeon에 위도와 경도를 순서대로 저장합니다.
예를 들면, 아래와 같이 두 좌표의 위도 경도를 저장합니다.
1 2 3 4 | Daejeon[0] = 127.348754 Daejeon[1] = 36.678610 Daejeon[2] = 127.348711 Daejeon[3] = 36.678699 .... | cs |
for문에 놓고 순차적으로 거리 계산을 하여 km이란 배열에 두 점간의 거리를 저장합니다. (C# 위도 경도 기준으로 1km를 구함)
이때, 1000을 곱해줘야 미터 단위로 저장이 됩니다.
C# 위도 경도 거리 계산, 1km 소스 (두 좌표 측정 단위 m, km)
그리고 실제 거리 계산을 해주는 Distance 메소드는 네이버 이홍재님 포스트 소스를 그대로 이용합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public double Distance(double lat1, double lon1, double lat2, double lon2) { double theta, dist; theta = lon1 - lon2; dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta)); dist = Math.Acos(dist); dist = rad2deg(dist); dist = dist * 60 * 1.1515; // statute miles. 단위는 기본 마일. dist = dist * 1.609344; return dist; } private double deg2rad(double deg) // 주어진 도(degree) 값을 라디언으로 변환 { return (double)(deg * Math.PI / (double)180d); } private double rad2deg(double rad) // 주어진 라디언(radian) 값을 도(degree) 값으로 변환 { return (double)(rad * (double)180d / Math.PI); } | cs |
위와 같은 코드를 적용하면, km이란 배열에 거리 값이 누적됩니다.
예를 들어, 지하에 매설된 관로의 실제 거리를 프로그래밍상에서 구해낼 수 있게 됩니다.
주요 참조 - 네이버 이홍재님 블로그 포스팅
C# 위도 경도 거리 계산, 1km 소스 (두 좌표 측정 단위 m, km)
반응형