Display building extrusions
Extrude the building layer in the Mapbox Light style using FillExtrusionLayer and set up the light position.
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"> <com.mapbox.maps.MapViewandroid:id="@id/mapView"android:layout_width="match_parent"android:layout_height="match_parent" /> <com.google.android.material.floatingactionbutton.FloatingActionButtonandroid:id="@+id/fabLightPosition"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="end|bottom"android:layout_marginEnd="16dp"android:layout_marginBottom="82dp"android:src="@drawable/ic_clear"app:backgroundTint="@color/accent"app:layout_anchorGravity="top" /> <com.google.android.material.floatingactionbutton.FloatingActionButtonandroid:id="@+id/fabLightColor"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="end|bottom"android:layout_margin="16dp"android:src="@drawable/ic_paint"app:backgroundTint="@color/primary" /> </FrameLayout>
package com.mapbox.maps.testapp.examples.terrain3D import android.graphics.Colorimport android.os.Bundleimport androidx.appcompat.app.AppCompatActivityimport com.mapbox.geojson.Pointimport com.mapbox.maps.CameraOptionsimport com.mapbox.maps.Styleimport com.mapbox.maps.extension.style.expressions.generated.Expression.Companion.eqimport com.mapbox.maps.extension.style.expressions.generated.Expression.Companion.getimport com.mapbox.maps.extension.style.expressions.generated.Expression.Companion.literalimport com.mapbox.maps.extension.style.layers.addLayerimport com.mapbox.maps.extension.style.layers.generated.FillExtrusionLayerimport com.mapbox.maps.extension.style.light.generated.getLightimport com.mapbox.maps.testapp.databinding.ActivityFillExtrusionBinding /*** Extrude the building layer in the Mapbox Light style using FillExtrusionLayer* and set up the light position.*/class FillExtrusionActivity : AppCompatActivity() { private var isRedColor: Boolean = falseprivate var isInitPosition: Boolean = falseprivate lateinit var binding: ActivityFillExtrusionBinding override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = ActivityFillExtrusionBinding.inflate(layoutInflater)setContentView(binding.root)val mapboxMap = binding.mapView.getMapboxMap() mapboxMap.setCamera(CameraOptions.Builder().center(Point.fromLngLat(-74.0066, 40.7135)).pitch(45.0).zoom(15.5).bearing(-17.6).build()) mapboxMap.loadStyleUri(Style.LIGHT) { style ->setupBuildings(style)setupLight(style)}} private fun setupBuildings(style: Style) {val fillExtrusionLayer = FillExtrusionLayer("3d-buildings", "composite")fillExtrusionLayer.sourceLayer("building")fillExtrusionLayer.filter(eq(get("extrude"), literal("true")))fillExtrusionLayer.minZoom(15.0)fillExtrusionLayer.fillExtrusionColor(Color.parseColor("#aaaaaa"))fillExtrusionLayer.fillExtrusionHeight(get("height"))fillExtrusionLayer.fillExtrusionBase(get("min_height"))fillExtrusionLayer.fillExtrusionOpacity(0.6)fillExtrusionLayer.fillExtrusionAmbientOcclusionIntensity(0.3)fillExtrusionLayer.fillExtrusionAmbientOcclusionRadius(3.0)style.addLayer(fillExtrusionLayer)} private fun setupLight(style: Style) {val light = style.getLight()binding.fabLightPosition.setOnClickListener {isInitPosition = !isInitPositionif (isInitPosition) {light.position(1.5, 90.0, 80.0)} else {light.position(1.15, 210.0, 30.0)}} binding.fabLightColor.setOnClickListener {isRedColor = !isRedColorif (isRedColor) {light.color(Color.RED)} else {light.color(Color.BLUE)}}}}