You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
우선 저번에 만들어주셨던 MarkerComposable 를 잘 사용하고 있습니다 감사합니다ㅎ
혹시 Clustering Marker 도 Composable 함수를 통해 커스텀이 가능한지, 지원이 가능한지 문의드립니다.
일반적은 마커의 경우 컴포저블 함수인 MarkerComposable 사용하여 원하는 형태의 마커를 구현할 수 있었으나,
클러스터링 마커의 경우 .cluserMarkerUpdate(), .leafMarkerUpdater 내에 updateClusterMarker 함수 혹은 updateLeafMarker 함수 내에서 marker 에 대한 설정을 할 수 있으므로, 컴포저블 함수인 MarkerComposable 함수를 사용할 수 없었습니다.
@OptIn(ExperimentalNaverMapApi::class)
@Composable
funMapContent(
uiState:MapUiState,
cameraPositionState:CameraPositionState,
rotationState:Float,
pagerState:PagerState,
onMapUiAction: (MapUiAction) ->Unit,
onFestivalUiAction: (FestivalUiAction) ->Unit,
) {
// val context = LocalContext.currentBox {
// TODO 같은 속성(주점, 이벤트)의 Marker 들만 클러스터링 되도록 구현// TODO 클러스터링 마커 커스텀NaverMap(
cameraPositionState = cameraPositionState,
locationSource = rememberFusedLocationSource(),
uiSettings =MapUiSettings(
isZoomControlEnabled =false,
isScaleBarEnabled =false,
isLogoClickEnabled =false,
),
properties =MapProperties(
locationTrackingMode =LocationTrackingMode.NoFollow,
),
) {
PolygonOverlay(
coords = uiState.outerCords,
color =Color.Gray.copy(alpha =0.3f),
outlineColor =Color.Gray,
outlineWidth =1.dp,
holes = persistentListOf(uiState.innerHole),
)
uiState.filteredBoothsList.forEach { booth ->Marker(
state =MarkerState(position = booth.position),
icon =MarkerCategory.fromString(booth.category).getMarkerIcon(booth.isSelected),
onClick = {
// onMapUiAction(MapUiAction.OnBoothMarkerClick(booth))true
},
)
MarkerComposable {}
}
var clusterManager by remember { mutableStateOf<Clusterer<BoothMapModel>?>(null) }
DisposableMapEffect(uiState.boothList) { map ->if (clusterManager ==null) {
clusterManager =Clusterer.Builder<BoothMapModel>()
.clusterMarkerUpdater(
object:DefaultClusterMarkerUpdater() {
overridefunupdateClusterMarker(info:ClusterMarkerInfo, marker:Marker) {
super.updateClusterMarker(info, marker)
MarkerComposable {} // <- error - @Composable invocations can only happen from the context of a @Composable functio
}
},
MarkerComposable {} // <- error - @Composable invocations can only happen from the context of a @Composable functio
)
.leafMarkerUpdater(
object:DefaultLeafMarkerUpdater() {
overridefunupdateLeafMarker(info:LeafMarkerInfo, marker:Marker) {
super.updateLeafMarker(info, marker)
marker.apply {
icon =MarkerCategory.fromString((info.key asBoothMapModel).category)
.getMarkerIcon((info.key asBoothMapModel).isSelected)
onClickListener =Overlay.OnClickListener {
onMapUiAction(MapUiAction.OnBoothMarkerClick(listOf(info.key asBoothMapModel)))
true
}
}
MarkerComposable {} // error - @Composable invocations can only happen from the context of a @Composable function
}
},
MarkerComposable {} // error - @Composable invocations can only happen from the context of a @Composable function
)
.build()
.apply { this.map = map }
}
val boothListMap = buildMap(uiState.boothList.size) {
uiState.boothList.forEachIndexed { index, booth ->
put(booth, index)
}
}
clusterManager?.addAll(boothListMap)
onDispose {
clusterManager?.clear()
}
}
// var clusterManager by remember { mutableStateOf<TedNaverClustering<BoothMapModel>?>(null) }// DisposableMapEffect(uiState.filteredBoothsList) { map ->// if (clusterManager == null) {// clusterManager = TedNaverClustering.with<BoothMapModel>(context, map)// .customMarker {// Marker().apply {// icon = MarkerCategory.fromString(it.category).getMarkerIcon(it.isSelected)// }// }// .markerClickListener { booth ->// onMapUiAction(MapUiAction.OnBoothMarkerClick(listOf(booth)))// }// .clusterClickListener { booths ->// onMapUiAction(MapUiAction.OnBoothMarkerClick(booths.items.toList()))// }// // 마커를 클릭 했을 경우 마커의 위치로 카메라 이동 비활성화// .clickToCenter(false)// .make()// }// clusterManager?.addItems(uiState.filteredBoothsList)// onDispose {// clusterManager?.clearItems()// }// }
}
목적은 아래의 사진과 같이 Clustering Marker 를 목적에 맞게 커스텀해서 구현하기 위함입니다.
(captionText 가 marker의 Design 내에 포함되는 경우, clustering marker 의 info.size 파라미터를 Marker View 의 파라미터로 추가해줘야하는 케이스)
읽어주셔서 감사합니다!
The text was updated successfully, but these errors were encountered:
우선 저번에 만들어주셨던 MarkerComposable 를 잘 사용하고 있습니다 감사합니다ㅎ
혹시 Clustering Marker 도 Composable 함수를 통해 커스텀이 가능한지, 지원이 가능한지 문의드립니다.
일반적은 마커의 경우 컴포저블 함수인 MarkerComposable 사용하여 원하는 형태의 마커를 구현할 수 있었으나,
클러스터링 마커의 경우 .cluserMarkerUpdate(), .leafMarkerUpdater 내에 updateClusterMarker 함수 혹은 updateLeafMarker 함수 내에서 marker 에 대한 설정을 할 수 있으므로, 컴포저블 함수인 MarkerComposable 함수를 사용할 수 없었습니다.
목적은 아래의 사진과 같이 Clustering Marker 를 목적에 맞게 커스텀해서 구현하기 위함입니다.
(captionText 가 marker의 Design 내에 포함되는 경우, clustering marker 의 info.size 파라미터를 Marker View 의 파라미터로 추가해줘야하는 케이스)
읽어주셔서 감사합니다!
The text was updated successfully, but these errors were encountered: