From b5aa1a61178bf8bba3e8563a223cea0ef60d6238 Mon Sep 17 00:00:00 2001 From: Tobrun Van Nuland Date: Wed, 20 Jul 2016 12:29:02 +0200 Subject: [PATCH] [android] #352 - added point features, try determining type of geometry --- .../mapboxsdk/annotations/PointFeature.java | 24 +++++++++++++ platform/android/src/jni.cpp | 36 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/PointFeature.java diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/PointFeature.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/PointFeature.java new file mode 100644 index 00000000000..4746b36d073 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/PointFeature.java @@ -0,0 +1,24 @@ +package com.mapbox.mapboxsdk.annotations; + +import java.util.Map; + +public class PointFeature extends Marker implements Feature { + + private long featureId; + private Mapattributes; + + @Override + public long getFeatureId() { + return featureId; + } + + @Override + public Map getAttributes() { + return attributes; + } + + @Override + public Object getAttribute(String key) { + return attributes.get(key); + } +} diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index ff33496d9c2..ce1574f8b8c 100755 --- a/platform/android/src/jni.cpp +++ b/platform/android/src/jni.cpp @@ -105,6 +105,10 @@ jni::jfieldID* customLayerInitializeFunctionId = nullptr; jni::jfieldID* customLayerRenderFunctionId = nullptr; jni::jfieldID* customLayerDeinitializeFunctionId = nullptr; +//jni::jclass* mapClass = nullptr; +//jni::jmethodID* mapConstructorId = nullptr; +//jni::jmethodID* putFunctionId = nullptr; + // Offline declarations start jni::jfieldID* offlineManagerClassPtrId = nullptr; @@ -1092,6 +1096,33 @@ jni::jobject* nativeGetVisibleFeatures(JNIEnv *env, jni::jobject* obj, jlong na mbgl::optional> optionalLayerIDs; std::vector features = nativeMapView->getMap().queryRenderedFeatures(mbgl::ScreenCoordinate(x, y), optionalLayerIDs); mbgl::Log::Debug(mbgl::Event::JNI, "nativeGetVisibleFeatures 2: "+std::to_string(features.size())); + + //jni::jobject* jhashmap = &jni::NewObject(*env, *mapClass, *mapConstructorId); + + for (const auto &feature : features) { + //for (auto &pair : feature.properties) { + // auto &value = pair.second; + // PropertyValueEvaluator evaluator; + // jni::CallMethod(*env, hashMap, *put, std_string_to_jstring(env2, pair.first.c_str(),mbgl::Value::visit(value, evaluator))); + //} + if(typeid(feature.geometry)==typeid(mbgl::Point)) { + mbgl::Log::Debug(mbgl::Event::JNI, "It's a point"); + }else if(typeid(feature.geometry)==typeid(mbgl::LineString)) { + mbgl::Log::Debug(mbgl::Event::JNI, "It's a line"); + }else if(typeid(feature.geometry)==typeid(mbgl::Polygon)) { + mbgl::Log::Debug(mbgl::Event::JNI, "It's a polygon"); + }else if(typeid(feature.geometry)==typeid(mbgl::MultiPoint)) { + mbgl::Log::Debug(mbgl::Event::JNI, "It's a multipoint"); + }else if(typeid(feature.geometry)==typeid(mbgl::MultiLineString)) { + mbgl::Log::Debug(mbgl::Event::JNI, "It's a multilinestring"); + }else if(typeid(feature.geometry)==typeid(mbgl::MultiPolygon)) { + mbgl::Log::Debug(mbgl::Event::JNI, "It's a mulitpolygon"); + }else if(typeid(feature.geometry)==typeid(mapbox::geometry::geometry_collection)) { + mbgl::Log::Debug(mbgl::Event::JNI, "It's a geometrycollecition"); + }else{ + mbgl::Log::Debug(mbgl::Event::JNI, "It's a something else"); + } + } mbgl::LatLng latLng = nativeMapView->getMap().latLngForPixel(mbgl::ScreenCoordinate(x, y)); return &jni::NewObject(*env, *latLngClass, *latLngConstructorId, latLng.latitude, latLng.longitude); } @@ -1630,6 +1661,11 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { customLayerRenderFunctionId = &jni::GetFieldID(env, *customLayerClass, "mRenderFunction", "J"); customLayerDeinitializeFunctionId = &jni::GetFieldID(env, *customLayerClass, "mDeinitializeFunction", "J"); + //mapClass = &jni::FindClass(env, "com/mapbox/mapboxsdk/layers/CustomLayer"); + //mapClass = jni::NewGlobalRef(env, mapClass).release(); + //mapConstructorId = &jni::GetMethodID(env, *mapClass, "", "()V"); + //putFunctionId = &jni::GetMethodID(env, *mapClass, "put","(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + jni::jclass& nativeMapViewClass = jni::FindClass(env, "com/mapbox/mapboxsdk/maps/NativeMapView"); onInvalidateId = &jni::GetMethodID(env, nativeMapViewClass, "onInvalidate", "()V");