複数のポイントからホットスポットの作成
<?xml version="1.0" encoding="utf-8"?><FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:mapbox="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".examples.dds.CreateHotspotsActivity"> <com.mapbox.mapboxsdk.maps.MapViewandroid:id="@+id/mapView"android:layout_width="match_parent"android:layout_height="match_parent"mapbox:mapbox_cameraTargetLat="40.66995747013945"mapbox:mapbox_cameraTargetLng="-103.59179687498357"mapbox:mapbox_cameraZoom="3"/> </FrameLayout>
CreateHotspotsActivity.java
package com.mapbox.mapboxandroiddemo.examples.dds; import android.graphics.Color;import android.os.Bundle; import com.mapbox.mapboxandroiddemo.R;import com.mapbox.mapboxsdk.Mapbox;import com.mapbox.mapboxsdk.maps.MapView;import com.mapbox.mapboxsdk.maps.MapboxMap;import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;import com.mapbox.mapboxsdk.maps.Style;import com.mapbox.mapboxsdk.style.expressions.Expression;import com.mapbox.mapboxsdk.style.layers.CircleLayer;import com.mapbox.mapboxsdk.style.sources.GeoJsonOptions;import com.mapbox.mapboxsdk.style.sources.GeoJsonSource; import java.net.URI;import java.net.URISyntaxException; import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import timber.log.Timber; import static com.mapbox.mapboxsdk.style.expressions.Expression.get;import static com.mapbox.mapboxsdk.style.expressions.Expression.literal;import static com.mapbox.mapboxsdk.style.expressions.Expression.toNumber;import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.circleBlur;import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.circleColor;import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.circleRadius; /*** Use Mapbox GL clustering to visualize point data as hotspots.*/public class CreateHotspotsActivity extends AppCompatActivity { private MapView mapView; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); // Mapbox access token is configured here. This needs to be called either in your application// object or in the same activity which contains the mapview.Mapbox.getInstance(this, getString(R.string.access_token)); // This contains the MapView in XML and needs to be called after the access token is configured.setContentView(R.layout.activity_style_create_hotspots_points); mapView = findViewById(R.id.mapView);mapView.onCreate(savedInstanceState);mapView.getMapAsync(new OnMapReadyCallback() {@Overridepublic void onMapReady(@NonNull final MapboxMap mapboxMap) {mapboxMap.setStyle(Style.DARK, new Style.OnStyleLoaded() {@Overridepublic void onStyleLoaded(@NonNull Style style) {addClusteredGeoJsonSource(style);}});}});} private void addClusteredGeoJsonSource(@NonNull Style loadedMapStyle) { // Add a new source from our GeoJSON data and set the 'cluster' option to true.try {loadedMapStyle.addSource(// Point to GeoJSON data. This example visualizes all M1.0+ earthquakes from// 12/22/15 to 1/21/16 as logged by USGS' Earthquake hazards program.new GeoJsonSource("earthquakes",new URI("https://www.mapbox.com/mapbox-gl-js/assets/earthquakes.geojson"),new GeoJsonOptions().withCluster(true).withClusterMaxZoom(15) // Max zoom to cluster points on.withClusterRadius(20) // Use small cluster radius for the hotspots look));} catch (URISyntaxException uriSyntaxException) {Timber.e("Check the URL %s", uriSyntaxException.getMessage());} // Use the earthquakes source to create four layers:// three for each cluster category, and one for unclustered points // Each point range gets a different fill color.final int[][] layers = new int[][] {new int[] {150, Color.parseColor("#E55E5E")},new int[] {20, Color.parseColor("#F9886C")},new int[] {0, Color.parseColor("#FBB03B")}}; CircleLayer unclustered = new CircleLayer("unclustered-points", "earthquakes");unclustered.setProperties(circleColor(Color.parseColor("#FBB03B")),circleRadius(20f),circleBlur(1f));unclustered.setFilter(Expression.neq(get("cluster"), literal(true)));loadedMapStyle.addLayerBelow(unclustered, "building"); for (int i = 0; i < layers.length; i++) {CircleLayer circles = new CircleLayer("cluster-" + i, "earthquakes");circles.setProperties(circleColor(layers[i][1]),circleRadius(70f),circleBlur(1f));Expression pointCount = toNumber(get("point_count"));circles.setFilter(i == 0? Expression.gte(pointCount, literal(layers[i][0])) :Expression.all(Expression.gte(pointCount, literal(layers[i][0])),Expression.lt(pointCount, literal(layers[i - 1][0]))));loadedMapStyle.addLayerBelow(circles, "building");}} @Overridepublic void onResume() {super.onResume();mapView.onResume();} @Overrideprotected void onStart() {super.onStart();mapView.onStart();} @Overrideprotected void onStop() {super.onStop();mapView.onStop();} @Overridepublic void onPause() {super.onPause();mapView.onPause();} @Overridepublic void onLowMemory() {super.onLowMemory();mapView.onLowMemory();} @Overrideprotected void onDestroy() {super.onDestroy();mapView.onDestroy();} @Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mapView.onSaveInstanceState(outState);}}