[Android] 좌표계 변환하기
개요
공공 API를 사용하다 보면 좌표가 우리가 흔히 아는 WGS84(위경도 좌표계)가 아닌, TM, KTM 등으로 되어 있는 경우가 있습니다.
이 위치 좌표를 안드로이드에서 사용하기 위해서는 WGS84 좌표계로 변환해서, LatLng
의 인자로 넘겨주어야 합니다.
해당 위치의 주소로 Geocoder
를 이용하여 위경도 좌표로 변환할 수도 있지만, 이 작업은 매우 무거운 작업이라 MainThread에서 처리할 경우 시간이 매우 오래 걸리고 심하면 앱이 다운되기도 합니다. (따라서 백그라운드 스레드에서 작업하고 메인 스레드에서 이 결과를 가져와야 하는데, 이 과정에 대해서는 다루지 않겠습니다.)
이번 포스팅에서는 좌표계를 직접 변환하는 방법에 대해 다루겠습니다.
라이브러리 다운로드하기
너무나 감사하게도, 서로 다른 좌표계 형식을 변환해주는 라이브러리를 만들어주신 분이 계십니다.
아래 링크를 통해 다운로드 받을 수 있습니다.
라이브러리 추가하기
다운로드 받았으면, 이 파일을 안드로이드 프로젝트에 포함시킵니다.
1. 안드로이드 프로젝트 브라우저를 Project 타입으로 변경합니다.
2. app > libs 폴더에 추가하고자 하는 jar 파일을 복사해서 넣습니다.
3. 추가한 jar 파일을 선택 후 마우스 오른쪽을 클릭하여 팝업 메뉴를 표시하고, [Add As Library…]를 선택합니다.
4. 팝업창이 뜨면 [OK]를 클릭합니다.
5. 제대로 수행되었다면, 아래와 같이 폴더가 생성되었을 것입니다.
좌표계 변환하기
이제 라이브러리를 추가했으니, import 해줍니다.
import kr.hyosang.coordinate.*
그리고 아래와 같이 사용하면 됩니다. 아래 코드는 tm 좌표계를 WGS84 좌표계로 변환하는 코드입니다.
// tm 좌표 확인
Log.i("ktcoor", "latitude: ${rest.X} longitude: ${rest.Y}")
// CoordPoint 객체 생성
val tmPt = CoordPoint(rest.X.toDouble(),rest.Y.toDouble())
// 좌표계 변환: TransCoord.getTransCoord(CoordPoint 객체, 기존 좌표계, 변환 좌표계)
val wgsPt = TransCoord.getTransCoord(ktmPt, TransCoord.COORD_TYPE_TM,TransCoord.COORD_TYPE_WGS84)
// wgs84 좌표 확인
latitude = wgsPt.y
longitude = wgsPt.x
Log.i("wgscoor", "latitude: ${latitude} longitude: ${longitude}")
결과
I/ktcoor: latitude: 206917.723941533 longitude: 457423.674667457
I/wgscoor: latitude: 37.61912956994531 longitude: 127.07914391764774
정리
이번 포스팅에서는 좌표계 변환법에 대해 알아보았습니다.
개인적으로 이번 일을 하면서 정말 많이 헤매면서 검색을 했는데요, 이 글을 보시는 분들은 그러지 않길 바라며 이번 포스팅이 도움이 되었으면 좋겠습니다.
그리고 해당 라이브러리를 만들어주신 분에게 큰 감사를 표합니다!
Leave a comment