A multipart shape used to represent an area. Polygon geometries represent the shape and location of areas, for example, a country, island, or a lake. A polygon can be used as the geometry of features and graphics, or as input or output of tasks or geoprocessing operations, such as the output of a drive-time analysis or a GeometryEngine.bufferOrNull(Geometry, Double) operation.

Each part of a multipart polygon is a series of connected Segment objects forming a closed ring. Each part must not cross any other part, but may lie completely inside or outside another part. For example, a polygon representing the state of Hawaii would comprise eight disjoint parts, one representing each island. A polygon representing the country of South Africa, which completely surrounds the enclave of Lesotho, would comprise two parts, one contained inside the other.

Like polyline, the polygon class is a Multipart, which provides members for iterating the segments and points of each part in a polygon. Unlike parts in a polyline, however, each part of a polygon defines a closed area, so the end point of the last segment in the part is always in the same location as the start point of the first segment, forming a closed boundary.

When defining a polygon part, there is no need to explicitly close it by repeating the start point as the last point. Polygons parts are always interpreted as enclosed areas by the ArcGIS Maps API.

Interior rings to make donut polygons should be counter-clockwise in direction to have the correct topology.

If there is ever a doubt about the topological correctness of a polygon, call the GeometryEngine.simplifyOrNull(Geometry) method to correct any issues. This is especially true if you pass a polygon to ArcGIS Server for a geoprocessing task to avoid any ArcGIS Server errors being thrown or to rectify polygons that may be self-intersecting, have rings which are partially contained in each other, or contain incorrect ring orientations.

Polygons are based upon the parent Geometry class. The geometry object is immutable which means that you can not change its shape once it is created. If you need to create a new polygon or modify it once it has been created, use the PolygonBuilder class.

A polygon can be used as the geometry of a Feature or Graphic. To obtain the geometry on these objects, use GeoElement.geometry.



See also


Link copied to clipboard
fun Polygon(mutableParts: Iterable<MutablePart>)

Constructs a Polygon with the given collection of MutableParts.

Link copied to clipboard
fun Polygon(points: Iterable<Point>, spatialReference: SpatialReference? = null)

Constructs a Polygon with the given collection of Points.

Inherited properties

Link copied to clipboard

The number of dimensions for the geometry. Returns GeometryDimension.Unknown if an error occurs.

Link copied to clipboard

The extent for the geometry. The extent for the geometry which is a envelope and contains the same spatial reference as the input geometry.

Link copied to clipboard

True if this geometry contains curve segments; false otherwise. ArcGIS software supports polygon and polyline geometries that contain curve segments (where Segment.isCurve is true, sometimes known as true curves or nonlinear segments). Curves may be present in certain types of data - for example Mobile Map Packages (MMPK) or geometry JSON. When connecting to ArcGIS feature services that support curves[ArcGISFeatureServiceInfo.supportsTrueCurve], this API retrieves densified versions of curve feature geometries by default.

Link copied to clipboard

A value indicating if the geometry has M. If an error occurs false is returned. M is a vertex value that is stored with the geometry.

Link copied to clipboard

A value indicating if the geometry has Z. If an error occurs false is returned. Z typically represent elevations or heights.

Link copied to clipboard

Check if a geometry is empty or not. Only check the geometry to see if it is empty. Does not check the spatial reference. Returns true if an error occurs.

Link copied to clipboard

The parts for the multipart. This is a copy and the any changes must be set.

Link copied to clipboard

The spatial reference for the geometry. If the geometry does not have a spatial reference null is returned.


Link copied to clipboard

Creates a polyline containing paths for all the rings in this polygon. Creates a polyline object that matches the geometry of this polygon.

Inherited functions

Link copied to clipboard
open operator override fun equals(other: Any?): Boolean

fun equals(right: Geometry, tolerance: Double): Boolean

Check if two geometries are equal to within some tolerance. This function performs a lightweight comparison of two geometries, such as might be useful when writing test code. It uses the tolerance to compare each of x, y, and any other values the geometries possess (such as z or m) independently in the manner: abs(value1 - value2) <= tolerance. Returns true if the difference of each is within the tolerance and all other properties of the geometries are exactly equal (spatial reference, vertex count, etc.). A single tolerance is used even if the units for the horizontal coordinates and other values differ, e.g horizontal coordinates in degrees and vertical coordinates in meters. This function does not respect modular arithmetic of spatial references which wrap around, so longitudes of -180 and +180 degrees are considered to differ by 360 degrees. Returns false if an error occurs. For topological equality, use relational operators instead of this function. See GeometryEngine.equals(Geometry, Geometry).

Link copied to clipboard
open override fun hashCode(): Int
Link copied to clipboard
open override fun toJson(): String

Convert an object to JSON string.