# MGLMultiPoint

    @interface MGLMultiPoint : MGLShape

The `MGLMultiPoint` class is an abstract superclass used to define shapes composed of multiple vertices.

Create instances of `MGLPolyline` or `MGLPolygon` in order to use properties of `MGLMultiPoint`. Do not create instances of `MGLMultiPoint` directly and do not create your own subclasses of this class. You can use the method and properties of this class to access information about the vertices of the line or polygon.

Do not confuse `MGLMultiPoint` with `MGLPointCollection`, which represents a collection of related but disconnected points.

- `coordinates`

  The array of vertices associated with the shape.

  This C array is a pointer to a structure inside the multipoint object, which may have a lifetime shorter than the multipoint object and will certainly not have a longer lifetime. Therefore, you should copy the C array if it needs to be stored outside of the memory context in which you use this property.

  #### Declaration

  Objective-C

      @property (readonly, nonatomic) CLLocationCoordinate2D *_Nonnull coordinates;

  Swift

      var coordinates: UnsafeMutablePointer<CLLocationCoordinate2D> { get }

  View Source on GitHub
- `pointCount`

  The number of vertices in the shape.

  #### Declaration

  Objective-C

      @property (readonly, nonatomic) NSUInteger pointCount;

  Swift

      var pointCount: UInt { get }

  View Source on GitHub
- `-getCoordinates:range:`

  Retrieves the vertices of part of the shape.

  #### Declaration

  Objective-C

      - (void)getCoordinates:(nonnull CLLocationCoordinate2D *)coords
                       range:(NSRange)range;

  Swift

      func getCoordinates(_ coords: UnsafeMutablePointer<CLLocationCoordinate2D>, range: NSRange)

  #### Parameters

  `coords` | On input, you must provide a C array of `CLLocationCoordinate2D` structures large enough to hold the desired number of coordinates. On output, this structure contains the requested coordinate data.
  `range` | The range of vertices you want. The `location` field indicates the first vertex you are requesting, with `0` being the first vertex, `1` being the second vertex, and so on. The `length` field indicates the number of vertices you want. The array in `coords` must be large enough to accommodate the number of requested coordinates.

  View Source on GitHub
- `-setCoordinates:count:`

  Sets the shape’s vertices to the given C array of vertices.

  #### Declaration

  Objective-C

      - (void)setCoordinates:(nonnull CLLocationCoordinate2D *)coords
                       count:(NSUInteger)count;

  Swift

      func setCoordinates(_ coords: UnsafeMutablePointer<CLLocationCoordinate2D>, count: UInt)

  #### Parameters

  `coords` | The array of coordinates defining the shape. The data in this array is copied to the shape’s `coordinates` property.
  `count` | The number of coordinates from the `coords` array.

  View Source on GitHub
- `-insertCoordinates:count:atIndex:`

  Inserts the given vertices into the shape.

  If the shape is currently visible on the map as an annotation, it is redrawn immediately. If the shape is part of an `MGLShapeSource` object, you must explicitly set the `MGLShapeSource.shape` property in order for any style layers that use the source to be redrawn.

  #### Declaration

  Objective-C

      - (void)insertCoordinates:(nonnull const CLLocationCoordinate2D *)coords
                          count:(NSUInteger)count
                        atIndex:(NSUInteger)index;

  Swift

      func insertCoordinates(_ coords: UnsafePointer<CLLocationCoordinate2D>, count: UInt, at index: UInt)

  #### Parameters

  `coords` | The array of coordinates to insert into the shape. The data in this array is copied to the shape’s `coordinates` property.
  `count` | The number of items in the `coords` array.
  `index` | The zero-based index at which the first coordinate in `coords` will appear in the `coordinates` property.

  View Source on GitHub
- `-appendCoordinates:count:`

  Appends the given vertices to the shape.

  If the shape is currently visible on the map as an annotation, it is redrawn immediately. If the shape is part of an `MGLShapeSource` object, you must explicitly set the `MGLShapeSource.shape` property in order for any style layers that use the source to be redrawn.

  #### Declaration

  Objective-C

      - (void)appendCoordinates:(nonnull const CLLocationCoordinate2D *)coords
                          count:(NSUInteger)count;

  Swift

      func appendCoordinates(_ coords: UnsafePointer<CLLocationCoordinate2D>, count: UInt)

  #### Parameters

  `coords` | The array of coordinates to add to the shape. The data in this array is copied to the shape’s `coordinates` property.
  `count` | The number of items in the `coords` array.

  View Source on GitHub
- `-replaceCoordinatesInRange:withCoordinates:`

  Replaces the vertices at the given range in the shape with the same number of vertices from a given C array.

  If the shape is currently visible on the map as an annotation, it is redrawn immediately. If the shape is part of an `MGLShapeSource` object, you must explicitly set the `MGLShapeSource.shape` property in order for any style layers that use the source to be redrawn.

  The number of coordinates in `coords` must be equal to the length of `range`. If you want to insert or delete one or more vertices, use the `-replaceCoordinatesInRange:withCoordinates:count:` method.

  If `range` extends beyond the shape’s `coordinates` property, an `NSRangeException` is raised. If you want to append new vertices to the shape, use the `-appendCoordinates:count:` method.

  #### Declaration

  Objective-C

      - (void)replaceCoordinatesInRange:(NSRange)range
                        withCoordinates:
                            (nonnull const CLLocationCoordinate2D *)coords;

  Swift

      func replaceCoordinates(in range: NSRange, withCoordinates coords: UnsafePointer<CLLocationCoordinate2D>)

  #### Parameters

  `range` | The range of vertices to replace. The `location` field indicates the first vertex you are replacing, with `0` being the first vertex, `1` being the second vertex, and so on. The `length` field indicates the number of vertices to replace.
  `coords` | The array of coordinates defining part of the shape. The data in this array is copied to the shape’s `coordinates` property.

  View Source on GitHub
- `-replaceCoordinatesInRange:withCoordinates:count:`

  Replaces the vertices at the given range in the shape with the specified number of vertices from a given C array.

  If the shape is currently visible on the map as an annotation, it is redrawn immediately. If the shape is part of an `MGLShapeSource` object, you must explicitly set the `MGLShapeSource.shape` property in order for any style layers that use the source to be redrawn.

  If `count` is greater than the `length` field of `range`, some vertices will effectively be inserted into the shape. On the other hand, if `count` is less than the `length` field of `range`, some vertices will effectively be removed.

  If `range` extends beyond the shape’s `coordinates` property, an `NSRangeException` is raised. If you want to append new vertices to the shape, use the `-appendCoordinates:count:` method.

  #### Declaration

  Objective-C

      - (void)replaceCoordinatesInRange:(NSRange)range
                        withCoordinates:(nonnull const CLLocationCoordinate2D *)coords
                                  count:(NSUInteger)count;

  Swift

      func replaceCoordinates(in range: NSRange, withCoordinates coords: UnsafePointer<CLLocationCoordinate2D>, count: UInt)

  #### Parameters

  `range` | The range of vertices to replace. The `location` field indicates the first vertex you are replacing, with `0` being the first vertex, `1` being the second vertex, and so on. The `length` field indicates the number of vertices to replace.
  `coords` | The array of coordinates defining part of the shape. The data in this array is copied to the shape’s `coordinates` property.
  `count` | The number of coordinates from the `coords` array to insert in place of the coordinates in `range`. The sum of `range`’s length and this count must not exceed the number of items currently in the `coordinates` property.

  View Source on GitHub
- `-removeCoordinatesInRange:`

  Removes the vertices at the given range from the shape.

  If the shape is currently visible on the map as an annotation, it is redrawn immediately. If the shape is part of an `MGLShapeSource` object, you must explicitly set the `MGLShapeSource.shape` property in order for any style layers that use the source to be redrawn.

  If `range` extends beyond the shape’s `coordinates` property, an `NSRangeException` is raised.

  #### Declaration

  Objective-C

      - (void)removeCoordinatesInRange:(NSRange)range;

  Swift

      func removeCoordinates(in range: NSRange)

  #### Parameters

  `range` | The range of vertices to remove. The `location` field indicates the first vertex you are removing, with `0` being the first vertex, `1` being the second vertex, and so on. The `length` field indicates the number of vertices to remove.

  View Source on GitHub