#include "multi_polygon.hpp" #include "polygon.hpp" #include "util.hpp" namespace mbgl { namespace android { namespace geojson { jni::Local> MultiPolygon::New(JNIEnv& env, const mbgl::MultiPolygon& multiPolygon) { static auto& javaClass = jni::Class::Singleton(env); static auto method = javaClass.GetStaticMethod (jni::Object)>(env, "fromLngLats"); auto jarray = jni::Array>::New(env, multiPolygon.size()); for (size_t i = 0; i < multiPolygon.size(); i++) { jarray.Set(env, i, asPointsListsList(env, multiPolygon.at(i))); } return javaClass.Call(env, method, java::util::Arrays::asList(env, jarray)); } mapbox::geojson::multi_polygon MultiPolygon::convert(jni::JNIEnv& env, const jni::Object& jMultiPolygon) { mapbox::geojson::multi_polygon multiPolygon; if (jMultiPolygon) { auto jPointListsListList = MultiPolygon::coordinates(env, jMultiPolygon); auto jPointListsListArray = java::util::List::toArray(env, jPointListsListList); auto size = jPointListsListArray.Length(env); multiPolygon.reserve(size); for (size_t i = 0; i < size; i++) { multiPolygon.push_back(Polygon::convert(env, jPointListsListArray.Get(env, i))); } } return multiPolygon; } jni::Local> MultiPolygon::coordinates(jni::JNIEnv& env, const jni::Object& jPolygon) { static auto& javaClass = jni::Class::Singleton(env); static auto method = javaClass.GetMethod ()>(env, "coordinates"); return jPolygon.Call(env, method); } void MultiPolygon::registerNative(jni::JNIEnv &env) { jni::Class::Singleton(env); } } // namespace geojson } // namespace android } // namespace mbgl