sealed class Geometry : JsonSerializable

Base class for all classes that represent geometric shapes. Geometry is the base class for two-dimensional (x,y) or three-dimensional (x,y,z) geometries. Objects that inherit from the Geometry class may also include a measure (m-value) for each vertex. The Geometry class provides functionality common to all types of geometry. Point, Multipoint, Polyline, Polygon, and Envelope all inherit from Geometry and represent different types of shapes.

Geometry represents real-world objects by defining a shape at a specific geographic location. It is used throughout this API to represent the shapes of features and graphics, layer extents, viewpoints, and GPS locations. It is also used, for example, to define inputs and outputs for spatial analysis and geoprocessing operations and to measure distances and areas.

All types of geometry:

  • Have a SpatialReference indicating the coordinate system used by its coordinates

  • Can be empty, indicating that they have no specific location or shape

  • May have z-values and/or m-values to define elevation and measures respectively

  • Can be converted to and from JSON to be persisted or to be exchanged directly with REST services

Immutability Most geometries are created and not changed for their lifetime. Examples include features created to be stored in a geodatabase or read from a non-editable layer, and features returned from tasks such as a spatial query, geocode operation, network trace, or geoprocessing task. Immutable geometries (geometries that cannot be changed) offer some important benefits to your app. They are inherently thread-safe, help prevent inadvertent changes, and allow for certain performance optimizations.

Instead of changing the properties of existing geometries, you can create and update geometries using the various subclasses of GeometryBuilder (for example, PolygonBuilder), which can represent the state of a geometry under construction while allowing modifications, thus enabling editing workflows.

Additionally, GeometryEngine offers a range of topological and spatial transformations that read the content of existing geometries and create new geometries, for example, project, buffer, union, and so on. Relational tests such as intersects and overlaps are also available on GeometryEngine.

Coordinate units The coordinates that define a geometry are only meaningful in the context of the geometry's SpatialReference. The vertices and spatial reference together allow your app to translate a real-world object from its location on the Earth to its location on your map or scene.

In some cases, a geometry's spatial reference may not be set. For example, a Graphic that does not have a spatial reference is drawn using the same spatial reference as the MapView to which it was added. If the coordinates are in a different spatial reference, the graphics may not display in the correct location, or at all.

When using GeometryBuilder to create a Polyline or Polygon from a collection of Point, you don't need to set the spatial reference of every point before you add it to the builder, as it is assigned the spatial reference of the builder itself. In most other cases, such as when using a geometry in geometry operations or when editing a feature table, Geometry.spatialReference must be set.

Spatial reference and projection Changing the coordinates of a geometry to have the same shape and location represented using a different SpatialReference is known as "projection" or sometimes as "reprojection". Because geometries are immutable, they do not have any member methods that project, transform, or otherwise modify their content.



See also


Link copied to clipboard
object Companion


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 spatial reference for the geometry. If the geometry does not have a spatial reference null is returned.


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

Inherited functions

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

Convert an object to JSON string.


Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard