# Polygon

``public struct Polygon : Equatable, ForeignMemberContainer``
``extension Polygon: Codable``
``extension Polygon: GeometryConvertible``

A Polygon geometry is conceptually a collection of `Ring`s that form a single connected geometry.

• ``` coordinates ```

The positions at which the polygon is located. Each nested array corresponds to one linear ring.

#### Declaration

Swift

``public var coordinates: [[LocationCoordinate2D]]``
• ``` foreignMembers ```

#### Declaration

Swift

``public var foreignMembers: JSONObject``
• ``` init(_:) ```

Initializes a polygon defined by the given positions.

This initializer is equivalent to the `polygon` function in the turf-helpers package of Turf.js (source code).

#### Declaration

Swift

``public init(_ coordinates: [[LocationCoordinate2D]])``

#### Parameters

 ``` coordinates ``` The positions at which the polygon is located. Each nested array corresponds to one linear ring.
• ``` init(outerRing:innerRings:) ```

Initializes a polygon defined by the given linear rings.

#### Declaration

Swift

``public init(outerRing: Ring, innerRings: [Ring] = [])``

#### Parameters

 ``` outerRing ``` The outer linear ring. ``` innerRings ``` The inner linear rings that define “holes” in the polygon.
• ``` init(center:radius:vertices:) ```

Initializes a polygon as a given center coordinate with a given number of vertices, as a means to approximate a circle.

This initializer is equivalent to the turf-circle package of Turf.js (source code).

#### Declaration

Swift

``public init(center: LocationCoordinate2D, radius: LocationDistance, vertices: Int)``

#### Parameters

 ``` center ``` The center coordinate for the polygon. ``` radius ``` The radius of the polygon, measured in meters. ``` vertices ``` The number of vertices the polygon will have. The recommended amount is 64.

#### Return Value

A polygon shape which approximates a circle.

• ``` init(from:) ```

#### Declaration

Swift

``public init(from decoder: Decoder) throws``
• ``` encode(to:) ```

#### Declaration

Swift

``public func encode(to encoder: Encoder) throws``
• ``` innerRings ```

Representation of `Polygon`s coordinates of inner rings

#### Declaration

Swift

``public var innerRings: [Ring] { get }``
• ``` outerRing ```

Representation of `Polygon`s coordinates of outer ring

#### Declaration

Swift

``public var outerRing: Ring { get }``
• ``` area ```

The polygon’s area.

This property is equivalent to the turf-area package of Turf.js (source code).

#### Declaration

Swift

``public var area: Double { get }``
• ``` contains(_:ignoreBoundary:) ```

Returns whether the given coordinate falls within the polygon and outside of its interior rings.

This method is equivalent to the turf-boolean-point-in-polygon package of Turf.js (source code).

#### Declaration

Swift

``public func contains(_ coordinate: LocationCoordinate2D, ignoreBoundary: Bool = false) -> Bool``

#### Parameters

 ``` coordinate ``` The coordinate to test for containment. ``` ignoreBoundary ``` Consider the coordinate to fall within the polygon even if it lies directly on one of the polygon’s linear rings.

#### Return Value

True if the coordinate falls within the polygon; false otherwise.

• ``` smooth(iterations:) ```

Returns the polygon with corners smoothed out using Chaikin’s algorithm.

This method is equivalent to the turf-polygon-smooth package of Turf.js (source code).

Note

The returned polygon may be a degenerate polygon.

#### Declaration

Swift

``public func smooth(iterations: Int = 3) -> Polygon``
• ``` simplified(tolerance:highestQuality:) ```

Returns a copy of the polygon simplified using the Ramer–Douglas–Peucker algorithm.

This method is equivalent to the turf-simplify package of Turf.js (source code).

#### Declaration

Swift

``public func simplified(tolerance: Double = 1.0, highestQuality: Bool = false) -> Polygon``

#### Parameters

 ``` tolerance ``` Controls the level of simplification by specifying the maximum allowed distance between the original line point and the simplified point. A higher tolerance value results in higher simplification. ``` highestQuality ``` Excludes the distance-based preprocessing step that leads to highest-quality simplification. High-quality simplification runs considerably slower, so consider how much precision is needed in your application.

#### Return Value

A simplified polygon.

• ``` simplify(tolerance:highestQuality:) ```

Simplifies the polygon in place using the Ramer–Douglas–Peucker algorithm.

This method is nearly equivalent to the turf-simplify package of Turf.js (source code), except that it mutates the polygon it is called on.

#### Declaration

Swift

``public mutating func simplify(tolerance: Double = 1.0, highestQuality: Bool = false)``

#### Parameters

 ``` tolerance ``` Controls the level of simplification by specifying the maximum allowed distance between the original line point and the simplified point. A higher tolerance value results in higher simplification. ``` highestQuality ``` Excludes the distance-based preprocessing step that leads to highest-quality simplification. High-quality simplification runs considerably slower, so consider how much precision is needed in your application.
• ``` center ```

Calculates the absolute center of the bounding box.

This property is equivalent to the turf-center package of Turf.js (source code).

#### Declaration

Swift

``public var center: LocationCoordinate2D? { get }``
• ``` centroid ```

Calculates the centroid using the mean of all vertices.

Compared to `center` and `centerOfMass`, the centroid is less affected by small islands and artifacts.

This property is equivalent to the turf-centroid package of Turf.js (source code).

#### Declaration

Swift

``public var centroid: LocationCoordinate2D? { get }``
• ``` centerOfMass ```

Calculates the center of mass using the centroid of polygon formula.

This property is equivalent to the turf-center-of-mass package of Turf.js (source code).

#### Declaration

Swift

``public var centerOfMass: LocationCoordinate2D? { get }``
• ``` geometry ```

#### Declaration

Swift

``public var geometry: Geometry { get }``