Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
b09236d
add auto-translation script using OpenAI API
wf9a5m75 Dec 1, 2025
8c46f83
commonalize code blocks
wf9a5m75 Dec 3, 2025
015e238
Componentize all code blocks across all JA documentations
wf9a5m75 Dec 3, 2025
a9d4285
prevent crashes
wf9a5m75 Dec 4, 2025
5a8618b
wip: fixing the documents
wf9a5m75 Dec 4, 2025
bd3e44f
wip: fixing the documents
wf9a5m75 Dec 4, 2025
ee4bcf1
wip: fixing the documents
wf9a5m75 Dec 4, 2025
db75b31
wip: fixing the documents
wf9a5m75 Dec 4, 2025
3701da8
Merge branch 'main' into v1.1.3
wf9a5m75 Dec 4, 2025
3f10c47
wip: fixing the documents
wf9a5m75 Dec 4, 2025
de534a5
wip: fixing the documents
wf9a5m75 Dec 5, 2025
c0fbd48
wip: fixing the documents
wf9a5m75 Dec 5, 2025
0481347
wip: fixing the documents
wf9a5m75 Dec 5, 2025
ee760a0
wip: fixing the documents
wf9a5m75 Dec 5, 2025
233c046
Implement the sdkInitialize callback property for ArcGISMapView
wf9a5m75 Dec 10, 2025
5baa673
sample: sdkInitialize for ArcGISMapView
wf9a5m75 Dec 10, 2025
2aefe78
update: ArcGISMapViewHoler pages
wf9a5m75 Dec 10, 2025
1748042
import ArcGISOAuthHybridInitialize
wf9a5m75 Dec 11, 2025
bbd8519
fix: build error of the example-app
wf9a5m75 Dec 13, 2025
ef9b556
add the marker animation sections
wf9a5m75 Dec 15, 2025
efa1825
creating event page
wf9a5m75 Dec 16, 2025
39c26b1
fix: altitudeToZoomLevel is incorrect
wf9a5m75 Dec 19, 2025
fbdcc26
remove okhttp dependencies
wf9a5m75 Dec 19, 2025
5ce1eb0
remove event/onMapLoaded
wf9a5m75 Dec 19, 2025
3a5fbc1
wip
wf9a5m75 Dec 26, 2025
09fec07
fix: GeoPoint
wf9a5m75 Dec 27, 2025
46eec0d
fix: Align the class name with others: "MapLibreDesignType"
wf9a5m75 Dec 29, 2025
69408b1
add: some predefined map designs
wf9a5m75 Dec 29, 2025
997b5c6
feat: Polyline and Polygon components accepts GeoRectBounds
wf9a5m75 Dec 29, 2025
2b93a9b
fix: Align the class name with others: "MapLibreDesignType"
wf9a5m75 Dec 29, 2025
596820b
fix: GeoRectBounds.union generates a new bounds
wf9a5m75 Dec 29, 2025
88a89a5
add: some predefined map designs
wf9a5m75 Dec 29, 2025
fc9371b
update UnionBoundsExample
wf9a5m75 Dec 30, 2025
f3eac73
fix: new map tile designs for MapLibre cause a crash
wf9a5m75 Dec 30, 2025
859d5d2
fix: the title in the sidebar becomes under the camera position
wf9a5m75 Dec 30, 2025
6498274
refactor: move overlay event callbacks to state objects
wf9a5m75 Dec 31, 2025
c2d268d
feat: MapCameraPosition accepts GeoPoint object for the position para…
wf9a5m75 Dec 31, 2025
5f644f2
fix: changing marker.position does not work
wf9a5m75 Dec 31, 2025
02fd812
update examples
wf9a5m75 Dec 31, 2025
c90a24c
fix: linter errors
wf9a5m75 Dec 31, 2025
0c4064a
feat: MarkerRenderingStrategy is renamed to MarkerRenderingGroup, and…
wf9a5m75 Dec 31, 2025
3d152eb
Feature: Introducing MarkerClusterGroup (#86)
wf9a5m75 Jan 1, 2026
3431348
Add RasterLayer, TileServer-based HeatmapOverlay across providers (#87)
wf9a5m75 Jan 2, 2026
48aaaa5
add ARCHITECTURE.md
wf9a5m75 Jan 2, 2026
0bb25b8
fix: typo "durationMills" to "durationMillis"
wf9a5m75 Jan 2, 2026
81f48db
fix: onGroundImageClick is not used
wf9a5m75 Jan 2, 2026
fa2fb8a
rename: DefaultIcon is renamed to DefaultMarkerIcon
wf9a5m75 Jan 3, 2026
61f482a
refact: xxxImpl(実装) と xxx(インタフェース)を、xxx(実装)と xxxInterface(インタフェース)に変更
wf9a5m75 Jan 4, 2026
a5422de
split the core module into two modules: "core(jetpack runtime)" and "…
wf9a5m75 Jan 7, 2026
21f66ed
fix: ktLint errors
wf9a5m75 Jan 7, 2026
0d4ae39
Get rid of the MarkerRenderingGroup and MarkerClusterGroup from each …
wf9a5m75 Jan 8, 2026
ac4d02e
Add marker clustering demo
wf9a5m75 Jan 8, 2026
d297a59
refactor: some spherical functions were moved into each separate file
wf9a5m75 Jan 8, 2026
9c65969
feat: implement enableZoomAnimation for MarkerClusterGroup
wf9a5m75 Jan 8, 2026
66be543
remove old cluster marker after marker animation is done
wf9a5m75 Jan 8, 2026
d1428c2
remove old cluster marker after marker animation is done
wf9a5m75 Jan 8, 2026
fe4c3b0
optimize marker clustering performance on panning the map
wf9a5m75 Jan 8, 2026
1aabe83
optimize marker animation for marker clustering
wf9a5m75 Jan 9, 2026
e457aa1
optimize marker animation for marker clustering
wf9a5m75 Jan 9, 2026
151c61d
Provide TileServer feature by default instead of isolated module
wf9a5m75 Jan 9, 2026
5714d63
Merge branch 'v1.1.3' of github.com:MapConductor/android-sdk into v1.1.3
wf9a5m75 Jan 9, 2026
f5555e8
Put back the mapconductor-core-domain into the mapconductor-core module.
wf9a5m75 Jan 9, 2026
e2b27ea
rename "bitmap" to "image"
wf9a5m75 Jan 10, 2026
098ca2f
remove unused code
wf9a5m75 Jan 10, 2026
7623f2a
fix: Can not load OSM raster tile
wf9a5m75 Jan 10, 2026
8ef98ab
fix: Can not load OSM raster tile
wf9a5m75 Jan 10, 2026
b83b90d
introduce ChildCollector
wf9a5m75 Jan 11, 2026
53b9725
fix: heatmap tile drawing issue
wf9a5m75 Jan 11, 2026
176b9d6
implement GroundImage for MapLibre
wf9a5m75 Jan 11, 2026
732a839
implement GroundImage for Mapbox
wf9a5m75 Jan 11, 2026
4a59a3e
wip: heatmap optimization
wf9a5m75 Jan 11, 2026
4f07ff8
wip: heatmap optimization
wf9a5m75 Jan 11, 2026
65f430c
ignore .gradle-user-home
wf9a5m75 Jan 11, 2026
8b609be
implement GroundImage for Here
wf9a5m75 Jan 11, 2026
2fe6485
Merge branch 'v1.1.3' of github.com:MapConductor/android-sdk into v1.1.3
wf9a5m75 Jan 11, 2026
a6a8f46
feat: implement GroundImage for ArcGIS
wf9a5m75 Jan 11, 2026
41256fa
V1.1.3 sync ios (#88)
wf9a5m75 Jan 22, 2026
65ea10f
fix: marker tiling ignore the anchor and the scale properties
wf9a5m75 Jan 22, 2026
746e8c7
fix: build errors
wf9a5m75 Jan 22, 2026
837c4ac
introduce MarkerTileRendering
wf9a5m75 Jan 25, 2026
246be56
fix: ArcGIS camera bearing calculation is incorrect
wf9a5m75 Feb 5, 2026
f89a741
No longer necessary homography
wf9a5m75 Feb 5, 2026
42a6dd7
feat: introduce the hole property for Polygon
wf9a5m75 Feb 5, 2026
b5716ef
feat: introduce the hole property for Polygon
wf9a5m75 Feb 5, 2026
8a12281
feat: introduce the hole property for Polygon
wf9a5m75 Feb 5, 2026
22ae892
feat: introduce the hole property for Polygon
wf9a5m75 Feb 5, 2026
42b8a29
refact: align the zoom levels
wf9a5m75 Feb 5, 2026
3337932
feat: add zIndex property to map overlays and improve camera callbacks
wf9a5m75 Feb 5, 2026
8580da2
Remove unnecessary file
wf9a5m75 Feb 5, 2026
7d27856
fix: Marker click detection does not work when markerState.icon is null
wf9a5m75 Feb 5, 2026
1b83529
code cleanup
wf9a5m75 Feb 7, 2026
2da3574
Adjust the ArcGIZ Optimized zoom0 value
wf9a5m75 Feb 22, 2026
237bd7a
Adjusting the ArcGIZ zoom levels
wf9a5m75 Feb 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
introduce MarkerTileRendering
  • Loading branch information
wf9a5m75 committed Jan 25, 2026
commit 837c4ac47d5b2b3af1f14cdbd22d15ab33254a91
4 changes: 3 additions & 1 deletion .claude/settings.local.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@
"Bash(cat:*)",
"Read(//Users/masashi/.gradle/caches/**)",
"Bash(xargs jar tf:*)",
"Bash(npm run build:*)"
"Bash(npm run build:*)",
"WebFetch(domain:medium.com)",
"WebSearch"
],
"deny": [],
"ask": []
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
import { Code } from '@astrojs/starlight/components';

const code = `// Any provider state exposes getMapViewHolder()
val state = rememberGoogleMapViewState()

// May be null until the map is initialized
val holder = state.getMapViewHolder()

// Use the concrete holder type when you need provider-specific APIs
// (e.g. GoogleMapViewHolder / MapboxMapViewHolder / MapLibreMapViewHolder / ...)
// holder?.googleMap?.uiSettings?.isZoomControlsEnabled = false`
---

<Code code={code} lang="kotlin" />

53 changes: 53 additions & 0 deletions docs/src/content/docs/core/service-registry.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
---
title: "Map Service Registry"
---

MapConductor provides a lightweight “plugin” mechanism called `MapServiceRegistry`.
It lets feature modules (like marker clustering/strategies) integrate with any provider module without requiring the provider’s `MapViewController` to implement feature-specific interfaces.

## How It Works (Android)

- Each `MapView` can provide a map-scoped registry.
- `MapViewBase` exposes it via the CompositionLocal `LocalMapServiceRegistry`.
- Feature modules resolve capabilities from the registry at runtime.

This keeps modules decoupled: provider modules “register” capabilities, and feature modules “use” them.

## Marker Rendering Support

Marker clustering and strategy-based rendering need a provider-specific renderer/controller.
Providers expose that via:

- `MarkerRenderingSupport<ActualMarker>`
- `MarkerRenderingSupportKey` (registry key)

Built-in provider modules register `MarkerRenderingSupportKey` automatically, so `mapconductor-marker-clustering` works without any inheritance between controllers and feature interfaces.

## Custom Provider Integration (Android)

If you are implementing your own provider module, register `MarkerRenderingSupport` into a `MutableMapServiceRegistry` and pass it to `MapViewBase`.

```kotlin
val serviceRegistry =
remember {
MutableMapServiceRegistry().apply {
put(MarkerRenderingSupportKey, myMarkerRenderingSupport)
}
}

MapViewBase(
state = state,
/* ... */
serviceRegistry = serviceRegistry,
)
```

## iOS / SwiftUI Note

The iOS SDK mirrors the same idea using SwiftUI `Environment`:

- `EnvironmentValues.mapServiceRegistry`
- `MarkerRenderingSupportKey<ActualMarker>`

Provider views register capabilities into the registry so feature modules can remain provider-agnostic.

42 changes: 42 additions & 0 deletions docs/src/content/docs/es-419/core/service-registry.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
title: "Map Service Registry"
---

MapConductor ofrece un mecanismo ligero de “plugins” llamado `MapServiceRegistry`.
Permite que módulos de funcionalidades (como clustering/estrategias de marcadores) se integren con cualquier proveedor sin forzar que el `MapViewController` del proveedor implemente interfaces específicas.

## Cómo funciona (Android)

- Cada `MapView` puede proporcionar un registro con alcance del mapa.
- `MapViewBase` lo expone mediante el CompositionLocal `LocalMapServiceRegistry`.
- Los módulos de funcionalidades resuelven capabilities desde el registro en tiempo de ejecución.

## MarkerRenderingSupport

El clustering y el renderizado por estrategia requieren un renderer/controller específico del proveedor.
Los proveedores lo exponen con:

- `MarkerRenderingSupport<ActualMarker>`
- `MarkerRenderingSupportKey` (clave del registro)

Los módulos de proveedor incluidos ya registran `MarkerRenderingSupportKey`, por lo que `mapconductor-marker-clustering` funciona sin herencia.

## Integración con un proveedor propio (Android)

Registra `MarkerRenderingSupport` en un `MutableMapServiceRegistry` y pásalo a `MapViewBase`.

```kotlin
val serviceRegistry =
remember {
MutableMapServiceRegistry().apply {
put(MarkerRenderingSupportKey, myMarkerRenderingSupport)
}
}

MapViewBase(
state = state,
/* ... */
serviceRegistry = serviceRegistry,
)
```

46 changes: 46 additions & 0 deletions docs/src/content/docs/ja/core/service-registry.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
title: "Map Service Registry"
---

MapConductor には、軽量な「プラグイン」機構として `MapServiceRegistry` があります。
地図SDKモジュール(Google Maps / Mapbox / MapLibre など)と、機能モジュール(クラスタリング / マーカー戦略など)を **継承に頼らずに** 連携させるための仕組みです。

## 仕組み(Android)

- 各 `MapView` が map-scoped なレジストリを提供します
- `MapViewBase` が CompositionLocal の `LocalMapServiceRegistry` で公開します
- 機能モジュール側はレジストリから capability を解決して利用します

つまり、地図SDKモジュールが capability を「登録」し、機能モジュールがそれを「利用」することで分離を保ちます。

## MarkerRenderingSupport

クラスタリングや strategy ベースのレンダリングは、地図SDKごとの renderer/controller が必要です。
それを `MarkerRenderingSupport<ActualMarker>` と `MarkerRenderingSupportKey` で表現します。

組み込みの地図SDKモジュールは `MarkerRenderingSupportKey` を自動登録するため、`mapconductor-marker-clustering` はコントローラの継承なしで動きます。

## 独自地図SDKモジュールでの連携(Android)

独自の地図SDKモジュールを実装する場合は、`MutableMapServiceRegistry` に `MarkerRenderingSupport` を登録し、それを `MapViewBase` に渡してください。

```kotlin
val serviceRegistry =
remember {
MutableMapServiceRegistry().apply {
put(MarkerRenderingSupportKey, myMarkerRenderingSupport)
}
}

MapViewBase(
state = state,
/* ... */
serviceRegistry = serviceRegistry,
)
```

## iOS / SwiftUI 補足

iOS でも同じ考え方で、SwiftUI `Environment` にレジストリを流し込みます(`EnvironmentValues.mapServiceRegistry`)。
provider 側が capability を登録することで、機能側は provider 非依存のまま拡張できます。

Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.mapconductor.core.map.MapViewStateInterface
import com.mapconductor.core.map.OnCameraMoveHandler
import com.mapconductor.core.map.OnMapEventHandler
import com.mapconductor.core.map.OnMapLoadedHandler
import com.mapconductor.core.marker.MarkerTilingOptions
import com.mapconductor.googlemaps.GoogleMapView
import com.mapconductor.googlemaps.GoogleMapViewState
import com.mapconductor.here.HereMapView
Expand All @@ -23,6 +24,7 @@ import com.mapconductor.maplibre.MapLibreViewState
fun MapViewContainer(
modifier: Modifier = Modifier,
state: MapViewStateInterface<*>? = null,
markerTiling: MarkerTilingOptions? = null,
onMapLoaded: OnMapLoadedHandler? = null,
onMapClick: OnMapEventHandler? = null,
onCameraMoveStart: OnCameraMoveHandler? = null,
Expand All @@ -36,6 +38,7 @@ fun MapViewContainer(
GoogleMapView(
modifier = modifier,
state = state,
markerTiling = markerTiling,
onMapLoaded = onMapLoaded,
onMapClick = onMapClick,
onCameraMoveStart = onCameraMoveStart,
Expand All @@ -48,6 +51,7 @@ fun MapViewContainer(
HereMapView(
modifier = modifier,
state = state,
markerTiling = markerTiling,
onMapLoaded = onMapLoaded,
onMapClick = onMapClick,
onCameraMoveStart = onCameraMoveStart,
Expand All @@ -60,6 +64,7 @@ fun MapViewContainer(
MapboxMapView(
modifier = modifier,
state = state,
markerTiling = markerTiling,
onMapLoaded = onMapLoaded,
onMapClick = onMapClick,
onCameraMoveStart = onCameraMoveStart,
Expand All @@ -72,6 +77,7 @@ fun MapViewContainer(
ArcGISMapView(
modifier = modifier,
state = state,
markerTiling = markerTiling,
onMapLoaded = onMapLoaded,
onMapClick = onMapClick,
onCameraMoveStart = onCameraMoveStart,
Expand All @@ -84,6 +90,7 @@ fun MapViewContainer(
MapLibreMapView(
modifier = modifier,
state = state,
markerTiling = markerTiling,
onMapLoaded = onMapLoaded,
onMapClick = onMapClick,
onCameraMoveStart = onCameraMoveStart,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,35 +1,40 @@
package com.mapconductor.example.pages.heatmaplayer

import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import com.mapconductor.core.map.MapViewStateInterface
import com.mapconductor.core.map.OnMapLoadedHandler
import com.mapconductor.example.MapViewContainer
import com.mapconductor.heatmap.HeatmapOverlay
import com.mapconductor.heatmap.HeatmapPoint
import com.mapconductor.heatmap.HeatmapPointState
import com.mapconductor.heatmap.HeatmapPoints
import com.mapconductor.postoffice.PostOffice

@Composable
fun HeatmapLayerMapComponent(
mapViewState: MapViewStateInterface<*>?,
points: List<PostOffice>,
points: List<HeatmapPointState>,
modifier: Modifier = Modifier,
onMapLoaded: OnMapLoadedHandler? = null,
) {
val heatmapPoints =
remember(points) {
points.map {
HeatmapPointState(
position = it.position,
)
}
}
mapViewState?.let { it ->
MapViewContainer(
modifier = modifier,
state = it,
onMapLoaded = onMapLoaded,
) {
HeatmapOverlay {
points.forEach { point ->
HeatmapPoint(
position = point.position
)
}
HeatmapPoints(heatmapPoints)
}

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModel
import com.mapconductor.core.features.GeoPoint
import com.mapconductor.core.map.MapCameraPosition
import com.mapconductor.core.map.MapViewStateInterface
import com.mapconductor.heatmap.HeatmapPointState
import com.mapconductor.postoffice.PostOffice
import com.mapconductor.postoffice.PostOfficeDataLoader
import java.lang.Thread.sleep
Expand All @@ -17,7 +18,7 @@ import kotlinx.coroutines.launch
interface HeatmapLayerViewModelInterface {
val initCameraPosition: MapCameraPosition

val points: StateFlow<List<PostOffice>>
val points: StateFlow<List<HeatmapPointState>>
val mapViewState: StateFlow<MapViewStateInterface<*>?>
val isMapLoaded: StateFlow<Boolean>
val isDataLoading: StateFlow<Boolean>
Expand Down Expand Up @@ -46,8 +47,8 @@ class HeatmapLayerPageViewModel(
tilt = 0.0,
paddings = null,
)
private val _points: MutableStateFlow<List<PostOffice>> = MutableStateFlow(emptyList())
override val points: StateFlow<List<PostOffice>> = _points.asStateFlow()
private val _points: MutableStateFlow<List<HeatmapPointState>> = MutableStateFlow(emptyList())
override val points: StateFlow<List<HeatmapPointState>> = _points.asStateFlow()

private val _isMapLoaded: MutableStateFlow<Boolean> = MutableStateFlow(false)
override val isMapLoaded: StateFlow<Boolean> = _isMapLoaded.asStateFlow()
Expand All @@ -65,9 +66,7 @@ class HeatmapLayerPageViewModel(

coroutine.launch {
_isDataLoading.value = true
sleep(3000)
_points.value = dataLoader.loadAllPostOffices()
sleep(1000)
_points.value = dataLoader.loadAllPostOffices().map { HeatmapPointState(it.position) }
_isDataLoading.value = false
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import com.mapconductor.core.map.OnMapEventHandler
import com.mapconductor.core.map.OnMapLoadedHandler
import com.mapconductor.core.marker.Marker
import com.mapconductor.core.marker.MarkerState
import com.mapconductor.core.marker.MarkerTilingOptions
import com.mapconductor.core.marker.Markers
import com.mapconductor.example.MapViewContainer
import com.mapconductor.postoffice.PostOffice
Expand All @@ -22,6 +23,7 @@ import com.mapconductor.postoffice.PostOfficeInfoView
fun PostOfficeMapComponent(
modifier: Modifier = Modifier,
mapViewState: MapViewStateInterface<*>,
markerTiling: MarkerTilingOptions? = null,
selectedMarker: MarkerState?,
markers: List<MarkerState> = emptyList<MarkerState>(),
onMapLoaded: OnMapLoadedHandler? = null,
Expand All @@ -36,6 +38,7 @@ fun PostOfficeMapComponent(
MapViewContainer(
modifier = modifier,
state = mapViewState,
markerTiling = markerTiling,
onMapLoaded = onMapLoaded,
onMapClick = onMapClick,
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ fun PostOfficePage(
) {
mapViewState?.let { mapViewState ->
PostOfficeMapComponent(
markerTiling = viewModel.markerTiling,
mapViewState = mapViewState,
selectedMarker = selectedMarker,
markers = markers,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.mapconductor.core.map.MapCameraPosition
import com.mapconductor.core.map.MapViewStateInterface
import com.mapconductor.core.marker.ImageIcon
import com.mapconductor.core.marker.MarkerState
import com.mapconductor.core.marker.MarkerTilingOptions
import com.mapconductor.postoffice.PostOffice
import com.mapconductor.postoffice.PostOfficeDataLoader
import java.lang.Thread.sleep
Expand All @@ -23,6 +24,7 @@ interface PostOfficeViewModelInterface {
val mapViewState: StateFlow<MapViewStateInterface<*>?>
val isMapLoaded: StateFlow<Boolean>
val isDataLoading: StateFlow<Boolean>
val markerTiling: MarkerTilingOptions

fun onMapViewChanged(mapViewState: MapViewStateInterface<*>)

Expand Down Expand Up @@ -58,6 +60,22 @@ class PostOfficeViewModel(
private val _markerList: MutableStateFlow<List<MarkerState>> = MutableStateFlow(emptyList())
override val markerList: StateFlow<List<MarkerState>> = _markerList.asStateFlow()

override val markerTiling: MarkerTilingOptions = MarkerTilingOptions.Default.copy(
iconScaleCallback = { _, zoom ->
if (zoom > 12.0) {
return@copy 1.3
} else if (zoom > 10.0) {
return@copy 1.0
} else if (zoom > 8.0) {
return@copy 0.8
} else if (zoom > 5.0) {
return@copy 0.5
} else {
return@copy 0.2
}
}
)

private val _isMapLoaded: MutableStateFlow<Boolean> = MutableStateFlow(false)
override val isMapLoaded: StateFlow<Boolean> = _isMapLoaded.asStateFlow()

Expand Down
Loading
Loading