diff options
Diffstat (limited to 'platform/darwin/src/MGLComputedShapeSource.h')
-rw-r--r-- | platform/darwin/src/MGLComputedShapeSource.h | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/platform/darwin/src/MGLComputedShapeSource.h b/platform/darwin/src/MGLComputedShapeSource.h new file mode 100644 index 0000000000..f90f2c94b1 --- /dev/null +++ b/platform/darwin/src/MGLComputedShapeSource.h @@ -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 |