본문 바로가기
C++ 200제/코딩 IT 정보

C# 위도 경도 거리 계산, 1km 소스 (두 좌표 측정 단위 m, km)

by vicddory 2017. 2. 21.

C# 위도 경도 거리 계산, 1km 소스 (두 좌표 측정 단위 m, km)


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)

댓글