Skip to content
import Polygon from "@arcgis/core/geometry/Polygon.js";
Inheritance:
PolygonGeometryAccessor
Subclasses:
Circle
Since
ArcGIS Maps SDK for JavaScript 4.0

A polygon contains an array of rings and a spatialReference. Each ring is represented as an array of points. The first and last points of a ring must be the same. A polygon also has boolean-valued hasM and hasZ fields.

Known Limitations

The polygon geometries must be simple when added to the following layers:

Polygon geometries can be inspected and simplified before they are added to those layers. Use the simplifyOperator to make sure that polygons display correctly on the client-side.

See also

Constructors

Constructor

Constructor
Parameters
ParameterTypeDescriptionRequired
properties
See the properties table for a list of all the properties that may be passed into the constructor.

Properties

Any properties can be set, retrieved or listened to. See the Watch for changes topic.
PropertyTypeClass
cache
readonly inherited
centroid
deprecated readonly
declaredClass
readonly inherited
extent
readonly inherited
hasM
inherited
hasZ
inherited
number[][][]
spatialReference
inherited
type
readonly
"polygon"

cache

readonlyinherited Property
Type
Record<string, any>
Inherited from: Geometry

The cache is used to store values computed from geometries that need to be cleared or recomputed upon mutation. An example is the extent of a polygon.

centroid

deprecatedreadonly Property
Type
Point | null | undefined

The centroid of the polygon. For a polygon with multiple rings, it represents the centroid of the largest ring.

curveRings

Property
Type
CurveJSON[][] | undefined

An array consisting of points and curve objects that define the polygon geometry.

Example
// Polygon with a circular arc segment represented with a curve object.
const curvedPolygon = new Polygon({
curveRings: [
[
[-14008897.772168774,4219321.966491825],
{
c: [
[-13922799.120303603,4218343.568797498],
[-13964136.273597848,4258702.324397415]
]
},
[-13922799.120303603,4218343.568797498],
[-13923532.913909001,4170157.6736310786],
[-14010365.378040956,4170402.2683893144],
[-14008897.772168774,4219321.966491825]
]
],
spatialReference: { wkid: 102100 }
});

declaredClass

readonlyinherited Property
Type
string
Inherited from: Accessor
Since
ArcGIS Maps SDK for JavaScript 4.7

The name of the class. The declared class name is formatted as esri.folder.className.

extent

readonlyinherited Property
Type
Extent | null | undefined
Inherited from: Geometry

The extent of the geometry. For a point, the extent is null.

hasM

inherited Property
Type
boolean
Inherited from: Geometry

Indicates if the geometry has M values.

Default value
false

hasZ

inherited Property
Type
boolean
Inherited from: Geometry

Indicates if the geometry has z-values (elevation).

Z-values defined in a geographic or metric coordinate system are expressed in meters. However, in local scenes that use a projected coordinate system, vertical units are assumed to be the same as the horizontal units specified by the service.

Default value
false

rings

Property
Type
number[][][]

An array of rings. Each ring is a two-dimensional array of numbers representing the coordinates of each vertex in the ring in the spatial reference of the view. The first vertex of each ring should always be the same as the last vertex. Each vertex is an array of two, three, or four numbers. The table below shows the various structures of a vertex array.

CaseVertex array
without z and without m[x, y]
without z and with m[x, y, m]
with z and without m[x, y, z]
with z and with m[x, y, z, m]
Example
//3D polygon rings with m-values (note that the second ring does not have m-values defined for it)
const rings = [
[ // first ring
[-97.06138,32.837,35.1,4.8],
[-97.06133,32.836,35.2,4.1],
[-97.06124,32.834,35.3,4.2],
[-97.06138,32.837,35.1,4.8] // same as first vertex
], [ // second ring
[-97.06326,32.759,35.4],
[-97.06298,32.755,35.5],
[-97.06153,32.749,35.6],
[-97.06326,32.759,35.4] // same as first vertex
]
];
const polygon = new Polygon({
hasZ: true,
hasM: true,
rings: rings,
spatialReference: { wkid: 4326 }
});

spatialReference

autocast inherited Property
Type
SpatialReference
Inherited from: Geometry

The spatial reference of the geometry.

Default value
SpatialReference.WGS84 // wkid: 4326

type

readonly Property
Type
"polygon"

The string value representing the type of geometry.

Methods

MethodSignatureClass
fromExtent
static
fromExtent(extent: Extent): Polygon
fromJSON
inherited static
fromJSON(json: any): any
addRing(points: number[][] | Point[]): this
clone(): Polygon
contains(point: Point): boolean
getPoint(ringIndex: number, pointIndex: number): Point | null | undefined
insertPoint(ringIndex: number, pointIndex: number, point: Point | number[]): this
isClockwise(ring: number[][] | Point[]): boolean
removePoint(ringIndex: number, pointIndex: number): Point | null | undefined
removeRing(index: number): Point[] | null | undefined
setPoint(ringIndex: number, pointIndex: number, point: Point | number[]): this
toJSON
inherited
toJSON(): any

fromExtent

static Method
Signature
fromExtent (extent: Extent): Polygon

Converts the given Extent to a Polygon instance. This is useful for scenarios in which you would like to display an area of interest, which is typically defined by an Extent or bounding box, as a polygon with a fill symbol in the view. Some geoprocessing tools require input geometries to be of a Polygon type and not an Extent.

Parameters
ParameterTypeDescriptionRequired
extent

An extent object to convert to a polygon.

Returns
Polygon

A polygon instance representing the given extent.

Example
view.on("click", function(evt) {
const area = Polygon.fromExtent(view.extent);
const graphic = new Graphic({
geometry: area,
symbol: { type: "simple-fill" }
});
view.graphics.add(graphic);
});

fromJSON

inheritedstatic Method
Signature
fromJSON (json: any): any
Inherited from: JSONSupportMixin

Creates a new instance of this class and initializes it with values from a JSON object generated from an ArcGIS product. The object passed into the input json parameter often comes from a response to a query operation in the REST API or a toJSON() method from another ArcGIS product. See the Using fromJSON() topic in the Guide for details and examples of when and how to use this function.

Parameters
ParameterTypeDescriptionRequired
json
any

A JSON representation of the instance in the ArcGIS format. See the ArcGIS REST API documentation for examples of the structure of various input JSON objects.

Returns
any

Returns a new instance of this class.

addRing

Method
Signature
addRing (points: number[][] | Point[]): this

Adds a ring to the Polygon. The ring can be one of the following: an array of numbers or an array of points. When added the index of the ring is incremented by one.

Parameters
ParameterTypeDescriptionRequired
points
number[][] | Point[]

A polygon ring. The first and last coordinates/points in the ring must be the same. This can either be defined as an array of Point geometries or an array of XY coordinates.

Returns
this

Returns the polygon with the new ring included.

clone

Method
Signature
clone (): Polygon

Creates a deep clone of Polygon object.

Returns
Polygon

A new instance of a Polygon object equal to the object used to call .clone().

contains

Method
Signature
contains (point: Point): boolean

Checks on the client if the input point is inside the polygon. A point on the polygon line is considered inside.

Parameters
ParameterTypeDescriptionRequired
point

The point to test whether it is contained within the testing polygon.

Returns
boolean

Returns true if the point is located inside the polygon.

getPoint

Method
Signature
getPoint (ringIndex: number, pointIndex: number): Point | null | undefined

Returns a point specified by a ring and point in the path.

Parameters
ParameterTypeDescriptionRequired
ringIndex

The index of the ring containing the desired point.

pointIndex

The index of the desired point within the ring.

Returns
Point | null | undefined

Returns the point at the specified ring index and point index.

insertPoint

Method
Signature
insertPoint (ringIndex: number, pointIndex: number, point: Point | number[]): this

Inserts a new point into the polygon.

Parameters
ParameterTypeDescriptionRequired
ringIndex

The index of the ring in which to insert the point.

pointIndex

The index of the point to insert within the ring.

point

The point to insert.

Returns
this

Returns the updated polygon.

isClockwise

Method
Signature
isClockwise (ring: number[][] | Point[]): boolean

Checks if a Polygon ring is clockwise.

Parameters
ParameterTypeDescriptionRequired
ring
number[][] | Point[]

A polygon ring. It can either be defined as an array of Point geometries or an array of XY coordinates.

Returns
boolean

Returns true if the ring is clockwise and false for counterclockwise.

removePoint

Method
Signature
removePoint (ringIndex: number, pointIndex: number): Point | null | undefined

Removes a point from the polygon at the given pointIndex within the ring identified by ringIndex.

Parameters
ParameterTypeDescriptionRequired
ringIndex

The index of the ring containing the point to remove.

pointIndex

The index of the point to remove within the ring.

Returns
Point | null | undefined

Returns the geometry of the removed point.

removeRing

Method
Signature
removeRing (index: number): Point[] | null | undefined

Removes a ring from the Polygon. The index specifies which ring to remove.

Parameters
ParameterTypeDescriptionRequired
index

The index of the ring to remove.

Returns
Point[] | null | undefined

Returns array of points representing the removed ring.

setPoint

Method
Signature
setPoint (ringIndex: number, pointIndex: number, point: Point | number[]): this

Updates a point in the polygon.

Parameters
ParameterTypeDescriptionRequired
ringIndex

The index of the ring containing the point to update.

pointIndex

The index of the point to update within the ring.

point

The new point geometry.

Returns
this

Returns the updated polygon.

toJSON

inherited Method
Signature
toJSON (): any
Inherited from: JSONSupportMixin

Converts an instance of this class to its ArcGIS portal JSON representation. See the Using fromJSON() guide topic for more information.

Returns
any

The ArcGIS portal JSON representation of an instance of this class.