#include "polygon.hpp" #include "multi_line_string.hpp" #include "util.hpp" namespace mbgl { namespace android { namespace geojson { jni::Object Polygon::New(jni::JNIEnv& env, const mbgl::Polygon& polygon) { auto jList = asPointsListsList(env, polygon); static auto method = javaClass.GetStaticMethod (jni::Object)>(env, "fromLngLats"); auto jPolygon = javaClass.Call(env, method, jList); jni::DeleteLocalRef(env, jList); return jPolygon; } mapbox::geojson::polygon Polygon::convert(jni::JNIEnv &env, jni::Object jPolygon) { mapbox::geojson::polygon polygon; if (jPolygon) { auto jPositionListsList = Polygon::coordinates(env, jPolygon); polygon = Polygon::convert(env, jPositionListsList); jni::DeleteLocalRef(env, jPositionListsList); } return polygon; } mapbox::geojson::polygon Polygon::convert(jni::JNIEnv &env, jni::Object>*/> jPointListsList) { mapbox::geojson::polygon polygon; if (jPointListsList) { auto multiLine = MultiLineString::convert(env, jPointListsList); polygon.reserve(multiLine.size()); for (auto&& line : multiLine) { polygon.emplace_back(convertExplicit(std::move(line))); } } return polygon; } jni::Object Polygon::coordinates(jni::JNIEnv &env, jni::Object jPolygon) { static auto method = Polygon::javaClass.GetMethod ()>(env, "coordinates"); return jPolygon.Call(env, method); } void Polygon::registerNative(jni::JNIEnv &env) { // Lookup the class javaClass = *jni::Class::Find(env).NewGlobalRef(env).release(); } jni::Class Polygon::javaClass; } // namespace geojson } // namespace android } // namespace mbgl