Overview
Map everything with KMaP: A flexible and powerful compose multiplatform mapping library
Check out the demo app on wasm target: KMaP Demo.
Project Status
- Raster tiles are stable and ready to use.
- Vector tiles are paused until Compose provides async measurement + async drawing APIs.
Key Features
- Cross-Platform Compatibility: Use a single KMaP Composable in your common code for a consistent user experience across all platforms.
- Interactive Elements: Features like zooming, panning, and rotating maps.
- Marker and Popup Support: Adding markers, popups, and tooltips to maps for enhanced interactivity.
- Layer Management: Support for multiple layers.
- Clustering: Visualizing data density with clustering markers.
- Offline Maps: Ability to use maps without an internet connection.
- Projection Support: Handling different map projections and coordinate systems.
- Performance: Efficient rendering and handling of large datasets.
- Easy Integration: Seamlessly integrate KMaP into your existing compose projects.
- Customizable: Tailor the map's behavior to fit your needs.
Usage Example
With KMaP, you implement your map logic once. Provide a MapProperties and a TileSource and use it across targets:
val mapProperties = /* your MapProperties implementation */
val tileSource = /* your TileSource<RasterTile> implementation */
val mapState = rememberMapState(mapProperties = mapProperties)
KMaP(
modifier = Modifier.fillMaxSize(),
mapState = mapState,
) {
rasterCanvas(
parameters = RasterCanvasParameters(
id = 1,
tileSource = tileSource::getTile,
),
gestureWrapper = MapGestureWrapper(
onGesture = { centroid, pan, zoom, rotation ->
mapState.motionController.move {
rotateByCentered(rotation.toDouble(), centroid)
zoomByCentered(zoom, centroid)
positionBy(pan)
}
},
)
)
}
For full working examples (including OSM properties and tile sources), see the demo app in the repo.