Warn if MGLShapeSource is initialized with MGLShapeCollection

Move warning from ShapeCollection to ShapeSource

Try checking MGLComputedShapeSources

Include MGLShapeCollection header

Add changelog entry
This commit is contained in:
Nadia Barbosa
2018-08-13 17:24:56 -07:00
committed by Nadia Barbosa
parent fcb68041d5
commit 50059659d1
4 changed files with 27 additions and 0 deletions

View File

@@ -4,6 +4,7 @@
#import "MGLSource_Private.h"
#import "MGLShape_Private.h"
#import "MGLGeometry_Private.h"
#import "MGLShapeCollection.h"
#include <mbgl/map/map.hpp>
#include <mbgl/style/sources/custom_geometry_source.hpp>
@@ -131,6 +132,14 @@ mbgl::style::CustomGeometrySource::Options MBGLCustomGeometrySourceOptionsFromDi
mbgl::FeatureCollection featureCollection;
featureCollection.reserve(data.count);
for (MGLShape <MGLFeature> * feature in data) {
if ([feature isMemberOfClass:[MGLShapeCollection class]]) {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"MGLShapeCollection initialized with MGLFeatures will not retain attributes."
@"Use MGLShapeCollectionFeature to retain attributes instead."
@"This will be logged only once.");
});
}
mbgl::Feature geoJsonObject = [feature geoJSONObject].get<mbgl::Feature>();
featureCollection.push_back(geoJsonObject);
}
@@ -196,6 +205,14 @@ mbgl::style::CustomGeometrySource::Options MBGLCustomGeometrySourceOptionsFromDi
for (MGLShape <MGLFeature> * feature in features) {
mbgl::Feature geoJsonObject = [feature geoJSONObject].get<mbgl::Feature>();
featureCollection.push_back(geoJsonObject);
if ([feature isMemberOfClass:[MGLShapeCollection class]]) {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"MGLShapeCollection initialized with MGLFeatures will not retain attributes."
@"Use MGLShapeCollectionFeature to retain attributes instead."
@"This will be logged only once.");
});
}
}
const auto geojson = mbgl::GeoJSON{featureCollection};
static_cast<mbgl::style::CustomGeometrySource *>(self.rawSource)->setTileData(tileID, geojson);

View File

@@ -1,6 +1,7 @@
#import "MGLShapeCollection.h"
#import "MGLShape_Private.h"
#import "MGLFeature.h"
#import <mbgl/style/conversion/geojson.hpp>

View File

@@ -105,6 +105,14 @@ mbgl::style::GeoJSONOptions MGLGeoJSONOptionsFromDictionary(NSDictionary<MGLShap
auto geoJSONOptions = MGLGeoJSONOptionsFromDictionary(options);
auto source = std::make_unique<mbgl::style::GeoJSONSource>(identifier.UTF8String, geoJSONOptions);
if (self = [super initWithPendingSource:std::move(source)]) {
if ([shape isMemberOfClass:[MGLShapeCollection class]]) {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"MGLShapeCollection initialized with MGLFeatures will not retain attributes."
@"Use MGLShapeCollectionFeature to retain attributes instead."
@"This will be logged only once.");
});
}
self.shape = shape;
}
return self;

View File

@@ -9,6 +9,7 @@ Mapbox welcomes participation and contributions from everyone. Please read [CONT
* The `-[MGLMapView visibleFeaturesAtPoint:]` method can now return features near tile boundaries at high zoom levels. ([#12570](https://github.com/mapbox/mapbox-gl-native/pull/12570))
* Fixed inconsistencies in exception naming. ([#12583](https://github.com/mapbox/mapbox-gl-native/issues/12583))
* Added `MGLShapeOfflineRegion` for defining arbitrarily shaped offline regions [#11447](https://github.com/mapbox/mapbox-gl-native/pull/11447)
* Added a one-time warning about possible attribute loss when initializing an `MGLShapeSource` with an `MGLShapeCollection` [#12625](https://github.com/mapbox/mapbox-gl-native/pull/12625)
## 4.3.0 - August 15, 2018