Skip to content

A modern, Kotlin-first, MIT-licensed MapView replacement for Android — powered by OpenStreetMap. Drop-in compatible with Google MapView (non-deprecated methods only). Built for performance, offline support, and full control.

License

afarber/OpenMapView

Repository files navigation

CI Daily Tests Release codecov API Documentation

OpenMapView

A modern, Kotlin-first MapView replacement for Android — powered by OpenStreetMap.

Installation

Add to your build.gradle.kts:

dependencies {
    implementation("de.afarber:openmapview:0.2.0")
}

The library is available on Maven Central. Alternative distribution via JitPack is also supported.

Features

  • Drop-in compatible with Google MapView (non-deprecated methods only)
  • Lightweight, pure Kotlin implementation
  • OSM tiles via standard APIs
  • Smooth camera animations with customizable durations
  • Extensible marker, overlay, and gesture handling
  • MIT licensed (use freely in commercial apps)

API Documentation

Full API reference documentation is available at afarber.github.io/OpenMapView.

The documentation is automatically generated from KDoc comments and updated with every commit to main.

Examples

Explore the example applications to see OpenMapView in action:

Example01Pan - Basic Map Panning

Example01Pan

Demonstrates basic map tile rendering and touch pan gestures.

Example02Zoom - Zoom Controls and Gestures

Example02Zoom

Shows zoom functionality with FAB controls and pinch-to-zoom gestures.

Example03Markers - Marker Overlays

Example03Markers

Demonstrates marker system with custom icons and click handling.

Example04Polylines - Polylines and Polygons

Example04Polylines

Shows how to draw vector shapes including polylines, filled polygons, and polygons with holes.

Example05Camera - Camera Animations

Example05Camera

Demonstrates smooth camera animations with customizable durations and completion callbacks.

Documentation

Getting Started

With Jetpack Compose

@Composable
fun MapViewScreen() {
    val lifecycleOwner = androidx.lifecycle.compose.LocalLifecycleOwner.current

    AndroidView(
        factory = { context ->
            OpenMapView(context).apply {
                // Register lifecycle observer for proper cleanup
                lifecycleOwner.lifecycle.addObserver(this)

                setCenter(LatLng(51.4661, 7.2491))
                setZoom(14.0)

                // Add markers (optional)
                addMarker(Marker(
                    position = LatLng(51.4661, 7.2491),
                    title = "Bochum City Center"
                ))
            }
        },
        modifier = Modifier.fillMaxSize()
    )
}

With XML Layouts

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val mapView = findViewById<OpenMapView>(R.id.mapView)
        mapView.setZoom(14.0)
        mapView.setCenter(LatLng(51.4661, 7.2491))
    }
}

About

A modern, Kotlin-first, MIT-licensed MapView replacement for Android — powered by OpenStreetMap. Drop-in compatible with Google MapView (non-deprecated methods only). Built for performance, offline support, and full control.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published