# Style Content

- `MGLSource`

  `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.

  See more

  #### Declaration

  Objective-C

      @interface MGLSource : NSObject

  Swift

      class MGLSource : NSObject

  View Source on GitHub

- `MGLShapeSource`

  `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.

  See more

  #### Declaration

  Objective-C

      @interface MGLShapeSource : MGLSource

  Swift

      class MGLShapeSource : MGLSource

  View Source on GitHub

- `MGLComputedShapeSource`

  `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.

  See more

  #### Declaration

  Objective-C

      @interface MGLComputedShapeSource : MGLSource

  Swift

      class MGLComputedShapeSource : MGLSource

  View Source on GitHub

- `MGLTileSource`

  `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.

  See more

  #### Declaration

  Objective-C

      @interface MGLTileSource : MGLSource

  Swift

      class MGLTileSource : MGLSource

  View Source on GitHub

- `MGLRasterTileSource`

  `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`.

  See more

  #### Declaration

  Objective-C

      @interface MGLRasterTileSource : MGLTileSource

  Swift

      class MGLRasterTileSource : MGLTileSource

  View Source on GitHub

- `MGLRasterDEMSource`

  `MGLRasterDEMSource` is 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 an `MGLStyle` object along with one or more `MGLHillshadeStyleLayer` objects. Use a hillshade style layer to control the appearance of content supplied by the raster DEM source.

  Each `raster-dem` source defined by the style JSON file is represented at runtime by an `MGLRasterDEMSource` 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:]`.

  Currently, raster DEM sources only support the format used by Mapbox Terrain-RGB.

  ### Example

      let terrainRGBURL = URL(string: "mapbox://mapbox.terrain-rgb")!
      let source = MGLRasterDEMSource(identifier: "hills", configurationURL: terrainRGBURL)
      mapView.style?.addSource(source)

  #### Declaration

  Objective-C

      @interface MGLRasterDEMSource : MGLRasterTileSource

  Swift

      class MGLRasterDEMSource : MGLRasterTileSource

  View Source on GitHub

- `MGLVectorTileSource`

  `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.

  See more

  #### Declaration

  Objective-C

      @interface MGLVectorTileSource : MGLTileSource

  Swift

      class MGLVectorTileSource : MGLTileSource

  View Source on GitHub

- `MGLImageSource`

  `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://www.mapbox.com/mapbox-gl-js/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`.

  See more

  #### Declaration

  Objective-C

      @interface MGLImageSource : MGLSource

  Swift

      class MGLImageSource : MGLSource

  View Source on GitHub