diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2016-10-11 11:31:23 +0300 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2016-11-02 13:38:07 +0200 |
commit | 9ad5dd15857e7d15810877e2173839f45cc5e343 (patch) | |
tree | 95b76a86305e125cf983db329dd128715824f38e | |
parent | 53610ee3787e796a4d5bc9c464e02170bf364dee (diff) | |
download | qtlocation-mapboxgl-9ad5dd15857e7d15810877e2173839f45cc5e343.tar.gz |
[android] add test activity for symbol querying
4 files changed, 251 insertions, 0 deletions
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml index c8a0de9826..92a8f0e48e 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml @@ -406,6 +406,14 @@ android:value="@string/category_features" /> </activity> <activity + android:name=".activity.feature.QueryRenderedFeaturesBoxSymbolCountActivity" + android:description="@string/description_query_rendered_features_box_symbol_count" + android:label="@string/activity_query_rendered_features_box_symbol_count"> + <meta-data + android:name="@string/category" + android:value="@string/category_features" /> + </activity> + <activity android:name=".activity.feature.QueryRenderedFeaturesBoxHighlightActivity" android:description="@string/description_query_rendered_features_box_highlight" android:label="@string/activity_query_rendered_features_box_highlight"> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxSymbolCountActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxSymbolCountActivity.java new file mode 100644 index 0000000000..8e9b3a1ff6 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxSymbolCountActivity.java @@ -0,0 +1,192 @@ +package com.mapbox.mapboxsdk.testapp.activity.feature; + +import android.graphics.BitmapFactory; +import android.graphics.RectF; +import android.os.Bundle; +import android.support.annotation.RawRes; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.MenuItem; +import android.view.View; +import android.widget.Toast; + +import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.maps.MapView; +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; +import com.mapbox.mapboxsdk.style.layers.SymbolLayer; +import com.mapbox.mapboxsdk.style.sources.GeoJsonSource; +import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.services.commons.geojson.Feature; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.StringWriter; +import java.io.Writer; +import java.util.List; + +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconImage; + +/** + * Demo's query rendered features on Symbols + */ +public class QueryRenderedFeaturesBoxSymbolCountActivity extends AppCompatActivity { + private static final String TAG = QueryRenderedFeaturesBoxSymbolCountActivity.class.getSimpleName(); + + public MapView mapView; + private MapboxMap mapboxMap; + + private Toast toast; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_query_features_box); + setupActionBar(); + + final float density = getResources().getDisplayMetrics().density; + + final View selectionBox = findViewById(R.id.selection_box); + + //Initialize map as normal + mapView = (MapView) findViewById(R.id.mapView); + mapView.onCreate(savedInstanceState); + mapView.getMapAsync(new OnMapReadyCallback() { + @SuppressWarnings("ConstantConditions") + @Override + public void onMapReady(final MapboxMap mapboxMap) { + QueryRenderedFeaturesBoxSymbolCountActivity.this.mapboxMap = mapboxMap; + + //Add a symbol layer (also works with annotations) + try { + mapboxMap.addSource(new GeoJsonSource("symbols-source", readRawResource(R.raw.test_points_utrecht))); + } catch (IOException e) { + Log.e(TAG, "Could not load geojson: " + e.getMessage()); + return; + } + mapboxMap.addImage("test-icon", BitmapFactory.decodeResource(getResources(), R.drawable.default_marker)); + mapboxMap.addLayer(new SymbolLayer("symbols-layer", "symbols-source").withProperties(iconImage("test-icon"))); + + + selectionBox.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //Query + int top = selectionBox.getTop() - mapView.getTop(); + int left = selectionBox.getLeft() - mapView.getLeft(); + RectF box = new RectF(left, top, left + selectionBox.getWidth(), top + selectionBox.getHeight()); + Log.i(TAG, String.format("Querying box %s", box)); + List<Feature> features = mapboxMap.queryRenderedFeatures(box, "symbols-layer"); + + //Show count + if (toast != null) { + toast.cancel(); + } + toast = Toast.makeText( + QueryRenderedFeaturesBoxSymbolCountActivity.this, + String.format("%s features in box", features.size()), + Toast.LENGTH_SHORT); + toast.show(); + + } + }); + + //Little taste of home + mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(52.0907, 5.1214), 16)); + } + }); + + } + + private String readRawResource(@RawRes int rawResource) throws IOException { + InputStream is = getResources().openRawResource(rawResource); + Writer writer = new StringWriter(); + char[] buffer = new char[1024]; + try { + Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); + int n; + while ((n = reader.read(buffer)) != -1) { + writer.write(buffer, 0, n); + } + } finally { + is.close(); + } + + return writer.toString(); + } + + public MapboxMap getMapboxMap() { + return mapboxMap; + } + + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mapView.onSaveInstanceState(outState); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + mapView.onLowMemory(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + onBackPressed(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + private void setupActionBar() { + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + final ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setDisplayShowHomeEnabled(true); + } + } + +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_points_utrecht.geojson b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_points_utrecht.geojson new file mode 100644 index 0000000000..d7b8ede72f --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_points_utrecht.geojson @@ -0,0 +1,49 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [ + 5.12100, + 52.09082 + ] + } + }, + { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [ + 5.12160, + 52.09082 + ] + } + }, + { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [ + 5.12160, + 52.09056 + ] + } + }, + { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [ + 5.12100, + 52.09056 + ] + } + } + ] +}
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml index a4f19f1e01..a9f639d998 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml @@ -65,6 +65,7 @@ <string name="activity_surfaceview_overlay">SurfaceView MediaOverlay</string> <string name="activity_query_rendered_feature_properties">Query feature properties</string> <string name="activity_query_rendered_features_box_count">Count features in box</string> + <string name="activity_query_rendered_features_box_symbol_count">Count symbols in box</string> <string name="activity_query_rendered_features_box_highlight">Highlight features in box</string> <string name="activity_circle">Add Circle</string> <string name="activity_add_sprite">Add Custom Sprite</string> @@ -120,6 +121,7 @@ <string name="description_surfaceview_mediacontrols">Test overlaying SurfaceView</string> <string name="description_query_rendered_feature_properties_point">Query rendered feature properties on click</string> <string name="description_query_rendered_features_box_count">Count all rendered features in box</string> + <string name="description_query_rendered_features_box_symbol_count">Count all rendered symbols in box</string> <string name="description_query_rendered_features_box_highlight">Hightligh buildings in box</string> <string name="description_car_driving">MyLocationView follow map update example</string> <string name="description_video_view">Android video view on top of the map view</string> |