카카오맵 v2 Poi 클릭(with kotlin)

Purang·2024년 8월 2일

오늘은 Custom 한 Poi 클릭 리스너를 등록해보겠다.
버전 2.11.9 여태 KakaoMap?.setOnPoiClickListener이 PoiClickListener 로 이벤트가 들어오지 않는 부분은 API 에 문제가 있었던 것 같습니다.

그래서 이번에 배포된 2.11.9 신 버전으로 고쳐 보도록하겠습니다.

// override fun onMapReady의 안
// 현재 위치를 나타낼 label를 그리기 위해 kakaomap 인스턴스에서 LabelLayer를 가져옵니다.
//poi 생성
                    val layer = kakaoMap.labelManager!!.layer
                    startPosition = LatLng.from(pendingLocationData!!.latitude, pendingLocationData!!.longitude)
                    // LabelLayer에 라벨을 추가합니다. 카카오 지도 API 공식 문서에 지도에서 사용하는 이미지는 drawable-nodpi/ 에 넣는 것을 권장합니다.
                    //Label 을 생성하기 위해 초기화 값을 설정하는 클래스.
                    centerLabel = layer!!.addLabel(
                        LabelOptions.from(pendingLocationData!!.postId.toString(), startPosition)
                            .setStyles(
                                LabelStyle.from(R.drawable.map_poi_sr2).setAnchorPoint(0.5f, 0.5f)
                            )
                            .setRank(1) //우선순위
                    )
                    trackingManager!!.startTracking(centerLabel)


kakaoMapValue!!.setOnMapClickListener { kakaoMap, latLng, pointF, poi ->
                    // POI 정보창 표시
                    //showInfoWindow(position, poi)
                    //showInfoWindow(poi, pointF)

                    Log.e("kakaoMapValue", "$latLng $pointF ${poi.name}")
                    Log.e("poi click", poi.name)
                    Log.e("poi click", poi.poiId)
                    Log.e("poi click", poi.isPoi.toString())
                    Log.e("poi click", poi.isPoi().toString())
                    Log.e("poi click", poi.getPoiId())
                    /*if (poi.isPoi()) {
                        Log.e("poi click", "popopipipipiopoiipio")
                    }*/
                }

kakaoMapValue!!.setOnLabelClickListener { _, _, label ->
                    if (label != null) { //return 값이 true 이면, 이벤트가 OnLabelClickListener 에서 끝난다.
                        trackingManager?.startTracking(label)
                        return@setOnLabelClickListener true
                    } else { //return 값이 false 이면, 이벤트가 OnPoiClickListener, OnMapClickListener 까지 전달된다.
                        return@setOnLabelClickListener false
                    }
                }

위와 같은 방식으로 poi와 label의 클릭이벤트를 처리할 수 있게 되었다.

profile
몰입의 즐거움

0개의 댓글