summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorIvo van Dongen <info@ivovandongen.nl>2017-03-23 17:53:59 +0200
committerIvo van Dongen <ivovandongen@users.noreply.github.com>2017-03-28 15:44:22 +0300
commit02fd38ccbc6a4070162a2b9167d7f8d42b3706a0 (patch)
tree6b2df17761b86055cbda6eea919058f39cf47ebd /platform
parentfa7489fb7ea8ec85cb746e0bc497518d72c638b9 (diff)
downloadqtlocation-mapboxgl-02fd38ccbc6a4070162a2b9167d7f8d42b3706a0.tar.gz
[android] add option to set geometry and feature on geojson source
Diffstat (limited to 'platform')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java69
-rw-r--r--platform/android/src/style/sources/geojson_source.cpp22
-rw-r--r--platform/android/src/style/sources/geojson_source.hpp5
3 files changed, 96 insertions, 0 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java
index 3c1a325169..718b790df2 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java
@@ -7,6 +7,7 @@ import android.support.annotation.UiThread;
import com.mapbox.mapboxsdk.style.layers.Filter;
import com.mapbox.services.commons.geojson.Feature;
import com.mapbox.services.commons.geojson.FeatureCollection;
+import com.mapbox.services.commons.geojson.Geometry;
import java.net.URL;
import java.util.ArrayList;
@@ -127,6 +128,70 @@ public class GeoJsonSource extends Source {
}
/**
+ * Create a GeoJsonSource from a {@link Feature}
+ *
+ * @param id the source id
+ * @param feature the feature
+ */
+ public GeoJsonSource(String id, Feature feature) {
+ initialize(id, null);
+ setGeoJson(feature);
+ }
+
+ /**
+ * Create a GeoJsonSource from a {@link Feature} and non-default {@link GeoJsonOptions}
+ *
+ * @param id the source id
+ * @param feature the feature
+ * @param options options
+ */
+ public GeoJsonSource(String id, Feature feature, GeoJsonOptions options) {
+ initialize(id, options);
+ setGeoJson(feature);
+ }
+
+ /**
+ * Create a GeoJsonSource from a {@link Geometry}
+ *
+ * @param id the source id
+ * @param geometry the geometry
+ */
+ public GeoJsonSource(String id, Geometry geometry) {
+ initialize(id, null);
+ setGeoJson(geometry);
+ }
+
+ /**
+ * Create a GeoJsonSource from a {@link Geometry} and non-default {@link GeoJsonOptions}
+ *
+ * @param id the source id
+ * @param geometry the geometry
+ * @param options options
+ */
+ public GeoJsonSource(String id, Geometry geometry, GeoJsonOptions options) {
+ initialize(id, options);
+ setGeoJson(geometry);
+ }
+
+ /**
+ * Updates the GeoJson with a single feature
+ *
+ * @param feature the GeoJSON {@link Feature} to set
+ */
+ public void setGeoJson(Feature feature) {
+ nativeSetFeature(feature);
+ }
+
+ /**
+ * Updates the GeoJson with a single geometry
+ *
+ * @param geometry the GeoJSON {@link Geometry} to set
+ */
+ public void setGeoJson(Geometry<?> geometry) {
+ nativeSetGeometry(geometry);
+ }
+
+ /**
* Updates the GeoJson
*
* @param features the GeoJSON {@link FeatureCollection}
@@ -182,6 +247,10 @@ public class GeoJsonSource extends Source {
private native void nativeSetFeatureCollection(FeatureCollection geoJson);
+ private native void nativeSetFeature(Feature feature);
+
+ private native void nativeSetGeometry(Geometry<?> geometry);
+
private native Feature[] querySourceFeatures(Object[] filter);
@Override
diff --git a/platform/android/src/style/sources/geojson_source.cpp b/platform/android/src/style/sources/geojson_source.cpp
index ad55889858..c201cdade1 100644
--- a/platform/android/src/style/sources/geojson_source.cpp
+++ b/platform/android/src/style/sources/geojson_source.cpp
@@ -72,6 +72,26 @@ namespace android {
source.as<mbgl::style::GeoJSONSource>()->GeoJSONSource::setGeoJSON(GeoJSON(features));
}
+ void GeoJSONSource::setFeature(jni::JNIEnv& env, jni::Object<geojson::Feature> jFeature) {
+ using namespace mbgl::android::geojson;
+
+ // Convert the jni object
+ auto feature = Feature::convert(env, jFeature);
+
+ // Update the core source
+ source.as<mbgl::style::GeoJSONSource>()->GeoJSONSource::setGeoJSON(GeoJSON(feature));
+ }
+
+ void GeoJSONSource::setGeometry(jni::JNIEnv& env, jni::Object<geojson::Geometry> jGeometry) {
+ using namespace mbgl::android::geojson;
+
+ // Convert the jni object
+ auto geometry = Geometry::convert(env, jGeometry);
+
+ // Update the core source
+ source.as<mbgl::style::GeoJSONSource>()->GeoJSONSource::setGeoJSON(GeoJSON(geometry));
+ }
+
void GeoJSONSource::setURL(jni::JNIEnv& env, jni::String url) {
// Update the core source
source.as<mbgl::style::GeoJSONSource>()->GeoJSONSource::setURL(jni::Make<std::string>(env, url));
@@ -108,6 +128,8 @@ namespace android {
"finalize",
METHOD(&GeoJSONSource::setGeoJSONString, "nativeSetGeoJsonString"),
METHOD(&GeoJSONSource::setFeatureCollection, "nativeSetFeatureCollection"),
+ METHOD(&GeoJSONSource::setFeature, "nativeSetFeature"),
+ METHOD(&GeoJSONSource::setGeometry, "nativeSetGeometry"),
METHOD(&GeoJSONSource::setURL, "nativeSetUrl"),
METHOD(&GeoJSONSource::querySourceFeatures, "querySourceFeatures")
);
diff --git a/platform/android/src/style/sources/geojson_source.hpp b/platform/android/src/style/sources/geojson_source.hpp
index 98d98e26b3..51ea452fb2 100644
--- a/platform/android/src/style/sources/geojson_source.hpp
+++ b/platform/android/src/style/sources/geojson_source.hpp
@@ -2,6 +2,7 @@
#include "source.hpp"
#include <mbgl/style/sources/geojson_source.hpp>
+#include "../../geojson/geometry.hpp"
#include "../../geojson/feature.hpp"
#include "../../geojson/feature_collection.hpp"
#include <jni/jni.hpp>
@@ -28,6 +29,10 @@ public:
void setFeatureCollection(jni::JNIEnv&, jni::Object<geojson::FeatureCollection>);
+ void setFeature(jni::JNIEnv&, jni::Object<geojson::Feature>);
+
+ void setGeometry(jni::JNIEnv&, jni::Object<geojson::Geometry>);
+
void setURL(jni::JNIEnv&, jni::String);
jni::Array<jni::Object<geojson::Feature>> querySourceFeatures(jni::JNIEnv&,