[ios, macos] Implement MGLComputedShapeSource binding for CustomGeometrySource
This commit is contained in:
@@ -79,3 +79,39 @@ mbgl::style::GeoJSONOptions MGLGeoJSONOptionsFromDictionary(NS_DICTIONARY_OF(MGL
|
||||
return geoJSONOptions;
|
||||
}
|
||||
|
||||
mbgl::style::CustomGeometrySource::Options MBGLCustomGeometrySourceOptionsFromDictionary(NS_DICTIONARY_OF(MGLShapeSourceOption, id) *options) {
|
||||
mbgl::style::CustomGeometrySource::Options sourceOptions;
|
||||
|
||||
if (NSNumber *value = options[MGLShapeSourceOptionMinimumZoomLevel]) {
|
||||
if (![value isKindOfClass:[NSNumber class]]) {
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"MGLShapeSourceOptionMaximumZoomLevelForClustering must be an NSNumber."];
|
||||
}
|
||||
sourceOptions.zoomRange.min = value.integerValue;
|
||||
}
|
||||
|
||||
if (NSNumber *value = options[MGLShapeSourceOptionMaximumZoomLevel]) {
|
||||
if (![value isKindOfClass:[NSNumber class]]) {
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"MGLShapeSourceOptionMaximumZoomLevel must be an NSNumber."];
|
||||
}
|
||||
sourceOptions.zoomRange.max = value.integerValue;
|
||||
}
|
||||
|
||||
if (NSNumber *value = options[MGLShapeSourceOptionBuffer]) {
|
||||
if (![value isKindOfClass:[NSNumber class]]) {
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"MGLShapeSourceOptionBuffer must be an NSNumber."];
|
||||
}
|
||||
sourceOptions.tileOptions.buffer = value.integerValue;
|
||||
}
|
||||
|
||||
if (NSNumber *value = options[MGLShapeSourceOptionSimplificationTolerance]) {
|
||||
if (![value isKindOfClass:[NSNumber class]]) {
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"MGLShapeSourceOptionSimplificationTolerance must be an NSNumber."];
|
||||
}
|
||||
sourceOptions.tileOptions.tolerance = value.doubleValue;
|
||||
}
|
||||
return sourceOptions;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#import "MGLShape.h"
|
||||
|
||||
#include <mbgl/style/sources/geojson_source.hpp>
|
||||
#include <mbgl/style/sources/custom_geometry_source.hpp>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@@ -14,5 +15,8 @@ MGL_EXPORT
|
||||
|
||||
mbgl::style::GeoJSONOptions MGLGeoJSONOptionsFromDictionary(NS_DICTIONARY_OF(MGLShapeSourceOption, id) *options);
|
||||
|
||||
MGL_EXPORT
|
||||
mbgl::style::CustomGeometrySource::Options MBGLCustomGeometrySourceOptionsFromDictionary(NS_DICTIONARY_OF(MGLShapeSourceOption, id) *options);
|
||||
|
||||
@end
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
113
platform/darwin/src/MGLComputedShapeSource.h
Normal file
113
platform/darwin/src/MGLComputedShapeSource.h
Normal file
@@ -0,0 +1,113 @@
|
||||
#import "MGLAbstractShapeSource.h"
|
||||
|
||||
#import "MGLFoundation.h"
|
||||
#import "MGLGeometry.h"
|
||||
#import "MGLTypes.h"
|
||||
#import "MGLShape.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@protocol MGLFeature;
|
||||
|
||||
/**
|
||||
Data source for `MGLComputedShapeSource`. This protocol defines two optional methods for fetching
|
||||
data, one based on tile coordinates, and one based on a bounding box. Classes that implement this
|
||||
protocol must implement one, and only one of the methods. Methods on this protocol will not be
|
||||
called on main thread, they will be called on the caller's `requestQueue`.
|
||||
*/
|
||||
@protocol MGLComputedShapeSourceDataSource <NSObject>
|
||||
|
||||
@optional
|
||||
/**
|
||||
Fetch features for a tile. This method will not be invoked on the main queue, it
|
||||
will be invoked on the caller's `requestQueue`.
|
||||
@param x Tile X coordinate.
|
||||
@param y Tile Y coordinate.
|
||||
@param zoomLevel Tile zoom level.
|
||||
*/
|
||||
- (NSArray<MGLShape <MGLFeature> *>*)featuresInTileAtX:(NSUInteger)x y:(NSUInteger)y zoomLevel:(NSUInteger)zoomLevel;
|
||||
|
||||
/**
|
||||
Fetch features for a tile. This method will not be invoked on the main queue, it
|
||||
will be invoked on the caller's `requestQueue`.
|
||||
@param bounds The bounds to fetch data for.
|
||||
@param zoomLevel Tile zoom level.
|
||||
*/
|
||||
- (NSArray<MGLShape <MGLFeature> *>*)featuresInCoordinateBounds:(MGLCoordinateBounds)bounds zoomLevel:(NSUInteger)zoomLevel;
|
||||
|
||||
@end
|
||||
|
||||
/**
|
||||
A source for vector data that is fetched one tile at a time. Useful for sources that are
|
||||
too large to fit in memory, or are already divided into tiles, but not in Mapbox Vector Tile format.
|
||||
|
||||
Supported options are `MGLShapeSourceOptionMinimumZoomLevel`, `MGLShapeSourceOptionMaximumZoomLevel`,
|
||||
`MGLShapeSourceOptionBuffer`, and `MGLShapeSourceOptionSimplificationTolerance.` This source does
|
||||
not support clustering.
|
||||
*/
|
||||
MGL_EXPORT
|
||||
@interface MGLComputedShapeSource : MGLAbstractShapeSource
|
||||
|
||||
/**
|
||||
Returns a custom shape data source initialized with an identifier, and a
|
||||
dictionary of options for the source according to the
|
||||
<a href="https://www.mapbox.com/mapbox-gl-style-spec/#sources-geojson">style
|
||||
specification</a>.
|
||||
|
||||
@param identifier A string that uniquely identifies the source.
|
||||
@param options An `NSDictionary` of options for this source.
|
||||
*/
|
||||
- (instancetype)initWithIdentifier:(NSString *)identifier options:(nullable NS_DICTIONARY_OF(MGLShapeSourceOption, id) *)options NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
/**
|
||||
Returns a custom shape data source initialized with an identifier, data source, and a
|
||||
dictionary of options for the source according to the
|
||||
<a href="https://www.mapbox.com/mapbox-gl-style-spec/#sources-geojson">style
|
||||
specification</a>.
|
||||
|
||||
@param identifier A string that uniquely identifies the source.
|
||||
@param options An `NSDictionary` of options for this source.
|
||||
*/
|
||||
- (instancetype)initWithIdentifier:(NSString *)identifier dataSource:(id<MGLComputedShapeSourceDataSource>)dataSource options:(nullable NS_DICTIONARY_OF(MGLShapeSourceOption, id) *)options;
|
||||
|
||||
/**
|
||||
Invalidates all the features and properties intersecting with or contained in
|
||||
the specified bounds. New fetch requests will immediately be invoked on the
|
||||
`MGLComputedShapeSourceDataSource`.
|
||||
@param bounds Coordinate bounds to invalidate.
|
||||
*/
|
||||
- (void) invalidateBounds:(MGLCoordinateBounds)bounds;
|
||||
|
||||
/**
|
||||
Invalidates all the feautres and properties of a given tile. A new fetch request
|
||||
will immediately be invoked on the `MGLComputedShapeSourceDataSource`.
|
||||
@param x Tile X coordinate.
|
||||
@param y Tile Y coordinate.
|
||||
@param zoomLevel Tile zoom level.
|
||||
*/
|
||||
- (void) invalidateTileAtX:(NSUInteger)x y:(NSUInteger)y zoomLevel:(NSUInteger)zoomLevel;
|
||||
|
||||
/**
|
||||
Set a new set of features for a tile. This method can be invkoed from background threads.
|
||||
For best performance, use this method only to update tiles that have already been requested
|
||||
through `MGLComputedShapeSourceDataSource.`
|
||||
@param features Features for the tile.
|
||||
@param x Tile X coordinate.
|
||||
@param y Tile Y coordinate.
|
||||
@param zoomLevel Tile zoom level.
|
||||
*/
|
||||
- (void) setFeatures:(NSArray<MGLShape <MGLFeature> *>*)features inTileAtX:(NSUInteger)x y:(NSUInteger)y zoomLevel:(NSUInteger)zoomLevel;
|
||||
|
||||
/**
|
||||
An object that implements the `MGLComputedShapeSourceDataSource` protocol that will be queried for tile data.
|
||||
*/
|
||||
@property (nonatomic, weak, nullable) id<MGLComputedShapeSourceDataSource> dataSource;
|
||||
|
||||
/**
|
||||
A queue that calls to the data source will be made on.
|
||||
*/
|
||||
@property (nonatomic, readonly) NSOperationQueue *requestQueue;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
164
platform/darwin/src/MGLComputedShapeSource.mm
Normal file
164
platform/darwin/src/MGLComputedShapeSource.mm
Normal file
@@ -0,0 +1,164 @@
|
||||
#import "MGLComputedShapeSource.h"
|
||||
|
||||
#import "MGLMapView_Private.h"
|
||||
#import "MGLSource_Private.h"
|
||||
#import "MGLShape_Private.h"
|
||||
#import "MGLAbstractShapeSource_Private.h"
|
||||
#import "MGLGeometry_Private.h"
|
||||
|
||||
#include <mbgl/map/map.hpp>
|
||||
#include <mbgl/style/sources/custom_geometry_source.hpp>
|
||||
#include <mbgl/tile/tile_id.hpp>
|
||||
#include <mbgl/util/geojson.hpp>
|
||||
|
||||
@interface MGLComputedShapeSource () {
|
||||
std::unique_ptr<mbgl::style::CustomGeometrySource> _pendingSource;
|
||||
}
|
||||
|
||||
@property (nonatomic, readwrite) NSDictionary *options;
|
||||
@property (nonatomic, assign) BOOL dataSourceImplementsFeaturesForTile;
|
||||
@property (nonatomic, assign) BOOL dataSourceImplementsFeaturesForBounds;
|
||||
|
||||
@end
|
||||
|
||||
@interface MGLComputedShapeSourceFetchOperation : NSOperation
|
||||
|
||||
@property (nonatomic, readonly) uint8_t z;
|
||||
@property (nonatomic, readonly) uint32_t x;
|
||||
@property (nonatomic, readonly) uint32_t y;
|
||||
@property (nonatomic, assign) BOOL dataSourceImplementsFeaturesForTile;
|
||||
@property (nonatomic, assign) BOOL dataSourceImplementsFeaturesForBounds;
|
||||
@property (nonatomic, weak, nullable) id<MGLComputedShapeSourceDataSource> dataSource;
|
||||
@property (nonatomic, nullable) mbgl::style::CustomGeometrySource *rawSource;
|
||||
|
||||
- (instancetype)initForSource:(MGLComputedShapeSource*)source tile:(const mbgl::CanonicalTileID&)tileId;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MGLComputedShapeSourceFetchOperation
|
||||
|
||||
- (instancetype)initForSource:(MGLComputedShapeSource*)source tile:(const mbgl::CanonicalTileID&)tileID {
|
||||
self = [super init];
|
||||
_z = tileID.z;
|
||||
_x = tileID.x;
|
||||
_y = tileID.y;
|
||||
_dataSourceImplementsFeaturesForTile = source.dataSourceImplementsFeaturesForTile;
|
||||
_dataSourceImplementsFeaturesForBounds = source.dataSourceImplementsFeaturesForBounds;
|
||||
_dataSource = source.dataSource;
|
||||
mbgl::style::CustomGeometrySource *rawSource = static_cast<mbgl::style::CustomGeometrySource *>(source.rawSource);
|
||||
_rawSource = rawSource;
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)main {
|
||||
if ([self isCancelled]) {
|
||||
return;
|
||||
}
|
||||
|
||||
NSArray<MGLShape <MGLFeature> *> *data;
|
||||
if(!self.dataSource) {
|
||||
data = nil;
|
||||
} else if(self.dataSourceImplementsFeaturesForTile) {
|
||||
data = [self.dataSource featuresInTileAtX:self.x
|
||||
y:self.y
|
||||
zoomLevel:self.z];
|
||||
} else {
|
||||
mbgl::CanonicalTileID tileID = mbgl::CanonicalTileID(self.z, self.x, self.y);
|
||||
mbgl::LatLngBounds tileBounds = mbgl::LatLngBounds(tileID);
|
||||
data = [self.dataSource featuresInCoordinateBounds:MGLCoordinateBoundsFromLatLngBounds(tileBounds)
|
||||
zoomLevel:self.z];
|
||||
}
|
||||
|
||||
if(![self isCancelled]) {
|
||||
mbgl::FeatureCollection featureCollection;
|
||||
featureCollection.reserve(data.count);
|
||||
for (MGLShape <MGLFeature> * feature in data) {
|
||||
mbgl::Feature geoJsonObject = [feature geoJSONObject].get<mbgl::Feature>();
|
||||
featureCollection.push_back(geoJsonObject);
|
||||
}
|
||||
const auto geojson = mbgl::GeoJSON{featureCollection};
|
||||
if(![self isCancelled] && self.rawSource) {
|
||||
self.rawSource->setTileData(mbgl::CanonicalTileID(self.z, self.x, self.y), geojson);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)cancel {
|
||||
[super cancel];
|
||||
self.rawSource = NULL;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation MGLComputedShapeSource
|
||||
|
||||
- (instancetype)initWithIdentifier:(NSString *)identifier options:(NS_DICTIONARY_OF(MGLShapeSourceOption, id) *)options {
|
||||
_requestQueue = [[NSOperationQueue alloc] init];
|
||||
self.requestQueue.name = [NSString stringWithFormat:@"mgl.MGLComputedShapeSource.%@", identifier];
|
||||
self.requestQueue.qualityOfService = NSQualityOfServiceUtility;
|
||||
self.requestQueue.maxConcurrentOperationCount = 4;
|
||||
|
||||
auto sourceOptions = MBGLCustomGeometrySourceOptionsFromDictionary(options);
|
||||
sourceOptions.fetchTileFunction = ^void(const mbgl::CanonicalTileID& tileID) {
|
||||
NSOperation *operation = [[MGLComputedShapeSourceFetchOperation alloc] initForSource:self tile:tileID];
|
||||
[self.requestQueue addOperation:operation];
|
||||
};
|
||||
|
||||
sourceOptions.cancelTileFunction = ^void(const mbgl::CanonicalTileID& tileID) {
|
||||
for(MGLComputedShapeSourceFetchOperation *operation in [self.requestQueue operations]) {
|
||||
if(operation.x == tileID.x && operation.y == tileID.y && operation.z == tileID.z) {
|
||||
[operation cancel];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
auto source = std::make_unique<mbgl::style::CustomGeometrySource>(identifier.UTF8String, sourceOptions);
|
||||
return self = [super initWithPendingSource:std::move(source)];
|
||||
}
|
||||
|
||||
- (instancetype)initWithIdentifier:(NSString *)identifier dataSource:(id<MGLComputedShapeSourceDataSource>)dataSource options:(NS_DICTIONARY_OF(MGLShapeSourceOption, id) *)options {
|
||||
self = [self initWithIdentifier:identifier options:options];
|
||||
[self setDataSource:dataSource];
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
[self.requestQueue cancelAllOperations];
|
||||
}
|
||||
|
||||
- (void)setFeatures:(NSArray<MGLShape <MGLFeature> *>*)features inTileAtX:(NSUInteger)x y:(NSUInteger)y zoomLevel:(NSUInteger)zoomLevel {
|
||||
mbgl::CanonicalTileID tileID = mbgl::CanonicalTileID((uint8_t)zoomLevel, (uint32_t)x, (uint32_t)y);
|
||||
mbgl::FeatureCollection featureCollection;
|
||||
featureCollection.reserve(features.count);
|
||||
for (MGLShape <MGLFeature> * feature in features) {
|
||||
mbgl::Feature geoJsonObject = [feature geoJSONObject].get<mbgl::Feature>();
|
||||
featureCollection.push_back(geoJsonObject);
|
||||
}
|
||||
const auto geojson = mbgl::GeoJSON{featureCollection};
|
||||
static_cast<mbgl::style::CustomGeometrySource *>(self.rawSource)->setTileData(tileID, geojson);
|
||||
}
|
||||
|
||||
- (void)setDataSource:(id<MGLComputedShapeSourceDataSource>)dataSource {
|
||||
[self.requestQueue cancelAllOperations];
|
||||
// Check which method the datasource implements, to avoid having to check for each tile
|
||||
self.dataSourceImplementsFeaturesForTile = [dataSource respondsToSelector:@selector(featuresInTileAtX:y:zoomLevel:)];
|
||||
self.dataSourceImplementsFeaturesForBounds = [dataSource respondsToSelector:@selector(featuresInCoordinateBounds:zoomLevel:)];
|
||||
|
||||
if(!self.dataSourceImplementsFeaturesForBounds && !self.dataSourceImplementsFeaturesForTile) {
|
||||
[NSException raise:@"Invalid Datasource" format:@"Datasource does not implement any MGLComputedShapeSourceDataSource methods"];
|
||||
} else if(self.dataSourceImplementsFeaturesForBounds && self.dataSourceImplementsFeaturesForTile) {
|
||||
[NSException raise:@"Invalid Datasource" format:@"Datasource implements multiple MGLComputedShapeSourceDataSource methods"];
|
||||
}
|
||||
|
||||
_dataSource = dataSource;
|
||||
}
|
||||
|
||||
- (void) invalidateBounds:(MGLCoordinateBounds)bounds {
|
||||
((mbgl::style::CustomGeometrySource *)self.rawSource)->invalidateRegion(MGLLatLngBoundsFromCoordinateBounds(bounds));
|
||||
}
|
||||
|
||||
- (void) invalidateTileAtX:(NSUInteger)x y:(NSUInteger)y zoomLevel:(NSUInteger)z {
|
||||
((mbgl::style::CustomGeometrySource *)self.rawSource)->invalidateTile(mbgl::CanonicalTileID(z, (unsigned int)x, (unsigned int)y));
|
||||
}
|
||||
|
||||
@end
|
||||
24
platform/darwin/test/MGLComputedShapeSourceTests.m
Normal file
24
platform/darwin/test/MGLComputedShapeSourceTests.m
Normal file
@@ -0,0 +1,24 @@
|
||||
#import <XCTest/XCTest.h>
|
||||
|
||||
#import <Mapbox/Mapbox.h>
|
||||
|
||||
|
||||
@interface MGLComputedShapeSourceTests : XCTestCase
|
||||
@end
|
||||
|
||||
@implementation MGLComputedShapeSourceTests
|
||||
|
||||
- (void)testInitializer {
|
||||
MGLComputedShapeSource *source = [[MGLComputedShapeSource alloc] initWithIdentifier:@"id" options:@{}];
|
||||
XCTAssertNotNil(source);
|
||||
XCTAssertNotNil(source.requestQueue);
|
||||
XCTAssertNil(source.dataSource);
|
||||
}
|
||||
|
||||
- (void)testNilOptions {
|
||||
MGLComputedShapeSource *source = [[MGLComputedShapeSource alloc] initWithIdentifier:@"id" options:nil];
|
||||
XCTAssertNotNil(source);
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -11,6 +11,7 @@ Mapbox welcomes participation and contributions from everyone. Please read [CONT
|
||||
### Styles
|
||||
|
||||
* Fixed an issue preventing a dynamically-added `MGLRasterStyleLayer` from drawing until the map pans. ([#10270](https://github.com/mapbox/mapbox-gl-native/pull/10270))
|
||||
* Added `MGLComputedShapeSource` source class that allows applications to supply vector data on a per-tile basis.
|
||||
|
||||
## 3.7.0
|
||||
|
||||
|
||||
@@ -12,6 +12,11 @@
|
||||
071BBB031EE76146001FB02A /* MGLImageSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 071BBAFC1EE75CD4001FB02A /* MGLImageSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
071BBB041EE76147001FB02A /* MGLImageSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 071BBAFC1EE75CD4001FB02A /* MGLImageSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
071BBB071EE77631001FB02A /* MGLImageSourceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 071BBB051EE7761A001FB02A /* MGLImageSourceTests.m */; };
|
||||
0778DD431F67556700A73B34 /* MGLComputedShapeSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 0778DD401F67555F00A73B34 /* MGLComputedShapeSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
0778DD441F67556C00A73B34 /* MGLComputedShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0778DD411F67555F00A73B34 /* MGLComputedShapeSource.mm */; };
|
||||
07D8C6FB1F67560100381808 /* MGLComputedShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0778DD411F67555F00A73B34 /* MGLComputedShapeSource.mm */; };
|
||||
07D8C6FC1F67560400381808 /* MGLAbstractShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07D947501F67487E00E37934 /* MGLAbstractShapeSource.mm */; };
|
||||
07D8C6FF1F67562C00381808 /* MGLComputedShapeSourceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 07D8C6FD1F67562800381808 /* MGLComputedShapeSourceTests.m */; };
|
||||
07D947521F67488800E37934 /* MGLAbstractShapeSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D9474F1F67487E00E37934 /* MGLAbstractShapeSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
07D947531F67488E00E37934 /* MGLAbstractShapeSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D9474E1F67487E00E37934 /* MGLAbstractShapeSource_Private.h */; };
|
||||
07D947541F67489200E37934 /* MGLAbstractShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07D947501F67487E00E37934 /* MGLAbstractShapeSource.mm */; };
|
||||
@@ -579,6 +584,9 @@
|
||||
071BBAFC1EE75CD4001FB02A /* MGLImageSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLImageSource.h; sourceTree = "<group>"; };
|
||||
071BBAFD1EE75CD4001FB02A /* MGLImageSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLImageSource.mm; sourceTree = "<group>"; };
|
||||
071BBB051EE7761A001FB02A /* MGLImageSourceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLImageSourceTests.m; path = ../../darwin/test/MGLImageSourceTests.m; sourceTree = "<group>"; };
|
||||
0778DD401F67555F00A73B34 /* MGLComputedShapeSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLComputedShapeSource.h; sourceTree = "<group>"; };
|
||||
0778DD411F67555F00A73B34 /* MGLComputedShapeSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLComputedShapeSource.mm; sourceTree = "<group>"; };
|
||||
07D8C6FD1F67562800381808 /* MGLComputedShapeSourceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLComputedShapeSourceTests.m; path = ../../darwin/test/MGLComputedShapeSourceTests.m; sourceTree = "<group>"; };
|
||||
07D9474E1F67487E00E37934 /* MGLAbstractShapeSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAbstractShapeSource_Private.h; sourceTree = "<group>"; };
|
||||
07D9474F1F67487E00E37934 /* MGLAbstractShapeSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAbstractShapeSource.h; sourceTree = "<group>"; };
|
||||
07D947501F67487E00E37934 /* MGLAbstractShapeSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLAbstractShapeSource.mm; sourceTree = "<group>"; };
|
||||
@@ -1065,6 +1073,8 @@
|
||||
07D9474F1F67487E00E37934 /* MGLAbstractShapeSource.h */,
|
||||
07D9474E1F67487E00E37934 /* MGLAbstractShapeSource_Private.h */,
|
||||
07D947501F67487E00E37934 /* MGLAbstractShapeSource.mm */,
|
||||
0778DD401F67555F00A73B34 /* MGLComputedShapeSource.h */,
|
||||
0778DD411F67555F00A73B34 /* MGLComputedShapeSource.mm */,
|
||||
071BBAFC1EE75CD4001FB02A /* MGLImageSource.h */,
|
||||
071BBAFD1EE75CD4001FB02A /* MGLImageSource.mm */,
|
||||
3566C76A1D4A8DFA008152BC /* MGLRasterSource.h */,
|
||||
@@ -1226,6 +1236,7 @@
|
||||
40CFA64E1D78754A008103BD /* Sources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
07D8C6FD1F67562800381808 /* MGLComputedShapeSourceTests.m */,
|
||||
071BBB051EE7761A001FB02A /* MGLImageSourceTests.m */,
|
||||
40CFA6501D787579008103BD /* MGLShapeSourceTests.mm */,
|
||||
920A3E5C1E6F995200C16EFC /* MGLSourceQueryTests.m */,
|
||||
@@ -1788,6 +1799,7 @@
|
||||
DD0902AB1DB192A800C5BDCE /* MGLNetworkConfiguration.h in Headers */,
|
||||
DA8848571CBAFB9800AB86E3 /* MGLMapboxEvents.h in Headers */,
|
||||
35D3A1E61E9BE7EB002B38EE /* MGLScaleBar.h in Headers */,
|
||||
0778DD431F67556700A73B34 /* MGLComputedShapeSource.h in Headers */,
|
||||
DA8848311CBAFA6200AB86E3 /* NSString+MGLAdditions.h in Headers */,
|
||||
353933F81D3FB79F003F57D7 /* MGLLineStyleLayer.h in Headers */,
|
||||
92F2C3ED1F0E3C3A00268EC0 /* MGLRendererFrontend.h in Headers */,
|
||||
@@ -2093,7 +2105,6 @@
|
||||
TargetAttributes = {
|
||||
DA1DC9491CB6C1C2006E619F = {
|
||||
CreatedOnToolsVersion = 7.3;
|
||||
DevelopmentTeam = GJZR2MEM28;
|
||||
LastSwiftMigration = 0820;
|
||||
};
|
||||
DA25D5B81CCD9EDE00607828 = {
|
||||
@@ -2300,6 +2311,7 @@
|
||||
409D0A0D1ED614CE00C95D0C /* MGLAnnotationViewIntegrationTests.swift in Sources */,
|
||||
DA2E88621CC0382C00F24E7B /* MGLOfflinePackTests.m in Sources */,
|
||||
55E2AD131E5B125400E8C587 /* MGLOfflineStorageTests.mm in Sources */,
|
||||
07D8C6FF1F67562C00381808 /* MGLComputedShapeSourceTests.m in Sources */,
|
||||
920A3E5D1E6F995200C16EFC /* MGLSourceQueryTests.m in Sources */,
|
||||
DA5DB12A1FABF1EE001C2326 /* MGLMapAccessibilityElementTests.m in Sources */,
|
||||
FAE1CDCB1E9D79CB00C40B5B /* MGLFillExtrusionStyleLayerTests.mm in Sources */,
|
||||
@@ -2354,6 +2366,7 @@
|
||||
35136D451D42275100C20EFD /* MGLSymbolStyleLayer.mm in Sources */,
|
||||
35599DED1D46F14E0048254D /* MGLStyleValue.mm in Sources */,
|
||||
DA8848211CBAFA6200AB86E3 /* MGLOfflinePack.mm in Sources */,
|
||||
0778DD441F67556C00A73B34 /* MGLComputedShapeSource.mm in Sources */,
|
||||
3557F7B21E1D27D300CCA5E6 /* MGLDistanceFormatter.m in Sources */,
|
||||
DA8848591CBAFB9800AB86E3 /* MGLMapView.mm in Sources */,
|
||||
DA8848501CBAFB9800AB86E3 /* MGLAnnotationImage.m in Sources */,
|
||||
@@ -2467,6 +2480,7 @@
|
||||
404C26E51D89B877000AA13D /* MGLTileSource.mm in Sources */,
|
||||
355AE0021E9281DA00F3939D /* MGLScaleBar.mm in Sources */,
|
||||
4018B1C81CDC287F00F666AF /* MGLAnnotationView.mm in Sources */,
|
||||
07D8C6FB1F67560100381808 /* MGLComputedShapeSource.mm in Sources */,
|
||||
DAA4E4341CBB730400178DFB /* MGLFaux3DUserLocationAnnotationView.m in Sources */,
|
||||
35B82BFB1D6C5F8400B1B721 /* NSPredicate+MGLAdditions.mm in Sources */,
|
||||
7E016D871D9E890300A29A21 /* MGLPolygon+MGLAdditions.m in Sources */,
|
||||
@@ -2478,6 +2492,7 @@
|
||||
DAA4E42A1CBB730400178DFB /* NSProcessInfo+MGLAdditions.m in Sources */,
|
||||
DAA4E4211CBB730400178DFB /* MGLOfflineStorage.mm in Sources */,
|
||||
4049C2A01DB6CD6C00B3F799 /* MGLPointCollection.mm in Sources */,
|
||||
07D8C6FC1F67560400381808 /* MGLAbstractShapeSource.mm in Sources */,
|
||||
35136D401D42273000C20EFD /* MGLLineStyleLayer.mm in Sources */,
|
||||
DA704CC51F65A475004B3F28 /* MGLMapAccessibilityElement.mm in Sources */,
|
||||
DA72620E1DEEE3480043BB89 /* MGLOpenGLStyleLayer.mm in Sources */,
|
||||
@@ -2788,7 +2803,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
DEVELOPMENT_TEAM = GJZR2MEM28;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
INFOPLIST_FILE = "$(SRCROOT)/app/Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
@@ -2802,7 +2817,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
DEVELOPMENT_TEAM = GJZR2MEM28;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
INFOPLIST_FILE = "$(SRCROOT)/app/Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
|
||||
@@ -78,6 +78,7 @@ custom_categories:
|
||||
- MGLImageSource
|
||||
- MGLAbstractShapeSource
|
||||
- MGLShapeSource
|
||||
- MGLComputedShapeSource
|
||||
- MGLRasterSource
|
||||
- MGLVectorSource
|
||||
- name: Style Layers
|
||||
|
||||
@@ -52,6 +52,7 @@ FOUNDATION_EXPORT MGL_EXPORT const unsigned char MapboxVersionString[];
|
||||
#import "MGLVectorSource.h"
|
||||
#import "MGLShapeSource.h"
|
||||
#import "MGLAbstractShapeSource.h"
|
||||
#import "MGLComputedShapeSource.h"
|
||||
#import "MGLRasterSource.h"
|
||||
#import "MGLImageSource.h"
|
||||
#import "MGLTilePyramidOfflineRegion.h"
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
### Styles
|
||||
|
||||
* Fixed an issue preventing a dynamically-added `MGLRasterStyleLayer` from drawing until the map pans. ([#10270](https://github.com/mapbox/mapbox-gl-native/pull/10270))
|
||||
* Added `MGLComputedShapeSource` source class that allows applications to supply vector data on a per-tile basis.
|
||||
|
||||
## v0.6.0
|
||||
|
||||
@@ -37,11 +38,8 @@
|
||||
* Increased the default maximum zoom level from 20 to 22. ([#9835](https://github.com/mapbox/mapbox-gl-native/pull/9835))
|
||||
* Added an `overlays` property to `MGLMapView`. ([#8617](https://github.com/mapbox/mapbox-gl-native/pull/8617))
|
||||
* Added `-[MGLMapView cameraThatFitsShape:direction:edgePadding:]` to get a camera with zoom level and center coordinate computed to fit a shape. ([#10107](https://github.com/mapbox/mapbox-gl-native/pull/10107))
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
* Added support selection of shape and polyline annotations.([#9984](https://github.com/mapbox/mapbox-gl-native/pull/9984))
|
||||
* Fixed an issue where a shape annotation callout was not displayed if the centroid was not visible. ([#10255](https://github.com/mapbox/mapbox-gl-native/pull/10255))
|
||||
>>>>>>> release-agua
|
||||
|
||||
### Other changes
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ custom_categories:
|
||||
- MGLTileSource
|
||||
- MGLAbstractShapeSource
|
||||
- MGLShapeSource
|
||||
- MGLComputedShapeSource
|
||||
- MGLRasterSource
|
||||
- MGLVectorSource
|
||||
- name: Style Layers
|
||||
|
||||
@@ -9,10 +9,13 @@
|
||||
/* Begin PBXBuildFile section */
|
||||
0721493F1EE200E900085505 /* MGLImageSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A019EB1ED662D800ACD43E /* MGLImageSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
07A019EF1ED665CD00ACD43E /* MGLImageSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07A019EC1ED662D800ACD43E /* MGLImageSource.mm */; };
|
||||
07A240941F675674002C8210 /* MGLComputedShapeSourceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 07A240921F67566F002C8210 /* MGLComputedShapeSourceTests.m */; };
|
||||
07BA4CAC1EE21887004528F5 /* MGLImageSourceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BA4CAB1EE21887004528F5 /* MGLImageSourceTests.m */; };
|
||||
07D9474B1F6743F000E37934 /* MGLAbstractShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07D947491F6741F500E37934 /* MGLAbstractShapeSource.mm */; };
|
||||
07D9474C1F67441500E37934 /* MGLAbstractShapeSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D947481F6741F500E37934 /* MGLAbstractShapeSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
07D9474D1F67441B00E37934 /* MGLAbstractShapeSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D947471F6741F500E37934 /* MGLAbstractShapeSource_Private.h */; };
|
||||
07F8E2F71F674C8800F794BB /* MGLComputedShapeSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 07F8E2F41F674C8000F794BB /* MGLComputedShapeSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
07F8E2F81F674C9000F794BB /* MGLComputedShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07F8E2F51F674C8000F794BB /* MGLComputedShapeSource.mm */; };
|
||||
1753ED401E53CE6100A9FD90 /* MGLConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 1753ED3F1E53CE5200A9FD90 /* MGLConversion.h */; };
|
||||
1F7454A31ECFB00300021D39 /* MGLLight_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F7454A01ECFB00300021D39 /* MGLLight_Private.h */; };
|
||||
1F7454A41ECFB00300021D39 /* MGLLight.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F7454A11ECFB00300021D39 /* MGLLight.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
@@ -285,10 +288,13 @@
|
||||
/* Begin PBXFileReference section */
|
||||
07A019EB1ED662D800ACD43E /* MGLImageSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLImageSource.h; sourceTree = "<group>"; };
|
||||
07A019EC1ED662D800ACD43E /* MGLImageSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLImageSource.mm; sourceTree = "<group>"; };
|
||||
07A240921F67566F002C8210 /* MGLComputedShapeSourceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLComputedShapeSourceTests.m; sourceTree = "<group>"; };
|
||||
07BA4CAB1EE21887004528F5 /* MGLImageSourceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLImageSourceTests.m; sourceTree = "<group>"; };
|
||||
07D947471F6741F500E37934 /* MGLAbstractShapeSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAbstractShapeSource_Private.h; sourceTree = "<group>"; };
|
||||
07D947481F6741F500E37934 /* MGLAbstractShapeSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAbstractShapeSource.h; sourceTree = "<group>"; };
|
||||
07D947491F6741F500E37934 /* MGLAbstractShapeSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLAbstractShapeSource.mm; sourceTree = "<group>"; };
|
||||
07F8E2F41F674C8000F794BB /* MGLComputedShapeSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLComputedShapeSource.h; sourceTree = "<group>"; };
|
||||
07F8E2F51F674C8000F794BB /* MGLComputedShapeSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLComputedShapeSource.mm; sourceTree = "<group>"; };
|
||||
1753ED3F1E53CE5200A9FD90 /* MGLConversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLConversion.h; sourceTree = "<group>"; };
|
||||
1F7454A01ECFB00300021D39 /* MGLLight_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLight_Private.h; sourceTree = "<group>"; };
|
||||
1F7454A11ECFB00300021D39 /* MGLLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLight.h; sourceTree = "<group>"; };
|
||||
@@ -690,6 +696,8 @@
|
||||
07D947481F6741F500E37934 /* MGLAbstractShapeSource.h */,
|
||||
07D947471F6741F500E37934 /* MGLAbstractShapeSource_Private.h */,
|
||||
07D947491F6741F500E37934 /* MGLAbstractShapeSource.mm */,
|
||||
07F8E2F41F674C8000F794BB /* MGLComputedShapeSource.h */,
|
||||
07F8E2F51F674C8000F794BB /* MGLComputedShapeSource.mm */,
|
||||
352742831D4C244700A1ECE6 /* MGLRasterSource.h */,
|
||||
DA7DC9821DED647F0027472F /* MGLRasterSource_Private.h */,
|
||||
352742841D4C244700A1ECE6 /* MGLRasterSource.mm */,
|
||||
@@ -821,6 +829,7 @@
|
||||
DA87A99A1DC9D88800810D09 /* Sources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
07A240921F67566F002C8210 /* MGLComputedShapeSourceTests.m */,
|
||||
DA87A9961DC9D88400810D09 /* MGLShapeSourceTests.mm */,
|
||||
DA87A9971DC9D88400810D09 /* MGLTileSetTests.mm */,
|
||||
920A3E581E6F859D00C16EFC /* MGLSourceQueryTests.m */,
|
||||
@@ -1143,6 +1152,7 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
556660C61E1BEA0100E2C41B /* MGLFoundation.h in Headers */,
|
||||
07F8E2F71F674C8800F794BB /* MGLComputedShapeSource.h in Headers */,
|
||||
DA8F258F1D51CA600010E6B5 /* MGLRasterStyleLayer.h in Headers */,
|
||||
3508EC641D749D39009B0EE4 /* NSExpression+MGLAdditions.h in Headers */,
|
||||
DAE6C38D1CC31E2A00DB3429 /* MGLOfflineRegion_Private.h in Headers */,
|
||||
@@ -1484,6 +1494,7 @@
|
||||
DA35A2D01CCAAED300E826B2 /* NSValue+MGLAdditions.m in Sources */,
|
||||
3538AA241D542685008EC33D /* MGLStyleLayer.mm in Sources */,
|
||||
DA35A2C01CCA9B1A00E826B2 /* MGLClockDirectionFormatter.m in Sources */,
|
||||
07F8E2F81F674C9000F794BB /* MGLComputedShapeSource.mm in Sources */,
|
||||
DAE6C3BA1CC31EF300DB3429 /* MGLOpenGLLayer.mm in Sources */,
|
||||
DAE6C38A1CC31E2A00DB3429 /* MGLMultiPoint.mm in Sources */,
|
||||
DAE6C3961CC31E2A00DB3429 /* MGLTypes.m in Sources */,
|
||||
@@ -1528,6 +1539,7 @@
|
||||
DAE6C3D41CC34C9900DB3429 /* MGLOfflineRegionTests.m in Sources */,
|
||||
DAE6C3D61CC34C9900DB3429 /* MGLStyleTests.mm in Sources */,
|
||||
1F7454AB1ED1DDBD00021D39 /* MGLLightTest.mm in Sources */,
|
||||
07A240941F675674002C8210 /* MGLComputedShapeSourceTests.m in Sources */,
|
||||
DAEDC4371D606291000224FF /* MGLAttributionButtonTests.m in Sources */,
|
||||
920A3E591E6F859D00C16EFC /* MGLSourceQueryTests.m in Sources */,
|
||||
DA35A2B61CCA14D700E826B2 /* MGLCompassDirectionFormatterTests.m in Sources */,
|
||||
|
||||
@@ -50,6 +50,7 @@ FOUNDATION_EXPORT MGL_EXPORT const unsigned char MapboxVersionString[];
|
||||
#import "MGLVectorSource.h"
|
||||
#import "MGLShapeSource.h"
|
||||
#import "MGLAbstractShapeSource.h"
|
||||
#import "MGLComputedShapeSource.h"
|
||||
#import "MGLRasterSource.h"
|
||||
#import "MGLImageSource.h"
|
||||
#import "MGLTilePyramidOfflineRegion.h"
|
||||
|
||||
Reference in New Issue
Block a user