From 9c4a6325e76e23cb8c84436f59153f13f2aa0fd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Duy=20Ph=E1=BA=A1m?= Date: Tue, 3 Dec 2024 16:10:59 +0700 Subject: [PATCH 1/2] Fix naming and function modifier --- .../compose/maps/providers/mapbox/W3WMapBoxDrawers.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib-compose/src/main/java/com/what3words/components/compose/maps/providers/mapbox/W3WMapBoxDrawers.kt b/lib-compose/src/main/java/com/what3words/components/compose/maps/providers/mapbox/W3WMapBoxDrawers.kt index 4101d88d..5b5f13b8 100644 --- a/lib-compose/src/main/java/com/what3words/components/compose/maps/providers/mapbox/W3WMapBoxDrawers.kt +++ b/lib-compose/src/main/java/com/what3words/components/compose/maps/providers/mapbox/W3WMapBoxDrawers.kt @@ -55,7 +55,7 @@ fun W3WMapBoxDrawer(state: W3WMapState, mapConfig: W3WMapDefaults.MapConfig) { } if (state.listMakers.isNotEmpty()) { - W3WMapBoxDrawSavedAddress( + W3WMapBoxDrawMarkers( cameraState.getZoomLevel(), mapConfig.gridLineConfig.zoomSwitchLevel, state.listMakers @@ -107,15 +107,15 @@ fun W3WMapBoxDrawSelectedAddress( @Composable @MapboxMapComposable -fun W3WMapBoxDrawSavedAddress( +fun W3WMapBoxDrawMarkers( zoomLevel: Float, zoomSwitchLevel: Float, listMakers: ImmutableMap> ) { if (zoomLevel < zoomSwitchLevel) { - DrawZoomOutSavedMarkers(listMakers) + DrawZoomOutMarkers(listMakers) } else { - DrawZoomInSavedMarkers(listMakers) + DrawZoomInMarkers(listMakers) } } @@ -216,7 +216,7 @@ private fun DrawZoomInSelectedAddress( zoomSwitchLevel: Float ) { val context = LocalContext.current - selectedMarker.square?.let { square -> + selectedMarker.square.let { square -> PolylineAnnotation( points = listOf( Point.fromLngLat(square.southwest.lng, square.northeast.lat), From 8200b81e38d8021911dffe0c2717e9f63f276e63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Duy=20Ph=E1=BA=A1m?= Date: Tue, 3 Dec 2024 16:11:12 +0700 Subject: [PATCH 2/2] Draw zoom in markers on GoogleMap --- .../providers/googlemap/W3WGoogleMapDrawer.kt | 64 +++++++++++++++---- .../maps/providers/mapbox/W3WMapBoxDrawers.kt | 20 +++--- 2 files changed, 60 insertions(+), 24 deletions(-) diff --git a/lib-compose/src/main/java/com/what3words/components/compose/maps/providers/googlemap/W3WGoogleMapDrawer.kt b/lib-compose/src/main/java/com/what3words/components/compose/maps/providers/googlemap/W3WGoogleMapDrawer.kt index 085beaa5..b07325f5 100644 --- a/lib-compose/src/main/java/com/what3words/components/compose/maps/providers/googlemap/W3WGoogleMapDrawer.kt +++ b/lib-compose/src/main/java/com/what3words/components/compose/maps/providers/googlemap/W3WGoogleMapDrawer.kt @@ -12,7 +12,10 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity import com.google.android.gms.maps.model.BitmapDescriptorFactory import com.google.android.gms.maps.model.LatLng +import com.google.android.gms.maps.model.LatLngBounds import com.google.maps.android.compose.GoogleMapComposable +import com.google.maps.android.compose.GroundOverlay +import com.google.maps.android.compose.GroundOverlayPosition import com.google.maps.android.compose.Marker import com.google.maps.android.compose.Polyline import com.google.maps.android.compose.rememberMarkerState @@ -25,6 +28,7 @@ import com.what3words.components.compose.maps.state.MarkerStatus import com.what3words.components.compose.maps.state.W3WMapState import com.what3words.components.compose.maps.state.isExistInOtherList import com.what3words.components.compose.maps.state.isMarkerInSavedList +import com.what3words.components.compose.maps.utils.getFillGridMarkerBitmap import com.what3words.components.compose.maps.utils.getMarkerBitmap import com.what3words.components.compose.maps.utils.getPinBitmap import com.what3words.map.components.compose.R @@ -64,6 +68,17 @@ fun W3WGoogleMapDrawer( ) } + if (state.listMakers.isNotEmpty()) { + //Draw the markers + W3WGoogleMapDrawMarkers( + zoomLevel = cameraState.getZoomLevel(), + zoomSwitchLevel = mapConfig.gridLineConfig.zoomSwitchLevel, + selectedMarkerID = if (markerStatus != MarkerStatus.NotSaved) state.selectedAddress?.id else null, + listMarkers = state.listMakers, + onMarkerClicked = onMarkerClicked + ) + } + if (state.selectedAddress != null) { //Draw the selected address W3WGoogleMapDrawSelectedAddress( @@ -74,18 +89,6 @@ fun W3WGoogleMapDrawer( ), ) } - - - if(state.listMakers.isNotEmpty()) { - //Draw the markers - W3WGoogleMapDrawMarkers( - zoomLevel = cameraState.getZoomLevel(), - zoomSwitchLevel = mapConfig.gridLineConfig.zoomSwitchLevel, - selectedMarkerID = if(markerStatus != MarkerStatus.NotSaved) state.selectedAddress?.id else null, - listMarkers = state.listMakers, - onMarkerClicked = onMarkerClicked - ) - } } } @@ -249,7 +252,34 @@ private fun DrawZoomInMarkers( listMarkers: ImmutableMap>, onMarkerClicked: ((W3WMarker) -> Unit)? = null, ) { - //TODO: GroundOverlay for list markers bitmap square + val context = LocalContext.current + val density = LocalDensity.current.density + + listMarkers.forEach { markers -> + markers.value.forEach { marker -> + val bitmap = BitmapDescriptorFactory.fromBitmap( + getFillGridMarkerBitmap( + context, + density, + marker.color + ) + ) + val square = marker.square + + GroundOverlay( + position = GroundOverlayPosition.create( + LatLngBounds( + LatLng( + square.southwest.lat, + square.southwest.lng + ), + LatLng(square.northeast.lat, square.northeast.lng) + ) + ), + image = bitmap, + ) + } + } } @Composable @@ -272,7 +302,13 @@ private fun DrawZoomOutMarkers( marker.color } - BitmapDescriptorFactory.fromBitmap(getPinBitmap(context, density = density, colorMarker = color)) + BitmapDescriptorFactory.fromBitmap( + getPinBitmap( + context, + density = density, + colorMarker = color + ) + ) } Marker( diff --git a/lib-compose/src/main/java/com/what3words/components/compose/maps/providers/mapbox/W3WMapBoxDrawers.kt b/lib-compose/src/main/java/com/what3words/components/compose/maps/providers/mapbox/W3WMapBoxDrawers.kt index 5b5f13b8..1a90cdea 100644 --- a/lib-compose/src/main/java/com/what3words/components/compose/maps/providers/mapbox/W3WMapBoxDrawers.kt +++ b/lib-compose/src/main/java/com/what3words/components/compose/maps/providers/mapbox/W3WMapBoxDrawers.kt @@ -45,6 +45,14 @@ fun W3WMapBoxDrawer(state: W3WMapState, mapConfig: W3WMapDefaults.MapConfig) { ) } + if (state.listMakers.isNotEmpty()) { + W3WMapBoxDrawMarkers( + cameraState.getZoomLevel(), + mapConfig.gridLineConfig.zoomSwitchLevel, + state.listMakers + ) + } + if (state.selectedAddress != null) { //Draw the selected address W3WMapBoxDrawSelectedAddress( @@ -53,14 +61,6 @@ fun W3WMapBoxDrawer(state: W3WMapState, mapConfig: W3WMapDefaults.MapConfig) { selectedMarker = state.selectedAddress ) } - - if (state.listMakers.isNotEmpty()) { - W3WMapBoxDrawMarkers( - cameraState.getZoomLevel(), - mapConfig.gridLineConfig.zoomSwitchLevel, - state.listMakers - ) - } } } @@ -121,7 +121,7 @@ fun W3WMapBoxDrawMarkers( @Composable @MapboxMapComposable -private fun DrawZoomOutSavedMarkers( +private fun DrawZoomOutMarkers( listMarkers: ImmutableMap>, ) { val context = LocalContext.current @@ -150,7 +150,7 @@ private fun DrawZoomOutSavedMarkers( @Composable @MapboxMapComposable -private fun DrawZoomInSavedMarkers( +private fun DrawZoomInMarkers( listMarkers: ImmutableMap>, ) { val context = LocalContext.current