에뮬레이터에서 좌표 변화 문제점

안드로이드 에뮬레이터는 처음 GPS 좌표가 미국의 어딘가로 찍히는 것 같다. GPS 변화를 감지하는 TMapGpsManager.OnLocationChangedListener에서 위경도가 대한민국을 벗어날 경우 처리하지 않도록 수정했다.

private val onLocationChangeListener = TMapGpsManager.OnLocationChangedListener{location->
if (location != null && checkKoreaLocation(location)) {
				...
    }
}

private fun checkKoreaLocation(location: Location): Boolean {
    return location.longitude> KOREA_LONGITUDE_MIN && location.longitude< KOREA_LONGITUDE_MAX
            && location.latitude> KOREA_LATITUDE_MIN && location.latitude< KOREA_LATITUDE_MAX
}

...

companion object {
        private const val KOREA_LATITUDE_MIN = 32.856
        private const val KOREA_LATITUDE_MAX = 38.561

        private const val KOREA_LONGITUDE_MAX = 130.675
        private const val KOREA_LONGITUDE_MIN = 124.564
    }

대한민국의 위경도는 구글 어스를 이용해서 대략적으로 찍어봤다.

Google Earth

TMapView 내부 코드를 찾아보니, 상수로 정의되어 있어서 해당 값을 사용하도록 변경했다.

Untitled

T MAP 로고 지우기

지도 우측 하단에 보이는 T MAP 로고가 있는데, tMapView.setVisibleLogo(false) 코드를 사용해서 지울 수 있다.

지도와 관련된 모든 코드는 T MAP 지도가 사용할 준비가 된 이후에 호출해야 에러가 발생하지 않으므로 주의하자. tMapView.setOnMapReadyListener 를 통해 준비가 완료된 시점을 알 수 있다.

Untitled

사용자의 움직임 흉내내기

이전에 QGIS 에서 안드로이드 에뮬레이터 GPS를 조작하는 방법을 소개했는데, 좌표를 500개 정도 입력해도 움직임이 자연스럽지 않았다.

콘솔 명령어로 에뮬레이터의 GPS를 조작할 수 있어요

콘솔 창에서 에뮬레이터에 연결해서 GPS를 조작하는 명령어를 보낼 수 있다. 범위 내의 아무 포트나 연결한 후 auth_token을 입력했다. 이후 geo fix (longtitude) (latitude)를 입력해도 GPS가 변하지 않아서 포기했다😢

Send Emulator console commands | Android Developers

지도를 조작해서 사용자가 움직이는 것처럼 흉내만 내보자

그래서 코드를 통해 GPS를 조작하고 싶었다. MockLocation을 사용할 수도 있지만, 개발자 설정에서 mockLocation을 사용할 수 있도록 앱 권한을 사용자가 직접 추가해야하는 번거로움이 있다. 그래서 T MAP 지도상에서 사용자가 움직이는 것처럼 보이도록 tMapView.setLocationPoint 함수를 사용했다.