blogging

지구는 둥글다.

hongiiv 2008. 4. 7. 00:41
반응형
일전에 지도상의 좌표를 주소로 바꾸는 (Reverse Geocoding, 좌표주소변환) 서비스를 만들었는데,, 참 부족하죠. 좀 더 정확하게 말하자면 "좌표에 대응하는 가장 근접한 주소 변환" 서비스라고 할 수 있다. 입력한 좌표에 가장 근접한 주소지를 반환하는 것이지요 ^^;; 하지만 여기에 한가지 생각하지 못한것이 지구가 둥근것을 감안하지 않고 계산했다는 것이다 ㅜㅜ


7061119424지구는 둥글죠 ^^ [출처 : http://www.codeproject.com/KB/dotnet/Zip_code_radius_search.aspx]

따라서, 주어진 위/경도에 가장 근접한 DB상의 위/경도를 찾기 위해서는 다음의 공식을 적용해야 한다.

degrees(acos(
        sin(radians(latitude))
        * sin( radians(:1))
        + cos(radians(latitude))
        * cos( radians(:1))
        * cos( radians(longitude - :2) )
        ) ) * 69.09)

:1, :2는 검색할 위/경도

따라서, 둥근 지구를 고려한 검색좌표에 가장 근접한 좌표의 우편번호를 얻을 수 있다. 아래와 같이 얼마나 근접한지를 보여줄 수 있다.

K-20080407-016015
[출처 : http://jehiah.cz/archive/spatial-proximity-searching-using-latlongs]

그런데 문제는 이것 또한 가장 근접할 뿐이지 정확하지 않다는 것이다. 다음의 그림과 같이 지점 C가 있을때 분명 우편번호상으로는 A에 속하지만, 위의 공식을 이용하여 근접한 지점을 찾게 되면 B 지점과 더 가깝기 때문에 잘못된 우편번호를 반환하게 된다.

zipcode
[출처 : http://zip-code-boundaries.com/]

따라서, 우편번호의 구역에 대한 정보를 가지고 있다면, 좀더 정확한 정보를 제공할 수 있다. 미국의 경우에는 우편번호의 구역 정보를 제공하고 있다. 따라서 하나의 우편번호에 대해서 다음과 같은 각 지점의 정보를 통해 위의 우편번호 지역의 shape를 만들어 낼 수 있다.

K-20080407-014526
[출처 : http://zip-code-boundaries.com/]

이러한 우편번호의 구역정보는 KML 파일로 만들면 다음과 같이 지도를 클릭하면 해당 지역의 정확한 우편번호를 알려준다. 근접한 곳의 우편번호가 아닌 정확한 ^^;;

K-20080407-020080
[출처 : http://maps.huge.info/zip.htm]

우리나라도 행정구역 또는 우편번호에 해당하는 구역 정보가 제공되는것이 있는지 찾아봐야겠다. 그러면 좀더 재미난 것들을 많이 할 수 있을것 같은데,,,


반응형