티스토리 뷰

목차

    반응형

    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)

    반응형