ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 위도 경도 계산법
    툴/SVN 2014. 5. 12. 13:00
    반응형

    위도 경도를 아래 공식에 대입해서 d(거리)값을 구한 상태 입니다.


    ==========점(x1, y1)과 직선(ax+by+c=0) 사이의 거리(d) 구하는 공식 ======================

        d = |ax1 + by1 + c | / sqrt(a^2 + b^2)

    =================================================================================


    그런데 이것은 일반적으로 거리에 사용되는 단위로는 나타낼 수 없다고 판단하였습니다. 그래서 제가 단위환산을 하려고하는것입니다.

    Location.distanceTo() 함수의 레퍼런스를 보면 미터로 리턴된다고 되어있는데요....

    굳이 점과점사이의 거리를 구하는 공식을 써야하는 이유가 있나요?


     - 위도 : 가로, 위도의 경우 지구 둘레의 절반을 남북으로 180 등분한 것

       위도 1도 사이의 거리는 48,000 ÷ 360 = 133.33 km 이며 1 도는 3600 초이므로 1초 사이의 거리는 0.037 km = 37 m 입니다. 


     - 경도 : 세로

       경도의 경우는 적도에서는 지구 둘레인 48,000 km 를 360 등분한 것이므로 위도와 마찬가지로 1도 사이의 거리는 133.33 km, 1초 사이이의 거리는 37 m 이지만 적도에서는 모든 경선이 만나기 때문에 그 사이의 거리가 모두 0 이 되며 그 중간 지역에서는 1도 사이의 거리는 133.33 × cos(해당 지역의 위도) km, 1초 사이의 거리는  37 × cos(해당 지역의 위도) m 의 식으로 구할 수 있습니다.


     - 표시법 : 위도와 경도를 표시할 때 도(˚)분(′)초(˝)는 시간과 마찬가지로 60진법을 사용하지만 그 아래의 작은 단위는 초에 대한 10진수로 소숫점 아래의 숫자

       예를 들어 북위 37˚35′35.35˝ 와 같은 식   

     - 위도. (˚N). 경도. (˚E).


     - 계산법

     - signed long double Distance = acos(sin(dLat1)*sin(dLat2) + cos(dLat1)*cos(dLat2)*cos(dLon1 - dLon2));

     signed long double Degree = acos((sin(dLat2)-sin(dLat1)*cos(Distance))/(cos(dLat1)*sin(Distance)))*(180/3.141592);

    [출처] 위도 경도 거리 각도 계산|작성자 나지

     - SELECT ( 6371 * acos( cos( radians(('" + a + "')) ) * cos( radians( lat ) ) * cos( radians( long ) - radians(('" + b + "')) ) + sin( radians(('" + a + "')) ) * sin( radians( lat ) ) ) )

     - 웹서비스에서 이 쿼리문을 써서 먼저 1차적으로 걸러내고 어플리케이션내에서 Distance함수를 써서 2차로 걸러냈습니다.

     - 디비가 서버에 있다면 서버가 거리계산을 해서 데이터를 넘겨주는 방식을 해야할듯.

    즉 구글맵에서 쿼리를 날려서 반경안의 데이터만 넘겨주는 식으로요..


     - 위도 경도 거리 계산 설명

    ==설명==

    산행도중에 문제가 있을때 가장 먼저 알아야 할것은 자신이 어디에 서 있는지를 아는 것입니다.

    또한 지도를 보고 앞으로 갈 방향를 찾아내는 독도법도 자신의 현재 위치를 모르면  아무것도 

    해결할수가  없을 것입니다.

    그런 문제를 해결해 주는  GPS 라는  기기가 보급되면서 어느 곳에서도 자신의 위치와 해발 고도를

    알게 되었슴니다.

    또한 GPS기기 값이 나날이 저렴해져서  몇년 후면  많은 분들이 산행에  상용 하리라  생각합니다.

    그런데 GPS기기에 표시되는 동경 127。30,30,, 북위 37。30,  30,, 이런 각도(角度)가 표시 되니까

      약간은 이해하기가 어려운 문제가 있슴니다.

     어저께 백두대간4구간  산행때 백운산 표지석에 경,위도가 표시되어 있는 것을 보고 이런 숫자의

    개념과   지점간 거리 환산 ,또  GPS구입시  활용을 하도록   하기 위하여  몇가지를  적어 보았슴니다. 

     

    ==내용 요약==

    1.경도 --지구을 수박 쪼개듯 세로로 자른 각도를 경도라고 합니다(360조각=1도)

              우리나라에서 흔히쓰는  위도37도기준  경도 거리는 1도=88.8km ,1분=1.48km , 1초≒25m 입니다

    2.위도--지구를 수평으로 자른 모양을 지구중심에서 적도를 0도  북위90도 남위 90도로 180도로 등분한 것입니다.

                위도거리는 어디서나 1도=111Km  ,  1분=1.85Km  1초거리는 30.8m 입니다.

    3.두 지점간 거리환산--두 지점간 경도와 위도끼리  차이값에 거리를 곱하면 두 점간 좌표 직각거리가 됩니다.

                 직각 삼각형의 빗변거리 공식처럼   √ 경도거리제곱+위도거리제곱 하면 됨니다(√루트 표시임)

    4. 한 지점의 경도 위도를 알면 거기서 동서남북을 알수 있나요?----답. 없슴니다.(나침반 이용)

    5. 두 지점간 경위도를 알아서 동서남북을 알수 있나요?---답. 없슴니다(나침반 이용. 두 지점간  기선의 방향은 계산됨)

     

    ==경도의 개념==

    지구는 공모양의 둥근 물체이므로 전체를 평면으로 표현할수는 없슴니다.

    그래서 지구를 세로로 쪼개서 그 지구중심에서 각도로 표현한  개념이 경도 입니다.

    영국의 그리니치 천문대를 중심으로 동경180도 서경 180도 이렇게 표현하니까 결국 360등분하여

    그 하나를 1。로 씀니다.

    예를 들면 수박에 있는 줄 무늬따라 세로로  360 조각으로 쪼갤때 그 한조각을 동경 또는 서경 1。라고  생각것과 같슴니다.

    그러면 쪼갠 수박한조각을  세운 상태에서 그대로 관찰해  봅시다.

    한 조각의 거리는 가장 중앙 부분(지구에서 적도해당 )에서 가장 넓고 아래, 위로 갈수록 좁아 짐니다.

    즉 같은 경도 사이의 거리는 위도가 커짐(0~90도)에 따라서 점점  좁아 짐니다.  이것이  같은경도간의 간격(거리) 개념입니다.

    흔히 지구의 둘레를 40,000Km로 씀니다

    그래서 가장 넓은 적도에서 흔히아는 지구둘레 에서 대략 역산해보면 경도1도 거리는 40,000Km÷360。=111Km  ,  경도1분거리는 111Km/도÷60분=1.85Km    경도1초 거리는1.85m÷60초=30.8m 가 됨니다

     임의의 경도간 거리를 계산하기위해서는 위,아래를 표시하는 위도의 각도에 코사인을 곱하는 계산이 들어가야 합니다.

     

    우리나라에서 지점에서 흔히 사용하는 경도의 거리는 위도북위 37도 만큼 적도상거리보다 좁아져서 경도1초는 ≒24.69m ,경도1분은 24.69*60초=1.48km 경도 1도는 1.48Km×60분=88.9km 를 씀니다.

     

    ==위도의 개념==

    위도는 지구를 수평으로 자르는 개념입니다. 

    즉 합죽선(접는부채) 부채를 세로로 세운 모양에서 부채살의 중심에서  각도와  살끝에서 간격개념이라고 할수 있슴니다.

    적도를 0도로 하고 북쪽으로 북위 90도, 남쪽으로 남위90도 합하여 180등분하였슴니다.

    그러므로 위도의 거리는 어느 곳에서나 일정하게 계산하면 됨니다.

    경도 계산할때  적도부분에서 거리 계산과 같슴니다.

    각도는 지구중심에서 상하로 180등분 하였으므로 원의 각도와 반지름을 알고  원둘레를 계산하는 개념과 같슴니다

     

    경도 1도거리를  쉽게 환산하면 지구 둘레의 반(남북) 20,000Km÷180。=111Km  ,  각1분거리는 111Km/도÷60분=1.85Km

     각1초 거리는1.85m÷60초=30.8m 가 됨니다.

     

    == 경, 위도 거리 환산법==

     1) 두 경도간 각도(도,분,초) 차이 값에 각 거리를 곱하여 두점간 수평거리를 계산합니다.

     2)두 위도간 각도(도,분,초)차이 값에 각 거리를 곱하여 두점간 수직거리를 계산합니다.

     3)직각 삼각형의 빗변거리 구하는 방법으로  경도거리제곱+위도거리제곱에 제곱근 값을 구하면

         두 지점간 거리가 됨니다

     

      EX)   1]   A 지점 동경 127도 30분 20초  북위 36도 27분 08초

                    B  지점 동경 127도 29분 30초  북위 36도 28분 00초

                    차이값  경도 00도   1분 10초      위도 00도1분 8초

     

              2] 경도간 거리          1분*1.48+10초*0.025=1.73km

                  위도간 거리          1분*1.85+8초*0.031=2.10km

     

              3] A-B 지점간 거리

                   √1.73제곱+2.10제곱=2.72km

     

             ※ 틀린부분은 꼭 댓글을 주십시요.

                 

                    --끝--


    -----------------------------------------------------------------------------------------

    경위도좌표 거리계산

     

    http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNO=20&no=761133&ref=761126

     

    http://www.onlybalance.pe.kr/xe/tech/891

     

    http://www.movable-type.co.uk/scripts/latlong.html

     

    Vincenty formula for distance between two Latitude/Longitude points

    : http://www.movable-type.co.uk/scripts/latlong-vincenty.html

     

     

    --------------------------------------------------------------------------

    추가사항

     

    GPS의 정보의 경위도 좌표계의 표시방법은 

    DD(Decimal Degree) 와 DMS(Degree Minutes Seconds) 방식이 있더군요

    NMEA 방식은 DMS를 사용하고 KML(구글어스)는 DD를 사용합니다.

    변환식은 DD = Degree + Minutes/60 + Seconds/3600 입니다.

    Latitude(위도) 

    36°27′08.0″N  -> 36.45222

    Longitude(경도)

    127°30′20.0″E -> 127.50556

     

    ---------------------------------------------------------------------------

    다른 참고 사이트 : http://blog.naver.com/hyj88zzang/95828284

     

     

    네이버에서 "경위도좌표 거리계산"로 검색함

    [출처] 경위도좌표 거리계산|작성자 어처구니




    출처 - http://blog.naver.com/PostView.nhn?blogId=nds239&logNo=10089583707




    var R = 6371; // km

    var φ1 = lat1.toRadians();

    var φ2 = lat2.toRadians();

    var Δφ = (lat2-lat1).toRadians();

    var Δλ = (lon2-lon1).toRadians();


    var a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +

            Math.cos(φ1) * Math.cos(φ2) *

            Math.sin(Δλ/2) * Math.sin(Δλ/2);

    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));


    var d = R * c;

    반응형

    ' > SVN' 카테고리의 다른 글

    Git reberse vs merge  (0) 2015.05.21
    SVN으로 github 사용법  (0) 2014.05.12
Designed by Tistory.