# 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://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`.

### 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

  `identifier` | A string that uniquely identifies the source.
  `coordinateQuad` | the top left, top right, bottom right, and bottom left coordinates for the image.
  `url` | An HTTP(S) URL, absolute file URL, or local file URL relative to the current application’s resource bundle.

  #### Return Value

  An initialized shape source.

  View Source on GitHub
- `-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

  `identifier` | A string that uniquely identifies the source.
  `coordinateQuad` | The top left, top right, bottom right, and bottom left coordinates for the image.
  `image` | The image to display for the source.

  #### Return Value

  An initialized shape source.

  View Source on GitHub

### Accessing a Source’s Content

- `URL`

  The URL to the source image.

  If the receiver was initialized using `-initWithIdentifier:coordinateQuad:image:` or the `image` property is set, this property is set to `nil`.

  #### Declaration

  Objective-C

      @property (readwrite, copy, nonatomic, nullable) NSURL *URL;

  Swift

      var url: URL? { get set }

  View Source on GitHub
- `image`

  The source image.

  If the receiver was initialized using `-initWithIdentifier:coordinateQuad:URL:` or if the `URL` property is set, this property is set to `nil`.

  #### Declaration

  Objective-C

      @property (readwrite, retain, nonatomic, nullable) UIImage *image;

  Swift

      var image: UIImage? { get set }

  View Source on GitHub
- `coordinates`

  The coordinates at which the corners of the source image will be placed.

  #### Declaration

  Objective-C

      @property (assign, readwrite, nonatomic) MGLCoordinateQuad coordinates;

  Swift

      var coordinates: MGLCoordinateQuad { get set }

  View Source on GitHub