Add geometry

Estimated reading time: 2 minutes

Check out this code sample that uses the MapLibre Android library to add a geometry from GeoJSON onto your map.

add geometry

View on GitHub

package io.jawg.example.maplibre

import android.app.Activity
import android.os.Bundle
import org.maplibre.android.MapLibre
import org.maplibre.android.maps.MapView
import org.maplibre.android.style.layers.LineLayer
import org.maplibre.android.style.layers.Property
import org.maplibre.android.style.layers.PropertyFactory
import org.maplibre.android.style.sources.GeoJsonSource
import org.maplibre.geojson.Feature

class GeometryMapActivity : Activity() {

    private lateinit var mapView: MapView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Get your access-token on the Lab: https://www.jawg.io/lab/access-tokens
        val accessToken = getString(R.string.jawg_access_token)
        val styleId = "jawg-dark"
        val styleUrl = "https://api.jawg.io/styles/$styleId.json?access-token=$accessToken"

        // Init MapLibre
        MapLibre.getInstance(this)
        // Then set the activity layout
        setContentView(R.layout.activity_geometry_map)

        // We get the map view to set its style with the desired Jawg URL.
        mapView = findViewById(R.id.mapView)
        mapView.onCreate(savedInstanceState)
        mapView.getMapAsync { map ->
            map.setStyle(styleUrl) { style ->
                // Once the style is loaded we create a GeoJSON polygon of Paris boundaries.
                val geojson =
                    """
                    {
                        "type": "Feature",
                        "properties": {},
                        "geometry": {
                            "type": "Polygon",
                            "coordinates": [
                                [
                                    [2.319887,48.90046],[2.329981,48.901163],
                                    [2.38515,48.902008],[2.394906,48.898444],
                                    [2.397627,48.894578],[2.398846,48.887109],
                                    [2.408308,48.880409],[2.41327,48.872892],
                                    [2.413838,48.864376],[2.416341,48.849234],
                                    [2.412246,48.834539],[2.422139,48.835798],
                                    [2.41939,48.842577],[2.42813,48.841528],
                                    [2.447699,48.844818],[2.463438,48.842089],
                                    [2.467426,48.838891],[2.467582,48.833133],
                                    [2.462696,48.81906],[2.458705,48.81714],
                                    [2.438448,48.818232],[2.421462,48.824054],
                                    [2.406032,48.827615],[2.390939,48.826079],
                                    [2.379296,48.821214],[2.363947,48.816314],
                                    [2.345958,48.816036],[2.331898,48.817011],
                                    [2.332461,48.818247],[2.292196,48.827142],
                                    [2.279052,48.83249],[2.272793,48.82792],
                                    [2.263174,48.83398],[2.255144,48.83481],
                                    [2.251709,48.838822],[2.250612,48.845555],
                                    [2.239978,48.849702],[2.224219,48.853517],
                                    [2.228225,48.865183],[2.231736,48.869069],
                                    [2.245678,48.876435],[2.25541,48.874264],
                                    [2.258467,48.880387],[2.277487,48.877968],
                                    [2.282327,48.883923],[2.291507,48.889472],
                                    [2.319887,48.90046]
                                ]
                            ]
                        }
                    }
                    """

                // Create feature object from the GeoJSON we declared.
                val parisBoundariesFeature = Feature.fromJson(geojson)
                // Create a GeoJson Source from our feature.
                val geojsonSource = GeoJsonSource("paris-boundaries", parisBoundariesFeature)
                // Add the source to the style
                style.addSource(geojsonSource)

                // Create a layer with the desired style for our source.
                val layer = LineLayer("paris-boundaries", "paris-boundaries")
                    .withProperties(
                        PropertyFactory.lineCap(Property.LINE_CAP_SQUARE),
                        PropertyFactory.lineJoin(Property.LINE_JOIN_MITER),
                        PropertyFactory.lineOpacity(0.7f),
                        PropertyFactory.lineWidth(4f),
                        PropertyFactory.lineColor("#0094ff")
                    )
                // Add the layer at the end
                style.addLayer(layer)
            }
        }
    }

    override fun onStart() {
        super.onStart()
        mapView.onStart()
    }

    override fun onResume() {
        super.onResume()
        mapView.onResume()
    }

    override fun onPause() {
        super.onPause()
        mapView.onPause()
    }

    override fun onStop() {
        super.onStop()
        mapView.onStop()
    }

    override fun onLowMemory() {
        super.onLowMemory()
        mapView.onLowMemory()
    }

    override fun onDestroy() {
        super.onDestroy()
        mapView.onDestroy()
    }

}