안드로이드 에뮬레이터는 처음 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
}
대한민국의 위경도는 구글 어스를 이용해서 대략적으로 찍어봤다.
TMapView 내부 코드를 찾아보니, 상수로 정의되어 있어서 해당 값을 사용하도록 변경했다.
지도 우측 하단에 보이는 T MAP 로고가 있는데, tMapView.setVisibleLogo(false)
코드를 사용해서 지울 수 있다.
지도와 관련된 모든 코드는 T MAP 지도가 사용할 준비가 된 이후에 호출해야 에러가 발생하지 않으므로 주의하자. tMapView.setOnMapReadyListener
를 통해 준비가 완료된 시점을 알 수 있다.
이전에 QGIS 에서 안드로이드 에뮬레이터 GPS를 조작하는 방법을 소개했는데, 좌표를 500개 정도 입력해도 움직임이 자연스럽지 않았다.
콘솔 창에서 에뮬레이터에 연결해서 GPS를 조작하는 명령어를 보낼 수 있다. 범위 내의 아무 포트나 연결한 후 auth_token을 입력했다. 이후 geo fix (longtitude) (latitude)를 입력해도 GPS가 변하지 않아서 포기했다😢
Send Emulator console commands | Android Developers
그래서 코드를 통해 GPS를 조작하고 싶었다. MockLocation을 사용할 수도 있지만, 개발자 설정에서 mockLocation을 사용할 수 있도록 앱 권한을 사용자가 직접 추가해야하는 번거로움이 있다. 그래서 T MAP 지도상에서 사용자가 움직이는 것처럼 보이도록 tMapView.setLocationPoint
함수를 사용했다.