# Class: Polygon

This documentation is for OpenLayers v10.9.0. The latest is v.

## ol/geom/Polygon~Polygon

    import Polygon from 'ol/geom/Polygon.js';

Polygon geometry.

#### new Polygon(coordinates, layout, ends)

geom/Polygon.js, line 27

  Name | Type | Description
  --- | --- | ---
  `coordinates` | !Array<Array<Coordinate>> | !Array.<number> | Array of linear rings that define the polygon. The first linear ring of the array defines the outer-boundary or surface of the polygon. Each subsequent linear ring defines a hole in the surface of the polygon. A linear ring is an array of vertices' coordinates where the first coordinate and the last are equivalent. (For internal use, flat coordinates in combination with `layout` and `ends` are also accepted.)
  `layout` | GeometryLayout | undefined | Layout.
  `ends` | Array.<number> | undefined | Ends (for internal use with flat coordinates).

  ##### Fires:

  - `change` (BaseEvent) - Generic change event. Triggered when the revision counter is increased.
  - `error` (BaseEvent) - Generic error event. Triggered when an error occurs.
  - `propertychange` (ObjectEvent) - Triggered when a property is changed.

### Extends

- SimpleGeometry

### Methods

#### appendLinearRing(linearRing)

geom/Polygon.js, line 105

  Append the passed linear ring to this polygon.

  Name | Type | Description
  --- | --- | ---
  `linearRing` | LinearRing | Linear ring.

#### applyTransform(transformFn) inherited

geom/SimpleGeometry.js, line 208

  Apply a transform function to the coordinates of the geometry. The geometry is modified in place. If you do not want the geometry modified in place, first `clone()` it and then use this function on the clone.

  Name | Type | Description
  --- | --- | ---
  `transformFn` | TransformFunction | Transform function. Called with a flat array of geometry coordinates.

#### changed() inherited

Observable.js, line 68

  Increases the revision counter and dispatches a 'change' event.

#### clone(){Polygon}

geom/Polygon.js, line 121

  Make a complete copy of the geometry.

  ##### Returns:

  Clone.

#### dispatchEvent(event){boolean | undefined} inherited

events/Target.js, line 85

  Dispatches an event and calls all listeners listening for events of this type. The event parameter can either be a string or an Object with a `type` property.

  Name | Type | Description
  --- | --- | ---
  `event` | BaseEvent | string | Event object.

  ##### Returns:

  `false` if anyone called preventDefault on the event object or if any of the listeners returned false.

#### get(key){*} inherited

Object.js, line 136

  Gets a value.

  Name | Type | Description
  --- | --- | ---
  `key` | string | Key name.

  ##### Returns:

  Value.

#### getArea(){number}

geom/Polygon.js, line 191

  Return the area of the polygon on projected plane.

  ##### Returns:

  Area (on projected plane).

#### getClosestPoint(point, closestPoint){Coordinate} inherited

geom/Geometry.js, line 154

  Return the closest point of the geometry to the passed point as `coordinate`.

  Name | Type | Description
  --- | --- | ---
  `point` | Coordinate | Point.
  `closestPoint` | Coordinate | undefined | Closest point.

  ##### Returns:

  Closest point.

#### getCoordinates(right){Array<Array<Coordinate>>}

geom/Polygon.js, line 214

  Get the coordinate array for this geometry. This array has the structure of a GeoJSON coordinate array for polygons.

  Name | Type | Description
  --- | --- | ---
  `right` | boolean | undefined | Orient coordinates according to the right-hand rule (counter-clockwise for exterior and clockwise for interior rings). If `false`, coordinates will be oriented according to the left-hand rule (clockwise for exterior and counter-clockwise for interior rings). By default, coordinate orientation will depend on how the geometry was constructed.

  ##### Returns:

  Coordinates.

#### getExtent(extent){Extent} inherited

geom/Geometry.js, line 187

  Get the extent of the geometry.

  Name | Type | Description
  --- | --- | ---
  `extent` | Extent | undefined | Extent.

  ##### Returns:

  extent Extent.

#### getFirstCoordinate(){Coordinate} inherited

geom/SimpleGeometry.js, line 69

  Return the first coordinate of the geometry.

  ##### Returns:

  First coordinate.

#### getInteriorPoint(){Point}

geom/Polygon.js, line 260

  Return an interior point of the polygon.

  ##### Returns:

  Interior point as XYM coordinate, where M is the length of the horizontal intersection that the point belongs to.

#### getKeys(){Array.<string>} inherited

Object.js, line 149

  Get a list of object property names.

  ##### Returns:

  List of property names.

#### getLastCoordinate(){Coordinate} inherited

geom/SimpleGeometry.js, line 85

  Return the last coordinate of the geometry.

  ##### Returns:

  Last point.

#### getLayout(){GeometryLayout} inherited

geom/SimpleGeometry.js, line 96

  Return the `layout` of the geometry.

  ##### Returns:

  Layout.

#### getLinearRing(index){LinearRing | null}

geom/Polygon.js, line 285

  Return the Nth linear ring of the polygon geometry. Return `null` if the given index is out of range. The exterior linear ring is available at index `0` and the interior rings at index `1` and beyond.

  Name | Type | Description
  --- | --- | ---
  `index` | number | Index.

  ##### Returns:

  Linear ring.

#### getLinearRingCount(){number}

geom/Polygon.js, line 271

  Return the number of rings of the polygon, this includes the exterior ring and any interior rings.

  ##### Returns:

  Number of rings.

#### getLinearRings(){Array<LinearRing>}

geom/Polygon.js, line 303

  Return the linear rings of the polygon.

  ##### Returns:

  Linear rings.

#### getProperties(){NoInfer.<Properties>} inherited

Object.js, line 158

  Get an object of all property names and values.

  ##### Returns:

  Object.

#### getRevision(){number} inherited

Observable.js, line 79

  Get the version number for this object. Each time the object is modified, its version number will be incremented.

  ##### Returns:

  Revision.

#### getType(){Type}

geom/Polygon.js, line 373

  Get the type of this geometry.

  ##### Returns:

  Geometry type.

#### intersectsCoordinate(coordinate){boolean} inherited

geom/Geometry.js, line 167

  Returns true if this geometry includes the specified coordinate. If the coordinate is on the boundary of the geometry, returns false.

  Name | Type | Description
  --- | --- | ---
  `coordinate` | Coordinate | Coordinate.

  ##### Returns:

  Contains coordinate.

#### intersectsExtent(extent){boolean}

geom/Polygon.js, line 384

  Test if the geometry and the passed extent intersect.

  Name | Type | Description
  --- | --- | ---
  `extent` | Extent | Extent.

  ##### Returns:

  `true` if the geometry and the extent intersect.

#### on(type, listener){EventsKey | Array<EventsKey>} inherited

Observable.js, line 152

  Listen for a certain type of event.

  Name | Type | Description
  --- | --- | ---
  `type` | string | Array.<string> | The event type or array of event types.
  `listener` | function | The listener function.

  ##### Returns:

  Unique key for the listener. If called with an array of event types as the first argument, the return will be an array of keys.

#### once(type, listener){EventsKey | Array<EventsKey>} inherited

Observable.js, line 164

  Listen once for a certain type of event.

  Name | Type | Description
  --- | --- | ---
  `type` | string | Array.<string> | The event type or array of event types.
  `listener` | function | The listener function.

  ##### Returns:

  Unique key for the listener. If called with an array of event types as the first argument, the return will be an array of keys.

#### rotate(angle, anchor) inherited

geom/SimpleGeometry.js, line 228

  Rotate the geometry around a given coordinate. This modifies the geometry coordinates in place.

  Name | Type | Description
  --- | --- | ---
  `angle` | number | Rotation angle in counter-clockwise radians.
  `anchor` | Coordinate | The rotation center.

#### scale(sx, sy, anchor) inherited

geom/SimpleGeometry.js, line 255

  Scale the geometry (with an optional origin). This modifies the geometry coordinates in place.

  Name | Type | Description
  --- | --- | ---
  `sx` | number | The scaling factor in the x-direction.
  `sy` | number | undefined | The scaling factor in the y-direction (defaults to sx).
  `anchor` | Coordinate | undefined | The scale origin (defaults to the center of the geometry extent).

#### set(key, value, silent) inherited

Object.js, line 218

  Sets a value.

  Name | Type | Description
  --- | --- | ---
  `key` | string | Key name.
  `value` | * | Value.
  `silent` | boolean | undefined | Update without triggering an event.

#### setCoordinates(coordinates, layout)

geom/Polygon.js, line 401

  Set the coordinates of the polygon.

  Name | Type | Description
  --- | --- | ---
  `coordinates` | Array<Array<Coordinate>> | Coordinates.
  `layout` | GeometryLayout | undefined | Layout.

#### setProperties(values, silent) inherited

Object.js, line 238

  Sets a collection of key-value pairs. Note that this changes any existing properties and adds new ones (it does not remove any existing properties).

  Name | Type | Description
  --- | --- | ---
  `values` | Partial.<NoInfer.<Properties>> | Values.
  `silent` | boolean | undefined | Update without triggering an event.

#### simplify(tolerance){Geometry} inherited

geom/Geometry.js, line 233

  Create a simplified version of this geometry. For linestrings, this uses the Douglas Peucker algorithm. For polygons, a quantization-based simplification is used to preserve topology.

  Name | Type | Description
  --- | --- | ---
  `tolerance` | number | The tolerance distance for simplification.

  ##### Returns:

  A new, simplified version of the original geometry.

#### transform(source, destination){this} inherited

geom/Geometry.js, line 308

  Transform each coordinate of the geometry from one coordinate reference system to another. The geometry is modified in place. For example, a line will be transformed to a line and a circle to a circle. If you do not want the geometry modified in place, first `clone()` it and then use this function on the clone.

  Name | Type | Description
  --- | --- | ---
  `source` | ProjectionLike | The current projection. Can be a string identifier or a `Projection` object.
  `destination` | ProjectionLike | The desired projection. Can be a string identifier or a `Projection` object.

  ##### Returns:

  This geometry. Note that original geometry is modified in place.

#### translate(deltaX, deltaY) inherited

geom/SimpleGeometry.js, line 287

  Translate the geometry. This modifies the geometry coordinates in place. If instead you want a new geometry, first `clone()` this geometry.

  Name | Type | Description
  --- | --- | ---
  `deltaX` | number | Delta X.
  `deltaY` | number | Delta Y.

#### un(type, listener) inherited

Observable.js, line 173

  Unlisten for a certain type of event.

  Name | Type | Description
  --- | --- | ---
  `type` | string | Array.<string> | The event type or array of event types.
  `listener` | function | The listener function.

#### unset(key, silent) inherited

Object.js, line 262

  Unsets a property.

  Name | Type | Description
  --- | --- | ---
  `key` | string | Key name.
  `silent` | boolean | undefined | Unset without triggering an event.