
Tile-based, reusable map UI component with viewport-aware tile loading, built-in gesture handling, multiple map providers, geo conversion utilities, overlay drawing and dynamic provider switching.
A platform-independent, tile-based map component written in pure Compose Multiplatform common code.
The reusable map library lives in tile-map and the samples folder show how to use the library.
tileMapPointerInput(...)
GeoPoint, TilePos, projection helpers)TileMapView(onDraw = { ... })
/tile-map: published Kotlin Multiplatform library module/samples/common: shared sample UI/composables using TileMapView
/samples/jvm: desktop runner for the sample app/samples/android: Android runner for the sample appPublished from tile-map:
de.drick.compose
multiplatformtilemap
dependencies {
implementation("de.drick.compose:multiplatformtilemap:<version>")
}@Composable
fun SimpleMap(mapboxToken: String) {
val state = rememberViewPortState(
initialZoom = 12f,
initPos = GeoPoint(52.5207, 13.4094), // Berlin
tileProvider = arrayOf(tileProviderMapBoxSat(mapboxToken))
)
TileMapView(
state = state,
modifier = Modifier
.fillMaxSize()
.tileMapPointerInput(state)
)
}@Composable
fun OverlayMap(state: ViewPortState, circles: List<Pair<GeoPoint, Float>>) {
TileMapView(
state = state,
modifier = Modifier
.fillMaxSize()
.tileMapPointerInput(state)
) {
circles.forEach { (point, radiusPx) ->
drawCircle(
color = Color.Red.copy(alpha = 0.3f),
center = point.toOffset(),
radius = radiusPx
)
}
}
}samples/common/src/commonMain/kotlin/de/drick/compose/tilemap/sample/SampleApp.kt
onDraw, polygons/circles):
samples/common/src/commonMain/kotlin/de/drick/compose/tilemap/sample/test_vector_uav_zones.kt
Run desktop sample:
./gradlew :samples:jvm:runA platform-independent, tile-based map component written in pure Compose Multiplatform common code.
The reusable map library lives in tile-map and the samples folder show how to use the library.
tileMapPointerInput(...)
GeoPoint, TilePos, projection helpers)TileMapView(onDraw = { ... })
/tile-map: published Kotlin Multiplatform library module/samples/common: shared sample UI/composables using TileMapView
/samples/jvm: desktop runner for the sample app/samples/android: Android runner for the sample appPublished from tile-map:
de.drick.compose
multiplatformtilemap
dependencies {
implementation("de.drick.compose:multiplatformtilemap:<version>")
}@Composable
fun SimpleMap(mapboxToken: String) {
val state = rememberViewPortState(
initialZoom = 12f,
initPos = GeoPoint(52.5207, 13.4094), // Berlin
tileProvider = arrayOf(tileProviderMapBoxSat(mapboxToken))
)
TileMapView(
state = state,
modifier = Modifier
.fillMaxSize()
.tileMapPointerInput(state)
)
}@Composable
fun OverlayMap(state: ViewPortState, circles: List<Pair<GeoPoint, Float>>) {
TileMapView(
state = state,
modifier = Modifier
.fillMaxSize()
.tileMapPointerInput(state)
) {
circles.forEach { (point, radiusPx) ->
drawCircle(
color = Color.Red.copy(alpha = 0.3f),
center = point.toOffset(),
radius = radiusPx
)
}
}
}samples/common/src/commonMain/kotlin/de/drick/compose/tilemap/sample/SampleApp.kt
onDraw, polygons/circles):
samples/common/src/commonMain/kotlin/de/drick/compose/tilemap/sample/test_vector_uav_zones.kt
Run desktop sample:
./gradlew :samples:jvm:run