diff options
author | kevin <kevin.li@mapbox.com> | 2020-02-28 11:42:13 +0800 |
---|---|---|
committer | kevin <kevin.li@mapbox.com> | 2020-03-04 10:54:09 +0800 |
commit | ac44da4b980b72aad58171422ab0999bea1c3d42 (patch) | |
tree | 66c52a84a2b4f691b0e364c17478f8132d42712e | |
parent | 44ac1f008aeda27d13e6390405a3666ff522611b (diff) | |
download | qtlocation-mapboxgl-ac44da4b980b72aad58171422ab0999bea1c3d42.tar.gz |
[android] Update toGeoJSON in android_conversion.hpp
-rw-r--r-- | platform/android/src/style/android_conversion.hpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/platform/android/src/style/android_conversion.hpp b/platform/android/src/style/android_conversion.hpp index dc0a0acb31..3db2a99d8a 100644 --- a/platform/android/src/style/android_conversion.hpp +++ b/platform/android/src/style/android_conversion.hpp @@ -110,11 +110,24 @@ public: } static optional<GeoJSON> toGeoJSON(const mbgl::android::Value &value, Error &error) { - if (value.isNull() || !value.isString()) { + if (value.isNull()) { error = { "no json data found" }; return {}; + } else if (value.isString()) { + return parseGeoJSON(value.toString(), error); + } else if (value.isObject()) { + mbgl::android::Value keys = value.keyArray(); + std::size_t length = arrayLength(keys); + for (std::size_t i = 0; i < length; ++i) { + const auto k = keys.get(i).toString(); + if (k == "json") { + auto v = value.get(k.c_str()); + return parseGeoJSON(v.toString(), error); + } + } } - return parseGeoJSON(value.toString(), error); + error = {"no json data found"}; + return {}; } }; |