From 5196e37d4813901af868b95edb18de86440fb982 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguye=CC=82=CC=83n?= Date: Wed, 11 Mar 2020 18:45:45 -0700 Subject: [PATCH] [ios, macos] Convert NSDictionary to GeoJSON --- platform/darwin/src/MGLConversion.h | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/platform/darwin/src/MGLConversion.h b/platform/darwin/src/MGLConversion.h index 3f7ffdd0c..257b8dfc9 100644 --- a/platform/darwin/src/MGLConversion.h +++ b/platform/darwin/src/MGLConversion.h @@ -1,3 +1,5 @@ +#import "MGLShape_Private.h" + #include NS_ASSUME_NONNULL_BEGIN @@ -124,9 +126,21 @@ public: } } - static optional toGeoJSON(const Holder&, Error& error) { - error = { "toGeoJSON not implemented" }; - return {}; + static optional toGeoJSON(const Holder& holder, Error& error) { + id object = holder.value; + if ([object isKindOfClass:[NSDictionary class]]) { + NSError *serializationError; + NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:&serializationError]; + if (serializationError) { + error = { std::string(serializationError.localizedDescription.UTF8String) }; + return {}; + } + NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + return mapbox::geojson::parse(string.UTF8String); + } else { + error = { std::string([NSString stringWithFormat:@"%@ is not a GeoJSON object.", object].UTF8String) }; + return {}; + } } private: