[Android] 좌표계 변환하기

1 minute read


개요

공공 API를 사용하다 보면 좌표가 우리가 흔히 아는 WGS84(위경도 좌표계)가 아닌, TM, KTM 등으로 되어 있는 경우가 있습니다.

이 위치 좌표를 안드로이드에서 사용하기 위해서는 WGS84 좌표계로 변환해서, LatLng의 인자로 넘겨주어야 합니다.

해당 위치의 주소로 Geocoder를 이용하여 위경도 좌표로 변환할 수도 있지만, 이 작업은 매우 무거운 작업이라 MainThread에서 처리할 경우 시간이 매우 오래 걸리고 심하면 앱이 다운되기도 합니다. (따라서 백그라운드 스레드에서 작업하고 메인 스레드에서 이 결과를 가져와야 하는데, 이 과정에 대해서는 다루지 않겠습니다.)

이번 포스팅에서는 좌표계를 직접 변환하는 방법에 대해 다루겠습니다.


라이브러리 다운로드하기

너무나 감사하게도, 서로 다른 좌표계 형식을 변환해주는 라이브러리를 만들어주신 분이 계십니다.

아래 링크를 통해 다운로드 받을 수 있습니다.


라이브러리 추가하기

다운로드 받았으면, 이 파일을 안드로이드 프로젝트에 포함시킵니다.

1. 안드로이드 프로젝트 브라우저를 Project 타입으로 변경합니다.

image-20211126012922692

2. app > libs 폴더에 추가하고자 하는 jar 파일을 복사해서 넣습니다.

image-20211126013329521

3. 추가한 jar 파일을 선택 후 마우스 오른쪽을 클릭하여 팝업 메뉴를 표시하고, [Add As Library…]를 선택합니다.

4. 팝업창이 뜨면 [OK]를 클릭합니다.

5. 제대로 수행되었다면, 아래와 같이 폴더가 생성되었을 것입니다.

image-20211126013548578


좌표계 변환하기

이제 라이브러리를 추가했으니, 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


정리

이번 포스팅에서는 좌표계 변환법에 대해 알아보았습니다.

개인적으로 이번 일을 하면서 정말 많이 헤매면서 검색을 했는데요, 이 글을 보시는 분들은 그러지 않길 바라며 이번 포스팅이 도움이 되었으면 좋겠습니다.

그리고 해당 라이브러리를 만들어주신 분에게 큰 감사를 표합니다!



Categories:

Updated:

Leave a comment