'위도'에 해당되는 글 1

  1. 2010.09.12 [android] 지도 정보를 좌표정보로 변환하기


지도정보를 좌표정보로 변환하기

지도 정보는 위도와 경도로 표시됩니다.

위도는 적도 중심으로 북극 혹은 남극까지

+90도, -90도의 값을 가지고,

경도는 그리니치 천문대 기준으로 동서로

 +180도, -180도 값을 가집니다.

이 위도 및 경도 값을 좌표 값으로 변환하려면 구면 좌표계에 대한 이해가 필요합니다.

그 이유는 아래 그림과 같습니다.



우선 변환하고자 하는 값은 원의 "호" 에 해당하는 값이라서 반지름이 R이고, 각도가 theta라고 하면

호는 R * theta 가 됩니다.

이제 위도 값을 보자면 +-90도 이므로 그냥 각도를 계산하면 됩니다.

하지만 그림에서와 같이 위도 값은 구에서 자른 절단면에 대한 원의 반지름이 달라지기 때문에

계산법이 달라집니다. 그냥 각도값을 가지는게 아니라 R * (phi) * cos(theta)  가 되는 것이지요.

그리고 지도 정보를 코드에 적용한다고 할때, 저의 경우는 

"내 위치" 기준으로 생각해서 좌표계를 재설정 하는 방식을 취했습니다.

그러므로 구할 수 있는 위도, 경도 좌표값을 내 위치로부터 차 값을 구하고

위의 그림에서와 같이 평면 좌표로 변환하는 것입니다.

예제 코드는 아래와 같습니다.

.....
                lngLat = pairs[i].split(",");

        lat_angle = Double.parseDouble(lngLat[1]);//*1E6;

        delx = Double.parseDouble(lngLat[0]) - (geoOverlay.gslongitude / 1E6); // longitude 의 차이값을 구함

        dely = Double.parseDouble(lngLat[1]) - (geoOverlay.gslatitude / 1E6); // latitude 의 차이값을 구함

        

        var[j] = earthR * delx * (Math.PI/180) * Math.cos(lat_angle/180*Math.PI);

        var[j+1] = earthR * dely * (Math.PI/180);

......

코드 상에서 "Math.PI/180" 처럼 PI값이 3.14 인 라디안 값인데, 수학적인 함수를 사용할때 라디안 값으로 변환되므로 

180도를 나누어 차원을 변환해주기 위해 처리한 부분입니다.