[Kotlin] KakaoMap SDK 사용하기(메서드 사용편)

728x90

시험기간 동안 못 올리고 묵혀 놨던 공부더미들 다 올리느라 피곤하다.

앞으로는 공부한거 바로바로 올리기 진짜


Kakao Map을 적용해 보고 이것저것 해보고 싶어서 사용한 것들을 정리하는 공간.

DOCS만 잘 따라도 어려움이 없긴하다.

기본세팅

 

mView = MapView(this@MainActivity)
val mViewContainer = findViewById<RelativeLayout>(R.id.map_View)
mViewContainer.addView(mView)

Tracking Mode (자신의 좌표로 지도의 중심점이 바뀌거나 회전도 가능)

mView.currentLocationTrackingMode = MapView.CurrentLocationTrackingMode.TrackingModeOnWithoutHeading;

mView.currentLocationTrackingMode = 
                           MapView.CurrentLocationTrackingMode.TrackingModeOnWithoutHeading;

트래킹 옵션에는 여러가지가 있다.

TrackingModeOff

TrackingModeOnWithHeading

TrackingModeOnWithoutHeading

TrackingModeOnWithHeadingWithoutMapMoving

TrackingModeOnWithoutHeadingWithoutMapMoving

TrackingModeOnWithMarkerHeadingWithoutMapMoving

옵션의 단어가 직관적으로 되어 있어 따로 설명은 안 적고 넘어가기.

지도 배율 조정

mView.setZoomLevel(2,true)

지도 확대 축소인데, 정수만 가능하다 setZoomLevelFloat() 도 있긴한대 사용했을때 계속 에러가 떳다.. 왜지?

현재 사용자의 gps 좌표 받기

gpsPoint = mView.mapCenterPoint

트래킹 모드일 때 지도의 중심점 받아오면 된다. 간단해

지도 마커생성

var marker: MapPOIItem = MapPOIItem();
marker.tag = 0
marker.itemName = "Station"
marker.mapPoint = MapPoint.mapPointWithGeoCoord(36.540568, 128.794435)
marker.markerType = MapPOIItem.MarkerType.BluePin
marker.selectedMarkerType = MapPOIItem.MarkerType.RedPin
mView.addPOIItem(marker)

마커 생성을 하고나면 addPOIItem으로 추가 해주면 된다.

Map Listener 생성

class MainActivity : AppCompatActivity(), MapView.MapViewEventListener {
    lateinit var mView: MapView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mView = MapView(this@MainActivity)
        val mViewContainer = findViewById<RelativeLayout>(R.id.map_View)
        mViewContainer.addView(mView)
        mView.setMapViewEventListener(this)
}

리스너 다는 방식은 다 다르겠지만 이렇게 설정 해보았다.

 

https://jeongupark-study-house.tistory.com/11

Android - Kotlin을 사용하여 Listener 등록

 

하나 조심해야 하는게

익명 리스너로 만들어서 달아버리면 이상하게도 리스너가 동작을 안한다. 이거 때문에 한참 삽질했다.

 

리스너 종류

override fun onMapViewInitialized(p0: MapView?) {
}

override fun onMapViewCenterPointMoved(p0: MapView?, p1: MapPoint?) {
}

override fun onMapViewZoomLevelChanged(p0: MapView?, p1: Int) {
}

override fun onMapViewSingleTapped(p0: MapView?, p1: MapPoint?) {
}

override fun onMapViewDoubleTapped(p0: MapView?, p1: MapPoint?) {
}

override fun onMapViewLongPressed(p0: MapView?, p1: MapPoint?) {
}

override fun onMapViewDragStarted(p0: MapView?, p1: MapPoint?) {
}

override fun onMapViewDragEnded(p0: MapView?, p1: MapPoint?) {
}

override fun onMapViewMoveFinished(p0: MapView?, p1: MapPoint?) {
}

다 직관적이라 뭐하는 함수인지 알기 편했다.

내가 사용했을땐 활용도가 높은 것들만 리스너 처리 되어있는 것 같았다.

참고

https://apis.map.kakao.com/android/guide/

kakao map api main page

Kakao 지도 API

Kakao 지도 API를 이용해보세요. 다양한 샘플과 상세한 매뉴얼로 개발자분들의 시간을 아껴드리겠습니다!

apis.map.kakao.com


원래는 근처 정류장을 찾고 버스에 대한 정보를 불러오는 간단한 앱을 만들어 보려 했는데

딱히 버스를 안 타는 나에게 필요하지 않아 흥미가 떨어져 버려서 만들다가 중도 포기 해 버렸다...

실력을 키우려면 정말 여러가지 시도하고 부딫혀 봐야하는데 최대한 흥미를 유발할 수 있는 프로젝트를 구상해서

시도해야겠다.

그리고 버스앱 개발 중 문제가 하나 있었다.

바로 클러스터!

웹은 지원하면서 왜 앱은 지원을 안 해주는지 모르겠지만,,,

개발을 접어놓고 심심해서 찾아보니 클러스터를 라이브러리로 만들어 놓은 분이 계셨다.

https://gun0912.tistory.com/83?category=560271

[안드로이드]TedNaverMapClustering -네이버지도용 클러스터링 유틸리티 라이브러리

 

 

네이버 지도라고 되어있긴 하지만 어떤 지도든 상관없이 이식이 가능하다고 한다.

아직 써보진 않았지만 다음에 맵을 사용할 일이 있으면 유용할듯

 

GitHub - JungHm/testapp

Contribute to JungHm/testapp development by creating an account on GitHub.

github.com

728x90