시험기간 동안 못 올리고 묵혀 놨던 공부더미들 다 올리느라 피곤하다.
앞으로는 공부한거 바로바로 올리기 진짜
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 지도 API
Kakao 지도 API를 이용해보세요. 다양한 샘플과 상세한 매뉴얼로 개발자분들의 시간을 아껴드리겠습니다!
apis.map.kakao.com
원래는 근처 정류장을 찾고 버스에 대한 정보를 불러오는 간단한 앱을 만들어 보려 했는데
딱히 버스를 안 타는 나에게 필요하지 않아 흥미가 떨어져 버려서 만들다가 중도 포기 해 버렸다...
실력을 키우려면 정말 여러가지 시도하고 부딫혀 봐야하는데 최대한 흥미를 유발할 수 있는 프로젝트를 구상해서
시도해야겠다.
그리고 버스앱 개발 중 문제가 하나 있었다.
바로 클러스터!
웹은 지원하면서 왜 앱은 지원을 안 해주는지 모르겠지만,,,
개발을 접어놓고 심심해서 찾아보니 클러스터를 라이브러리로 만들어 놓은 분이 계셨다.
https://gun0912.tistory.com/83?category=560271
[안드로이드]TedNaverMapClustering -네이버지도용 클러스터링 유틸리티 라이브러리
네이버 지도라고 되어있긴 하지만 어떤 지도든 상관없이 이식이 가능하다고 한다.
아직 써보진 않았지만 다음에 맵을 사용할 일이 있으면 유용할듯