Style Content
MGLSource
                  @interface MGLSource : NSObject
                        MGLSource is an abstract base class for map content sources. A map content
                        source supplies content to be shown on the map. A source is added to an
                        MGLStyle object along with an
                        MGLForegroundStyleLayer
                        object. The
                        foreground style layer defines the appearance of any content supplied by the
                        source.
                      
Each source defined by the style JSON file is represented at runtime by an
                        MGLSource object that you can use to refine the map’s content. You can also
                        add and remove sources dynamically using methods such as
                        -[MGLStyle addSource:]
                        and
                        -[MGLStyle sourceWithIdentifier:].
                      
Create instances of MGLShapeSource,
                        MGLComputedShapeSource,
                        MGLImageSource, and the concrete
                        subclasses of MGLTileSource
                        (MGLVectorTileSource and
                        MGLRasterTileSource) in order to
                        use MGLSource’s
                        properties and methods. Do not create instances of MGLSource directly, and do
                        not create your own subclasses of this class.
                      
Initializing a Source
- 
                            
-initWithIdentifier:
Returns a source initialized with an identifier.
After initializing and configuring the source, add it to a map view’s style using the
-[MGLStyle addSource:]method.Declaration
Objective-C
- (nonnull instancetype)initWithIdentifier:(nonnull NSString *)identifier;Swift
init(identifier: String)Parameters
identifierA string that uniquely identifies the source in the style to which it is added.
Return Value
An initialized source.
 
Identifying a Source
- 
                            
identifier
A string that uniquely identifies the source in the style to which it is added.
Declaration
Objective-C
@property (nonatomic, copy) NSString *_Nonnull identifier;Swift
var identifier: String { get set } 
MGLShapeSource
                  @interface MGLShapeSource : MGLSource
                        MGLShapeSource is a map content source that supplies vector shapes to be
                        shown on the map. The shapes may be instances of
                        MGLShape or
                        MGLFeature,
                        or they may be defined by local or external
                        GeoJSON code. A shape source is added to an
                        MGLStyle object along with an
                        MGLVectorStyleLayer object. The
                        vector style
                        layer defines the appearance of any content supplied by the shape source. You
                        can update a shape source by setting its shape or URL property.
                      
MGLShapeSource is optimized for data sets that change dynamically and fit
                        completely in memory. For large data sets that do not fit completely in memory,
                        use the MGLComputedShapeSource
                        or MGLVectorTileSource class.
Each
                        geojson
                        source defined by the style JSON file is represented at runtime by an
                        MGLShapeSource object that you can use to refine the map’s content and
                        initialize new style layers. You can also add and remove sources dynamically
                        using methods such as
                        -[MGLStyle addSource:]
                        and
                        -[MGLStyle sourceWithIdentifier:].
                      
Any vector style layer initialized with a shape source should have a nil
                        value in its sourceLayerIdentifier property.
Example
var coordinates: [CLLocationCoordinate2D] = [
                      CLLocationCoordinate2D(latitude: 37.77, longitude: -122.42),
                      CLLocationCoordinate2D(latitude: 38.91, longitude: -77.04),
                  ]
                  let polyline = MGLPolylineFeature(coordinates: &coordinates, count: UInt(coordinates.count))
                  let source = MGLShapeSource(identifier: "lines", features: [polyline], options: nil)
                  mapView.style?.addSource(source)
                  
                      Related examples
See the Cluster point data,
                        Use images to
                          cluster point data, and Add
                          live data examples to learn how to add data to your map using this
                        MGLSource object.
Initializing a Source
- 
                            
-initWithIdentifier:URL:options:
Returns a shape source with an identifier, URL, and dictionary of options for the source.
This class supports the following options:
MGLShapeSourceOptionClustered,MGLShapeSourceOptionClusterRadius,MGLShapeSourceOptionMaximumZoomLevelForClustering,MGLShapeSourceOptionMinimumZoomLevel,MGLShapeSourceOptionMaximumZoomLevel,MGLShapeSourceOptionBuffer, andMGLShapeSourceOptionSimplificationTolerance. Shapes provided by a shape source are not clipped or wrapped automatically.Related examples
See the Add live data example to learn how to add live data to your map by updating the an
MGLShapeSourceobject’sURLproperty.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier URL:(nonnull NSURL *)url options: (nullable NSDictionary<MGLShapeSourceOption, id> *)options;Swift
init(identifier: String, url: URL, options: [MGLShapeSourceOption : Any]? = nil)Parameters
identifierA string that uniquely identifies the source.
urlAn HTTP(S) URL, absolute file URL, or local file URL relative to the current application’s resource bundle.
optionsAn
NSDictionaryof options for this source.Return Value
An initialized shape source.
 - 
                            
-initWithIdentifier:shape:options:
Returns a shape source with an identifier, a shape, and dictionary of options for the source.
This class supports the following options:
MGLShapeSourceOptionClustered,MGLShapeSourceOptionClusterRadius,MGLShapeSourceOptionMaximumZoomLevelForClustering,MGLShapeSourceOptionMinimumZoomLevel,MGLShapeSourceOptionMaximumZoomLevel,MGLShapeSourceOptionBuffer, andMGLShapeSourceOptionSimplificationTolerance. Shapes provided by a shape source are not clipped or wrapped automatically.To specify attributes about the shape, use an instance of an
MGLShapesubclass that conforms to theMGLFeatureprotocol, such asMGLPointFeature. To include multiple shapes in the source, use anMGLShapeCollectionorMGLShapeCollectionFeatureobject, or use the-initWithIdentifier:features:options:or-initWithIdentifier:shapes:options:methods.To create a shape from GeoJSON source code, use the
+[MGLShape shapeWithData:encoding:error:]method.Related examples
See the Animate a line example to learn how to animate line data by continously updating an
MGLShapeSource‘sshapeattribute.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier shape:(nullable MGLShape *)shape options: (nullable NSDictionary<MGLShapeSourceOption, id> *)options;Swift
init(identifier: String, shape: MGLShape?, options: [MGLShapeSourceOption : Any]? = nil)Parameters
identifierA string that uniquely identifies the source.
shapeA concrete subclass of
MGLShapeoptionsAn
NSDictionaryof options for this source.Return Value
An initialized shape source.
 - 
                            
-initWithIdentifier:features:options:
Returns a shape source with an identifier, an array of features, and a dictionary of options for the source.
This class supports the following options:
MGLShapeSourceOptionClustered,MGLShapeSourceOptionClusterRadius,MGLShapeSourceOptionMaximumZoomLevelForClustering,MGLShapeSourceOptionMinimumZoomLevel,MGLShapeSourceOptionMaximumZoomLevel,MGLShapeSourceOptionBuffer, andMGLShapeSourceOptionSimplificationTolerance. Shapes provided by a shape source are not clipped or wrapped automatically.Unlike
-initWithIdentifier:shapes:options:, this method acceptsMGLFeatureinstances, such asMGLPointFeatureobjects, whose attributes you can use when applying a predicate toMGLVectorStyleLayeror configuring a style layer’s appearance.To create a shape from GeoJSON source code, use the
+[MGLShape shapeWithData:encoding:error:]method.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier features:(nonnull NSArray<MGLShape<MGLFeature> *> *)features options: (nullable NSDictionary<MGLShapeSourceOption, id> *)options;Parameters
identifierA string that uniquely identifies the source.
featuresAn array of objects that conform to the MGLFeature protocol.
optionsAn
NSDictionaryof options for this source.Return Value
An initialized shape source.
 - 
                            
-initWithIdentifier:shapes:options:
Returns a shape source with an identifier, an array of shapes, and a dictionary of options for the source.
This class supports the following options:
MGLShapeSourceOptionClustered,MGLShapeSourceOptionClusterRadius,MGLShapeSourceOptionMaximumZoomLevelForClustering,MGLShapeSourceOptionMinimumZoomLevel,MGLShapeSourceOptionMaximumZoomLevel,MGLShapeSourceOptionBuffer, andMGLShapeSourceOptionSimplificationTolerance. Shapes provided by a shape source are not clipped or wrapped automatically.Any
MGLFeatureinstance passed into this initializer is treated as an ordinary shape, causing any attributes to be inaccessible to anMGLVectorStyleLayerwhen evaluating a predicate or configuring certain layout or paint attributes. To preserve the attributes associated with each feature, use the-initWithIdentifier:features:options:method instead.To create a shape from GeoJSON source code, use the
+[MGLShape shapeWithData:encoding:error:]method.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier shapes:(nonnull NSArray<MGLShape *> *)shapes options: (nullable NSDictionary<MGLShapeSourceOption, id> *)options;Swift
convenience init(identifier: String, shapes: [MGLShape], options: [MGLShapeSourceOption : Any]? = nil)Parameters
identifierA string that uniquely identifies the source.
shapesAn array of shapes; each shape is a member of a concrete subclass of MGLShape.
optionsAn
NSDictionaryof options for this source.Return Value
An initialized shape source.
 
Accessing a Source’s Content
- 
                            
shape
The contents of the source. A shape can represent a GeoJSON geometry, a feature, or a collection of features.
If the receiver was initialized using
-initWithIdentifier:URL:options:, this property is set tonil. This property is unavailable until the receiver is passed into-[MGLStyle addSource:].You can get/set the shapes within a collection via this property. Actions must be performed on the application’s main thread.
 - 
                            
URL
The URL to the GeoJSON document that specifies the contents of the source.
If the receiver was initialized using
-initWithIdentifier:shape:options:, this property is set tonil.Declaration
Objective-C
@property (nonatomic, copy, nullable) NSURL *URL;Swift
var url: URL? { get set } - 
                            
-featuresMatchingPredicate:
Returns an array of map features for this source, filtered by the given predicate.
Each object in the returned array represents a feature for the current style and provides access to attributes specified via the
shapeproperty.Features come from tiled GeoJSON data that is converted to tiles internally, so feature geometries are clipped at tile boundaries and features may appear duplicated across tiles. For example, suppose this source contains a long polyline representing a road. The resulting array includes those parts of the road that lie within the map tiles that the source has loaded, even if the road extends into other tiles. The portion of the road within each map tile is included individually.
Returned features may not necessarily be visible to the user at the time they are loaded: the style may lack a layer that draws the features in question. To obtain only visible features, use the
-[MGLMapView visibleFeaturesAtPoint:inStyleLayersWithIdentifiers:predicate:]or-[MGLMapView visibleFeaturesInRect:inStyleLayersWithIdentifiers:predicate:]method.Declaration
Objective-C
- (nonnull NSArray<id<MGLFeature>> *)featuresMatchingPredicate: (nullable NSPredicate *)predicate;Parameters
predicateA predicate to filter the returned features. Use
nilto include all features in the source.Return Value
An array of objects conforming to the
MGLFeatureprotocol that represent features in the source that match the predicate. - 
                            
-leavesOfCluster:offset:limit:
Returns an array of map features that are the leaves of the specified cluster. (“Leaves” are the original points that belong to the cluster.)
This method supports pagination; you supply an offset (number of features to skip) and a maximum number of features to return.
Declaration
Objective-C
- (nonnull NSArray<id<MGLFeature>> *) leavesOfCluster:(nonnull MGLPointFeatureCluster *)cluster offset:(NSUInteger)offset limit:(NSUInteger)limit;Parameters
clusterAn object of type
MGLPointFeatureCluster(that conforms to theMGLClusterprotocol).offsetNumber of features to skip.
limitThe maximum number of features to return
Return Value
An array of objects that conform to the
MGLFeatureprotocol. - 
                            
-childrenOfCluster:
Returns an array of map features that are the immediate children of the specified cluster on the next zoom level. The may include features that also conform to the
MGLClusterprotocol (currently only objects of typeMGLPointFeatureCluster).Note
The returned array may contain the
clusterthat was passed in, if the next zoom level doesn’t match the zoom level for expanding that cluster. See-[MGLShapeSource zoomLevelForExpandingCluster:].Declaration
Objective-C
- (nonnull NSArray<id<MGLFeature>> *)childrenOfCluster: (nonnull MGLPointFeatureCluster *)cluster;Parameters
clusterAn object of type
MGLPointFeatureCluster(that conforms to theMGLClusterprotocol).Return Value
An array of objects that conform to the
MGLFeatureprotocol. - 
                            
-zoomLevelForExpandingCluster:
Returns the zoom level at which the given cluster expands.
Declaration
Objective-C
- (double)zoomLevelForExpandingCluster: (nonnull MGLPointFeatureCluster *)cluster;Swift
func zoomLevel(forExpanding cluster: MGLPointFeatureCluster) -> DoubleParameters
clusterAn object of type
MGLPointFeatureCluster(that conforms to theMGLClusterprotocol).Return Value
Zoom level. This should be >= 0; any negative return value should be considered an error.
 
MGLComputedShapeSource
                  @interface MGLComputedShapeSource : MGLSource
                        MGLComputedShapeSource is a map content source that supplies vector shapes,
                        one tile at a time, to be shown on the map on demand. You implement a class
                        conforming to the
                        MGLComputedShapeSourceDataSource
                        protocol that returns
                        instances of MGLShape or
                        MGLFeature, then add a computed shape
                        source to an
                        MGLStyle object along with an
                        MGLVectorStyleLayer object. The
                        vector style
                        layer defines the appearance of any content supplied by the computed shape
                        source.
                      
MGLComputedShapeSource is similar to
                        MGLShapeSource but is optimized for
                        data sets that change dynamically or are too large to fit completely in memory.
                        It is also useful for data that is divided into tiles in a format other than
                        Mapbox Vector Tiles. For
                        GeoJSON data, use the
                        MGLShapeSource class.
                        For static tiles or Mapbox Vector Tiles, use the
                        MGLVectorTileSource class.
                      
You can add and remove sources dynamically using methods such as
                        -[MGLStyle addSource:]
                        and
                        -[MGLStyle sourceWithIdentifier:].
                        This class
                        cannot be represented in a style JSON file; you must add it ot the style at
                        runtime.
                      
- 
                            
-initWithIdentifier:options:
Returns a custom shape data source initialized with an identifier, and a dictionary of options for the source according to the style specification.
This class supports the following options:
MGLShapeSourceOptionMinimumZoomLevel,MGLShapeSourceOptionMaximumZoomLevel,MGLShapeSourceOptionBuffer,MGLShapeSourceOptionSimplificationTolerance,MGLShapeSourceOptionWrapsCoordinates, andMGLShapeSourceOptionClipsCoordinates. Shapes provided by a computed shape source cannot be clustered.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier options: (nullable NSDictionary<MGLShapeSourceOption, id> *)options;Swift
init(identifier: String, options: [MGLShapeSourceOption : Any]? = nil)Parameters
identifierA string that uniquely identifies the source.
optionsAn
NSDictionaryof options for this source. - 
                            
-initWithIdentifier:dataSource:options:
Returns a custom shape data source initialized with an identifier, data source, and a dictionary of options for the source according to the style specification.
This class supports the following options:
MGLShapeSourceOptionMinimumZoomLevel,MGLShapeSourceOptionMaximumZoomLevel,MGLShapeSourceOptionBuffer,MGLShapeSourceOptionSimplificationTolerance,MGLShapeSourceOptionWrapsCoordinates, andMGLShapeSourceOptionClipsCoordinates. Shapes provided by a computed shape source cannot be clustered.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier dataSource:(nonnull id<MGLComputedShapeSourceDataSource>)dataSource options: (nullable NSDictionary<MGLShapeSourceOption, id> *)options;Swift
convenience init(identifier: String, dataSource: MGLComputedShapeSourceDataSource, options: [MGLShapeSourceOption : Any]? = nil)Parameters
identifierA string that uniquely identifies the source.
optionsAn
NSDictionaryof options for this source. - 
                            
-invalidateBounds:
Invalidates all the features and properties intersecting with or contained in the specified bounds. New fetch requests will immediately be invoked on the
MGLComputedShapeSourceDataSource.Declaration
Objective-C
- (void)invalidateBounds:(MGLCoordinateBounds)bounds;Swift
func invalidateBounds(_ bounds: MGLCoordinateBounds)Parameters
boundsCoordinate bounds to invalidate.
 - 
                            
-invalidateTileAtX:y:zoomLevel:
Invalidates all the feautres and properties of a given tile. A new fetch request will immediately be invoked on the
MGLComputedShapeSourceDataSource.Declaration
Objective-C
- (void)invalidateTileAtX:(NSUInteger)x y:(NSUInteger)y zoomLevel:(NSUInteger)zoomLevel;Swift
func invalidateTileAt(x: UInt, y: UInt, zoomLevel: UInt)Parameters
xTile X coordinate.
yTile Y coordinate.
zoomLevelTile zoom level.
 - 
                            
-setFeatures:inTileAtX:y: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.Declaration
Objective-C
- (void)setFeatures:(nonnull NSArray<MGLShape<MGLFeature> *> *)features inTileAtX:(NSUInteger)x y:(NSUInteger)y zoomLevel:(NSUInteger)zoomLevel;Parameters
featuresFeatures for the tile.
xTile X coordinate.
yTile Y coordinate.
zoomLevelTile zoom level.
 - 
                            
dataSource
An object that implements the
MGLComputedShapeSourceDataSourceprotocol that will be queried for tile data.Declaration
Objective-C
@property (nonatomic, weak, nullable) id<MGLComputedShapeSourceDataSource> dataSource;Swift
weak var dataSource: MGLComputedShapeSourceDataSource? { get set } - 
                            
requestQueue
A queue that calls to the data source will be made on.
Declaration
Objective-C
@property (nonatomic, readonly) NSOperationQueue *_Nonnull requestQueue;Swift
var requestQueue: OperationQueue { get } 
MGLTileSource
                  @interface MGLTileSource : MGLSource
                        MGLTileSource is a map content source that supplies map tiles to be shown on
                        the map. The location of and metadata about the tiles are defined either by an
                        option dictionary or by an external file that conforms to the
                        TileJSON specification.
                        A tile source is added to an MGLStyle object
                        along with one or more
                        MGLRasterStyleLayer or
                        MGLVectorStyleLayer objects. Use
                        a style layer to
                        control the appearance of content supplied by the tile source.
                      
A tile source is also known as a tile set. To learn about the structure of a Mapbox-hosted tile set, view it in Mapbox Studio’s Tilesets editor.
Create instances of
                        MGLRasterTileSource and
                        MGLVectorTileSource in order
                        to use MGLTileSource‘s properties and methods. Do not create instances of
                        MGLTileSource directly, and do not create your own subclasses of this class.
                      
Accessing a Source’s Content
- 
                            
configurationURL
The URL to the TileJSON configuration file that specifies the contents of the source.
If the receiver was initialized using
-initWithIdentifier:tileURLTemplates:options, this property is set tonil.Declaration
Objective-C
@property (nonatomic, copy, readonly, nullable) NSURL *configurationURL;Swift
var configurationURL: URL? { get } 
Accessing Attribution Strings
- 
                            
attributionInfos
An array of
MGLAttributionInfoobjects that define the attribution statements to be displayed when the map is shown to the user.By default, this array is empty. If the source is initialized with a configuration URL, this array is also empty until the configuration JSON file is loaded.
Declaration
Objective-C
@property (nonatomic, copy, readonly) NSArray<MGLAttributionInfo *> *_Nonnull attributionInfos;Swift
var attributionInfos: [MGLAttributionInfo] { get } 
MGLRasterTileSource
                  @interface MGLRasterTileSource : MGLTileSource
                        MGLRasterTileSource is a map content source that supplies raster image tiles
                        to be shown on the map. The location of and metadata about the tiles are
                        defined either by an option dictionary or by an external file that conforms to
                        the
                        TileJSON specification.
                        A raster tile source is added to an MGLStyle
                        object along with one or more
                        MGLRasterStyleLayer objects. Use
                        a raster style layer to control the
                        appearance of content supplied by the raster tile source.
                      
Each
                        raster
                        source defined by the style JSON file is represented at runtime by an
                        MGLRasterTileSource object that you can use to initialize new style layers. You
                        can also add and remove sources dynamically using methods such as
                        -[MGLStyle addSource:]
                        and
                        -[MGLStyle sourceWithIdentifier:].
                      
Example
let source = MGLRasterTileSource(identifier: "clouds", tileURLTemplates: ["https://example.com/raster-tiles/{z}/{x}/{y}.png"], options: [
                      .minimumZoomLevel: 9,
                      .maximumZoomLevel: 16,
                      .tileSize: 512,
                      .attributionInfos: [
                          MGLAttributionInfo(title: NSAttributedString(string: "© Mapbox"), url: URL(string: "https://mapbox.com"))
                      ]
                  ])
                  mapView.style?.addSource(source)
                  
                      Related examples
See the 
                          Add raster imagery example to learn how to add a
                        MGLRasterStyleLayer
                        to your map using an MGLRasterTileSource.
Initializing a Source
- 
                            
-initWithIdentifier:configurationURL:
Returns a raster tile source initialized with an identifier and configuration URL.
After initializing and configuring the source, add it to a map view’s style using the
-[MGLStyle addSource:]method.The URL may be a full HTTP or HTTPS URL or canonical URL. The URL should point to a JSON file that conforms to the TileJSON specification.
If a Mapbox URL is specified, this source uses a tile size of 256. For all other tilesets, the default value is 512. (See the
MGLTileSourceOptionTileSizedocumentation for more information about tile sizes.) If you need to use a tile size other than the default, use the-initWithIdentifier:configurationURL:tileSize:method.Declaration
Objective-C
- (nonnull instancetype)initWithIdentifier:(nonnull NSString *)identifier configurationURL:(nonnull NSURL *)configurationURL;Swift
convenience init(identifier: String, configurationURL: URL)Parameters
identifierA string that uniquely identifies the source in the style to which it is added.
configurationURLA URL to a TileJSON configuration file describing the source’s contents and other metadata.
Return Value
An initialized raster tile source.
 - 
                            
-initWithIdentifier:configurationURL:tileSize:
Returns a raster tile source initialized with an identifier, configuration URL, and tile size.
After initializing and configuring the source, add it to a map view’s style using the
-[MGLStyle addSource:]method.The URL may be a full HTTP or HTTPS URL or, canonical URL. The URL should point to a JSON file that conforms to the TileJSON specification.
Declaration
Objective-C
- (nonnull instancetype)initWithIdentifier:(nonnull NSString *)identifier configurationURL:(nonnull NSURL *)configurationURL tileSize:(CGFloat)tileSize;Swift
init(identifier: String, configurationURL: URL, tileSize: CGFloat)Parameters
identifierA string that uniquely identifies the source in the style to which it is added.
configurationURLA URL to a TileJSON configuration file describing the source’s contents and other metadata.
tileSizeThe width and height (measured in points) of each tiled image in the raster tile source. See the
MGLTileSourceOptionTileSizedocumentation for details.Return Value
An initialized raster tile source.
 - 
                            
-initWithIdentifier:tileURLTemplates:options:
Returns a raster tile source initialized an identifier, tile URL templates, and options.
Tile URL templates are strings that specify the URLs of the raster tile images to load. See the “Tile URL Templates” guide for information about the format of a tile URL template.
After initializing and configuring the source, add it to a map view’s style using the
-[MGLStyle addSource:]method.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier tileURLTemplates:(nonnull NSArray<NSString *> *)tileURLTemplates options: (nullable NSDictionary<MGLTileSourceOption, id> *)options;Swift
init(identifier: String, tileURLTemplates: [String], options: [MGLTileSourceOption : Any]? = nil)Parameters
identifierA string that uniquely identifies the source in the style to which it is added.
tileURLTemplatesAn array of tile URL template strings. Only the first string is used; any additional strings are ignored.
optionsA dictionary containing configuration options. See
MGLTileSourceOptionfor available keys and values. Pass innilto use the default values.Return Value
An initialized tile source.
 
MGLRasterDEMSource
- 
                            
MGLSource
MGLSourceis an abstract base class for map content sources. A map content source supplies content to be shown on the map. A source is added to anMGLStyleobject along with anMGLForegroundStyleLayerobject. The foreground style layer defines the appearance of any content supplied by the source.Each source defined by the style JSON file is represented at runtime by an
MGLSourceobject that you can use to refine the map’s content. You can also add and remove sources dynamically using methods such as-[MGLStyle addSource:]and-[MGLStyle sourceWithIdentifier:].Create instances of
See moreMGLShapeSource,MGLComputedShapeSource,MGLImageSource, and the concrete subclasses ofMGLTileSource(MGLVectorTileSourceandMGLRasterTileSource) in order to useMGLSource’s properties and methods. Do not create instances ofMGLSourcedirectly, and do not create your own subclasses of this class.Declaration
Objective-C
@interface MGLSource : NSObjectSwift
class MGLSource : NSObject - 
                            
MGLShapeSource
MGLShapeSourceis a map content source that supplies vector shapes to be shown on the map. The shapes may be instances ofMGLShapeorMGLFeature, or they may be defined by local or external GeoJSON code. A shape source is added to anMGLStyleobject along with anMGLVectorStyleLayerobject. The vector style layer defines the appearance of any content supplied by the shape source. You can update a shape source by setting itsshapeorURLproperty.MGLShapeSourceis optimized for data sets that change dynamically and fit completely in memory. For large data sets that do not fit completely in memory, use theMGLComputedShapeSourceorMGLVectorTileSourceclass.Each
geojsonsource defined by the style JSON file is represented at runtime by anMGLShapeSourceobject that you can use to refine the map’s content and initialize new style layers. You can also add and remove sources dynamically using methods such as-[MGLStyle addSource:]and-[MGLStyle sourceWithIdentifier:].Any vector style layer initialized with a shape source should have a
nilvalue in itssourceLayerIdentifierproperty.Example
var coordinates: [CLLocationCoordinate2D] = [ CLLocationCoordinate2D(latitude: 37.77, longitude: -122.42), CLLocationCoordinate2D(latitude: 38.91, longitude: -77.04), ] let polyline = MGLPolylineFeature(coordinates: &coordinates, count: UInt(coordinates.count)) let source = MGLShapeSource(identifier: "lines", features: [polyline], options: nil) mapView.style?.addSource(source)Related examples
See the Cluster point data, Use images to cluster point data, and Add live data examples to learn how to add data to your map using this
See moreMGLSourceobject. - 
                            
MGLComputedShapeSource
MGLComputedShapeSourceis a map content source that supplies vector shapes, one tile at a time, to be shown on the map on demand. You implement a class conforming to theMGLComputedShapeSourceDataSourceprotocol that returns instances ofMGLShapeorMGLFeature, then add a computed shape source to anMGLStyleobject along with anMGLVectorStyleLayerobject. The vector style layer defines the appearance of any content supplied by the computed shape source.MGLComputedShapeSourceis similar toMGLShapeSourcebut is optimized for data sets that change dynamically or are too large to fit completely in memory. It is also useful for data that is divided into tiles in a format other than Mapbox Vector Tiles. For GeoJSON data, use theMGLShapeSourceclass. For static tiles or Mapbox Vector Tiles, use theMGLVectorTileSourceclass.You can add and remove sources dynamically using methods such as
See more-[MGLStyle addSource:]and-[MGLStyle sourceWithIdentifier:]. This class cannot be represented in a style JSON file; you must add it ot the style at runtime. - 
                            
MGLTileSource
MGLTileSourceis a map content source that supplies map tiles to be shown on the map. The location of and metadata about the tiles are defined either by an option dictionary or by an external file that conforms to the TileJSON specification. A tile source is added to anMGLStyleobject along with one or moreMGLRasterStyleLayerorMGLVectorStyleLayerobjects. Use a style layer to control the appearance of content supplied by the tile source.A tile source is also known as a tile set. To learn about the structure of a Mapbox-hosted tile set, view it in Mapbox Studio’s Tilesets editor.
Create instances of
See moreMGLRasterTileSourceandMGLVectorTileSourcein order to useMGLTileSource‘s properties and methods. Do not create instances ofMGLTileSourcedirectly, and do not create your own subclasses of this class. - 
                            
MGLRasterTileSource
MGLRasterTileSourceis a map content source that supplies raster image tiles to be shown on the map. The location of and metadata about the tiles are defined either by an option dictionary or by an external file that conforms to the TileJSON specification. A raster tile source is added to anMGLStyleobject along with one or moreMGLRasterStyleLayerobjects. Use a raster style layer to control the appearance of content supplied by the raster tile source.Each
rastersource defined by the style JSON file is represented at runtime by anMGLRasterTileSourceobject that you can use to initialize new style layers. You can also add and remove sources dynamically using methods such as-[MGLStyle addSource:]and-[MGLStyle sourceWithIdentifier:].Example
let source = MGLRasterTileSource(identifier: "clouds", tileURLTemplates: ["https://example.com/raster-tiles/{z}/{x}/{y}.png"], options: [ .minimumZoomLevel: 9, .maximumZoomLevel: 16, .tileSize: 512, .attributionInfos: [ MGLAttributionInfo(title: NSAttributedString(string: "© Mapbox"), url: URL(string: "https://mapbox.com")) ] ]) mapView.style?.addSource(source)Related examples
See the Add raster imagery example to learn how to add a
See moreMGLRasterStyleLayerto your map using anMGLRasterTileSource.Declaration
Objective-C
@interface MGLRasterTileSource : MGLTileSourceSwift
class MGLRasterTileSource : MGLTileSource - 
                            
MGLRasterDEMSource
MGLRasterDEMSourceis a map content source that supplies rasterized digital elevation model (DEM) tiles to be shown on the map. The location of and metadata about the tiles are defined either by an option dictionary or by an external file that conforms to the TileJSON specification. A raster DEM source is added to anMGLStyleobject along with one or moreMGLHillshadeStyleLayerobjects. Use a hillshade style layer to control the appearance of content supplied by the raster DEM source.Each
raster-demsource defined by the style JSON file is represented at runtime by anMGLRasterDEMSourceobject that you can use to initialize new style layers. You can also add and remove sources dynamically using methods such as-[MGLStyle addSource:]and-[MGLStyle sourceWithIdentifier:].Currently, raster DEM sources only support the format used by Mapbox Terrain-RGB.
Example
let terrainRGBURL = URL(string: "maptiler://sources/terrain-rgb")! let source = MGLRasterDEMSource(identifier: "hills", configurationURL: terrainRGBURL) mapView.style?.addSource(source)Declaration
Objective-C
@interface MGLRasterDEMSource : MGLRasterTileSourceSwift
class MGLRasterDEMSource : MGLRasterTileSource - 
                            
MGLVectorTileSource
MGLVectorTileSourceis a map content source that supplies tiled vector data in Mapbox Vector Tile format to be shown on the map. The location of and metadata about the tiles are defined either by an option dictionary or by an external file that conforms to the TileJSON specification. A vector tile source is added to anMGLStyleobject along with one or moreMGLVectorStyleLayerobjects. A vector style layer defines the appearance of any content supplied by the vector tile source.MGLVectorTileSourceis optimized for data sets that are too large to fit completely in memory, such as vector tile sets or data sets managed in Mapbox Studio. For GeoJSON data, use theMGLShapeSourceclass. For tiled data that changes dynamically, theMGLComputedShapeSourceclass may be a suitable alternative.Each
vectorsource defined by the style JSON file is represented at runtime by anMGLVectorTileSourceobject that you can use to initialize new style layers. You can also add and remove sources dynamically using methods such as-[MGLStyle addSource:]and-[MGLStyle sourceWithIdentifier:].Within each vector tile, each geometric coordinate must lie between −1 × extent and (extent × 2) − 1, inclusive. Any vector style layer initialized with a vector tile source must have a non-
nilvalue in itssourceLayerIdentifierproperty.Commonly used vector tile sources include Mapbox Streets, Mapbox Terrain, and Mapbox Traffic.
Example
let source = MGLVectorTileSource(identifier: "pois", tileURLTemplates: ["https://example.com/vector-tiles/{z}/{x}/{y}.mvt"], options: [ .minimumZoomLevel: 9, .maximumZoomLevel: 16, .attributionInfos: [ MGLAttributionInfo(title: NSAttributedString(string: "© Mapbox"), url: URL(string: "https://mapbox.com")) ] ]) mapView.style?.addSource(source)Related examples
See the Data-driven circles example to learn how to add data to your map using an
See moreMGLVectorTileSourceobject.Declaration
Objective-C
@interface MGLVectorTileSource : MGLTileSourceSwift
class MGLVectorTileSource : MGLTileSource - 
                            
MGLImageSource
MGLImageSourceis a content source that is used for a georeferenced raster image to be shown on the map. The georeferenced image scales and rotates as the user zooms and rotates the map. Images may also be used as icons or patterns in a style layer. To register an image for use as an icon or pattern, use the-[MGLStyle setImage:forName:]method. To configure a point annotation’s image, use theMGLAnnotationImageclass.The geographic location of the raster image content, supplied with
MGLCoordinateQuad, can be non-axis aligned.MGLImageSourcesupports raster content fromNSURL,NSImage(macOS), orUIImage(iOS). An image source is added to anMGLStyleobject along with one or moreMGLRasterStyleLayerobjects. Use a raster style layer to control the appearance of content supplied by the image source.Each
imagesource defined by the style JSON file is represented at runtime by anMGLImageSourceobject that you can use to initialize new style layers. You can also add and remove sources dynamically using methods such as-[MGLStyle addSource:]and-[MGLStyle sourceWithIdentifier:].Example
let coordinates = MGLCoordinateQuad( topLeft: CLLocationCoordinate2D(latitude: 46.437, longitude: -80.425), bottomLeft: CLLocationCoordinate2D(latitude: 37.936, longitude: -80.425), bottomRight: CLLocationCoordinate2D(latitude: 37.936, longitude: -71.516), topRight: CLLocationCoordinate2D(latitude: 46.437, longitude: -71.516)) let source = MGLImageSource(identifier: "radar", coordinateQuad: coordinates, url: URL(string: "https://maplibre.org/maplibre-gl-js-docs/assets/radar.gif")!) mapView.style?.addSource(source)Related examples
See the Add an image example to learn how to add an image to your map using
See moreMGLImageSource. 
MGLVectorTileSource
                  @interface MGLVectorTileSource : MGLTileSource
                        MGLVectorTileSource is a map content source that supplies tiled vector data
                        in Mapbox Vector Tile format
                        to be shown on the map. The location of and metadata about the tiles are
                        defined either by an option dictionary or by an external file that conforms to
                        the
                        TileJSON specification.
                        A vector tile source is added to an MGLStyle
                        object along with one or more
                        MGLVectorStyleLayer objects. A
                        vector style layer defines the appearance of
                        any content supplied by the vector tile source.
                      
MGLVectorTileSource is optimized for data sets that are too large to fit
                        completely in memory, such as vector tile sets or data sets managed in
                        Mapbox Studio. For
                        GeoJSON data, use the
                        MGLShapeSource
                        class. For tiled data that changes dynamically, the
                        MGLComputedShapeSource
                        class may be a suitable alternative.
                      
Each
                        vector
                        source defined by the style JSON file is represented at runtime by an
                        MGLVectorTileSource object that you can use to initialize new style layers.
                        You can also add and remove sources dynamically using methods such as
                        -[MGLStyle addSource:]
                        and
                        -[MGLStyle sourceWithIdentifier:].
                      
Within each vector tile, each geometric coordinate must lie between
                        −1 × extent and
                        (extent × 2) − 1, inclusive. Any vector style
                        layer initialized with a vector tile source must have a non-nil value in its
                        sourceLayerIdentifier property.
                      
Commonly used vector tile sources include Mapbox Streets, Mapbox Terrain, and Mapbox Traffic.
Example
let source = MGLVectorTileSource(identifier: "pois", tileURLTemplates: ["https://example.com/vector-tiles/{z}/{x}/{y}.mvt"], options: [
                      .minimumZoomLevel: 9,
                      .maximumZoomLevel: 16,
                      .attributionInfos: [
                          MGLAttributionInfo(title: NSAttributedString(string: "© Mapbox"), url: URL(string: "https://mapbox.com"))
                      ]
                  ])
                  mapView.style?.addSource(source)
                  
                      Related examples
See the 
                          Data-driven circles example to learn how to add data to your map using
                        an MGLVectorTileSource object.
Initializing a Source
- 
                            
-initWithIdentifier:configurationURL:
Returns a vector tile source initialized with an identifier and configuration URL.
After initializing and configuring the source, add it to a map view’s style using the
-[MGLStyle addSource:]method.The URL may be a full HTTP or HTTPS URL or a canonical URL. The URL should point to a JSON file that conforms to the TileJSON specification.
Declaration
Objective-C
- (nonnull instancetype)initWithIdentifier:(nonnull NSString *)identifier configurationURL:(nonnull NSURL *)configurationURL;Swift
init(identifier: String, configurationURL: URL)Parameters
identifierA string that uniquely identifies the source in the style to which it is added.
configurationURLA URL to a TileJSON configuration file describing the source’s contents and other metadata.
Return Value
An initialized vector tile source.
 - 
                            
-initWithIdentifier:tileURLTemplates:options:
Returns a vector tile source initialized an identifier, tile URL templates, and options.
Tile URL templates are strings that specify the URLs of the vector tiles to load. See the “Tile URL Templates” guide for information about the format of a tile URL template.
After initializing and configuring the source, add it to a map view’s style using the
-[MGLStyle addSource:]method.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier tileURLTemplates:(nonnull NSArray<NSString *> *)tileURLTemplates options: (nullable NSDictionary<MGLTileSourceOption, id> *)options;Swift
init(identifier: String, tileURLTemplates: [String], options: [MGLTileSourceOption : Any]? = nil)Parameters
identifierA string that uniquely identifies the source in the style to which it is added.
tileURLTemplatesAn array of tile URL template strings. Only the first string is used; any additional strings are ignored.
optionsA dictionary containing configuration options. See
MGLTileSourceOptionfor available keys and values. Pass innilto use the default values.Return Value
An initialized tile source.
 
Accessing a Source’s Content
- 
                            
-featuresInSourceLayersWithIdentifiers:predicate:
Returns an array of map features loaded by this source, restricted to the given source layers and filtered by the given predicate.
Each object in the returned array represents a feature loaded by the source and provides access to attributes specified as part of the loaded feature. The source loads a feature if the source is added to an
MGLMapView’s style; that style has a layer that uses the source; and the map view has recently scrolled to the region containing the feature.Features come from tiled vector data that is converted to tiles internally, so feature geometries are clipped at tile boundaries and features may appear duplicated across tiles. For example, suppose part of a lengthy polyline representing a road has recently scrolled into view. The resulting array includes those parts of the road that lie within the map tiles that the source has loaded, even if the road extends into other tiles. The portion of the road within each map tile is included individually.
Returned features may not necessarily be visible to the user at the time they are loaded: the style may contain a layer that forces the source’s tiles to load but filters out the features in question, preventing them from being drawn. To obtain only visible features, use the
-[MGLMapView visibleFeaturesAtPoint:inStyleLayersWithIdentifiers:predicate:]or-[MGLMapView visibleFeaturesInRect:inStyleLayersWithIdentifiers:predicate:]method.Declaration
Objective-C
- (nonnull NSArray<id<MGLFeature>> *) featuresInSourceLayersWithIdentifiers: (nonnull NSSet<NSString *> *)sourceLayerIdentifiers predicate:(nullable NSPredicate *)predicate;Swift
func features(sourceLayerIdentifiers: Set<String>, predicate: NSPredicate?) -> [MGLFeature]Parameters
sourceLayerIdentifiersThe source layers to include in the query. Only the features contained in these source layers are included in the returned array. This array may not be empty.
predicateA predicate to filter the returned features. Use
nilto include all loaded features.Return Value
An array of objects conforming to the
MGLFeatureprotocol that represent features loaded by the source that match the predicate. 
MGLImageSource
                  @interface MGLImageSource : MGLSource
                        MGLImageSource is a content source that is used for a georeferenced raster
                        image to be shown on the map. The georeferenced image scales and rotates as the
                        user zooms and rotates the map. Images may also be used as icons or patterns
                        in a style layer. To register an image for use as an icon or pattern,
                        use the
                        -[MGLStyle setImage:forName:]
                        method. To configure a point
                        annotation’s image, use the
                        MGLAnnotationImage class.
The geographic location of the raster image content, supplied with
                        MGLCoordinateQuad, can be non-axis
                        aligned.
                        MGLImageSource supports raster content from NSURL,
                        NSImage (macOS), or
                        UIImage (iOS).
                        An image source is added to an MGLStyle
                        object along with one or more
                        MGLRasterStyleLayer objects. Use
                        a raster style layer to control the
                        appearance of content supplied by the image source.
                      
Each
                        image
                        source defined by the style JSON file is represented at runtime by an
                        MGLImageSource object that you can use to initialize new style layers. You
                        can also add and remove sources dynamically using methods such as
                        -[MGLStyle addSource:]
                        and
                        -[MGLStyle sourceWithIdentifier:].
                      
Example
let coordinates = MGLCoordinateQuad(
                    topLeft: CLLocationCoordinate2D(latitude: 46.437, longitude: -80.425),
                    bottomLeft: CLLocationCoordinate2D(latitude: 37.936, longitude: -80.425),
                    bottomRight: CLLocationCoordinate2D(latitude: 37.936, longitude: -71.516),
                    topRight: CLLocationCoordinate2D(latitude: 46.437, longitude: -71.516))
                  let source = MGLImageSource(identifier: "radar", coordinateQuad: coordinates, url: URL(string: "https://maplibre.org/maplibre-gl-js-docs/assets/radar.gif")!)
                  mapView.style?.addSource(source)
                  
                      Related examples
See the 
                          Add an image example to learn how to add an image to your map using
                        MGLImageSource.
                      
Initializing a Source
- 
                            
-initWithIdentifier:coordinateQuad:URL:
Returns a georeferenced image source with an identifier, coordinates and a URL.
Declaration
Objective-C
- (nonnull instancetype)initWithIdentifier:(nonnull NSString *)identifier coordinateQuad:(MGLCoordinateQuad)coordinateQuad URL:(nonnull NSURL *)url;Swift
init(identifier: String, coordinateQuad: MGLCoordinateQuad, url: URL)Parameters
identifierA string that uniquely identifies the source.
coordinateQuadthe top left, top right, bottom right, and bottom left coordinates for the image.
urlAn HTTP(S) URL, absolute file URL, or local file URL relative to the current application’s resource bundle.
Return Value
An initialized shape source.
 - 
                            
-initWithIdentifier:coordinateQuad:image:
Returns a georeferenced image source with an identifier, coordinates and an image.
Declaration
Objective-C
- (nonnull instancetype)initWithIdentifier:(nonnull NSString *)identifier coordinateQuad:(MGLCoordinateQuad)coordinateQuad image:(nonnull UIImage *)image;Swift
init(identifier: String, coordinateQuad: MGLCoordinateQuad, image: UIImage)Parameters
identifierA string that uniquely identifies the source.
coordinateQuadThe top left, top right, bottom right, and bottom left coordinates for the image.
imageThe image to display for the source.
Return Value
An initialized shape source.
 
Accessing a Source’s Content
- 
                            
URL
The URL to the source image.
If the receiver was initialized using
-initWithIdentifier:coordinateQuad:image:or theimageproperty is set, this property is set tonil.Declaration
Objective-C
@property (nonatomic, copy, nullable) NSURL *URL;Swift
var url: URL? { get set } - 
                            
image
The source image.
If the receiver was initialized using
-initWithIdentifier:coordinateQuad:URL:or if theURLproperty is set, this property is set tonil.Declaration
Objective-C
@property (nonatomic, retain, nullable) UIImage *image;Swift
var image: UIImage? { get set } - 
                            
coordinates
The coordinates at which the corners of the source image will be placed.
Declaration
Objective-C
@property (nonatomic) MGLCoordinateQuad coordinates;Swift
var coordinates: MGLCoordinateQuad { get set }