@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
682 lines (645 loc) • 45.2 kB
TypeScript
/**
* A client-side geometry engine for testing, measuring, and analyzing the spatial relationship
* between two or more 2D geometries. If more than one geometry is required for any of the methods below,
* all geometries must have the same spatial reference for the methods to work as expected.
*
* Read the following blog series to learn more about GeometryEngine:
*
* - [ArcGIS Blog - GeometryEngine: Testing spatial relationships and editing](https://blogs.esri.com/esri/arcgis/2015/09/09/geometryengine-part-1-testing-spatial-relationships-and-editing/)
* - [ArcGIS Blog - GeometryEngine: Measurement](https://blogs.esri.com/esri/arcgis/2015/09/16/geometryengine-part-2-measurement/)
* - [ArcGIS Blog - GeometryEngine: Overlay analysis](https://blogs.esri.com/esri/arcgis/2015/09/23/geometryengine-part-3-overlay-analysis/)
*
* @deprecated since version 4.32. Use [geometry operators](https://developers.arcgis.com/javascript/latest/spatial-analysis/intro-geometry-operators/) instead.
* @since 4.0
* @see [Sample - Geodesic Buffers (2D & 3D)](https://developers.arcgis.com/javascript/latest/sample-code/ge-geodesicbuffer/)
*/
import type Extent from "./Extent.js";
import type Point from "./Point.js";
import type Polygon from "./Polygon.js";
import type Polyline from "./Polyline.js";
import type SpatialReference from "./SpatialReference.js";
import type { LinearUnit, AreaUnit, ExtendedSpatialReferenceInfo, NearestPointResult } from "./geometryEngineTypes.js";
import type { GeometryUnion } from "./types.js";
/**
* Returns an object containing additional information about the input spatial reference.
*
* @deprecated since version 4.32.
* @param spatialReference - The input spatial reference.
* @returns Resolves to a [ExtendedSpatialReferenceInfo](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngineTypes/#ExtendedSpatialReferenceInfo) object.
* @see [Unit IDs](https://developers.arcgis.com/java/api-reference/reference/com/esri/arcgisruntime/geometry/LinearUnitId.html#CENTIMETERS)
*/
export function extendedSpatialReferenceInfo(spatialReference: SpatialReference): ExtendedSpatialReferenceInfo;
/**
* Calculates the clipped geometry from a target geometry by an envelope.
*
* @deprecated since version 4.32. Use [clipOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/clipOperator/) instead.
* @param geometry - The geometry to be clipped.
* @param envelope - The envelope used to clip.
* @returns Clipped geometry.
* @example
* // returns a new geometry of a polygon clipped by the views extent
* const clippedGeometry= geometryEngine.clip(boundaryPolygon, view.extent);
*/
export function clip(geometry: GeometryUnion, envelope: Extent): GeometryUnion;
/**
* Splits the input Polyline or Polygon where it crosses a cutting Polyline. For Polylines, all left cuts are
* grouped together in the first Geometry. Right cuts and coincident cuts are grouped in the second Geometry and
* each undefined cut, along with any uncut parts, are output as separate Polylines. For Polygons, all left cuts
* are grouped in the first Polygon, all right cuts are grouped in the second Polygon, and each undefined cut, along with
* any leftover parts after cutting, are output as a separate Polygon. If no cuts are returned then the array will
* be empty. An undefined cut will only be produced if a left cut or right cut was produced and there was a part
* left over after cutting, or a cut is bounded to the left and right of the cutter.
*
* @deprecated since version 4.32. Use [cutOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/cutOperator/) instead.
* @param geometry - The geometry to be cut.
* @param cutter - The polyline to cut the geometry.
* @returns Returns an array of geometries created by cutting the input geometry with the cutter.
* @example
* // returns array of cut geometries
* const geometries = geometryEngine.cut(boundaryPolygon, polyline);
*/
export function cut(geometry: GeometryUnion, cutter: Polyline): GeometryUnion[];
/**
* Indicates if one geometry contains another geometry.
*
* @deprecated since version 4.32. Use [containsOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/containsOperator/) instead.
* @param containerGeometry - The geometry that is tested for the "contains" relationship to the other geometry.
* Think of this geometry as the potential "container" of the `insideGeometry`.
* @param insideGeometry - The geometry that is tested for the "within" relationship to the `containerGeometry`.
* @returns Returns `true` if the `containerGeometry` contains the `insideGeometry`.
* @example
* // returns true or false for one geometry containing another
* const isContained = geometryEngine.contains(boundaryPolygon, point);
* @example
* // returns true or false for one geometry containing another
* const isContained = geometryEngine.contains(extent, boundaryPolygon);
*/
export function contains(containerGeometry: GeometryUnion, insideGeometry: GeometryUnion): boolean;
/**
* Indicates if one geometry crosses another geometry.
*
* @deprecated since version 4.32. Use [crossesOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/crossesOperator/) instead.
* @param geometry1 - The geometry to cross.
* @param geometry2 - The geometry being crossed.
* @returns Returns `true` if `geometry1` crosses `geometry2`.
* @example
* // returns true or false if a line crosses a polygon another
* const isCrossed = geometryEngine.crosses(boundaryPolygon, polyline);
*/
export function crosses(geometry1: GeometryUnion, geometry2: GeometryUnion): boolean;
/**
* Calculates the shortest planar distance between two geometries. Distance is reported in the linear units specified by
* `distanceUnit` or, if `distanceUnit` is null, the units of the spatialReference of input geometry.
*
* > [!WARNING]
* >
* > To calculate the geodesic distance between two points, first construct a
* > [Polyline](https://developers.arcgis.com/javascript/latest/references/core/geometry/Polyline/) using the two points of interest as the beginning
* > and ending points of a single path. Then use the polyline as input for the
* > [geodesicLength()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#geodesicLength) method.
*
* @deprecated since version 4.32. Use [distanceOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/distanceOperator/) instead.
* @param geometry1 - First input geometry.
* @param geometry2 - Second input geometry.
* @param distanceUnit - Measurement unit of the return value.
* Defaults to the units of the input geometries.
* @returns Distance between the two input geometries.
* @example
* // returns numeric distance between two points
* const totalDistance = geometryEngine.distance(point1, point2, "feet");
*/
export function distance(geometry1: GeometryUnion, geometry2: GeometryUnion, distanceUnit?: number | LinearUnit | null | undefined): number;
/**
* Indicates if two geometries are equal.
*
* @deprecated since version 4.32. Use [equalsOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/equalsOperator/) instead.
* @param geometry1 - First input geometry.
* @param geometry2 - Second input geometry.
* @returns Returns `true` if the two input geometries are equal.
* @example
* // returns true if two given geometries are equal
* const isEqual = geometryEngine.equals(line1, line2);
*/
export function equals(geometry1: GeometryUnion, geometry2: GeometryUnion): boolean;
/**
* Indicates if one geometry intersects another geometry.
*
* @deprecated since version 4.32. Use [intersectsOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/intersectsOperator/) instead.
* @param geometry1 - The geometry that is tested for the intersects relationship to the other geometry.
* @param geometry2 - The geometry being intersected.
* @returns Returns `true` if the input geometries intersect each other.
* @example
* // returns true if two given geometries intersect each other
* const isIntersecting = geometryEngine.intersects(boundaryPolygon, cityPolygon);
*/
export function intersects(geometry1: GeometryUnion, geometry2: GeometryUnion): boolean;
/**
* Indicates if one geometry touches another geometry.
*
* @deprecated since version 4.32. Use [touchesOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/touchesOperator/) instead.
* @param geometry1 - The geometry to test the "touches" relationship with the other geometry.
* @param geometry2 - The geometry to be touched.
* @returns When `true`, `geometry1` touches `geometry2`.
* @example
* // returns true if the line vertex touches the edge of the polygon
* const isTouching = geometryEngine.touches(polygon, line);
*/
export function touches(geometry1: GeometryUnion, geometry2: GeometryUnion): boolean;
/**
* Indicates if one geometry is within another geometry.
*
* @deprecated since version 4.32. Use [withinOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/withinOperator/) instead.
* @param innerGeometry - The base geometry that is tested for the "within" relationship to the other geometry.
* @param outerGeometry - The comparison geometry that is tested for the "contains" relationship to the other geometry.
* @returns Returns `true` if `innerGeometry` is within `outerGeometry`.
* @example
* // returns true if a geometry is completely within another
* const isWithin = geometryEngine.within(polygon, boundaryPolygon);
*/
export function within(innerGeometry: GeometryUnion, outerGeometry: GeometryUnion): boolean;
/**
* Indicates if one geometry is disjoint (doesn't intersect in any way) with another geometry.
*
* @deprecated since version 4.32. Use [disjointOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/disjointOperator/) instead.
* @param geometry1 - The base geometry that is tested for the "disjoint" relationship to the other geometry.
* @param geometry2 - The comparison geometry that is tested for the "disjoint" relationship to the other geometry.
* @returns Returns `true` if `geometry1` and `geometry2` are disjoint (don't intersect in any way).
* @example
* // returns true if a geometry is not contained in another.
* // operates the opposite of contains
* const isDisjointed = geometryEngine.disjoint(polygon, boundaryPolygon);
*/
export function disjoint(geometry1: GeometryUnion, geometry2: GeometryUnion): boolean;
/**
* Indicates if one geometry overlaps another geometry.
*
* @deprecated since version 4.32. Use [overlapsOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/overlapsOperator/) instead.
* @param geometry1 - The base geometry that is tested for the "overlaps" relationship with the other geometry.
* @param geometry2 - The comparison geometry that is tested for the "overlaps" relationship with the other geometry.
* @returns Returns `true` if the two geometries overlap.
* @example
* // returns true if one geometry overlaps another,
* // but is not contained or disjointed
* const isOverlapping = geometryEngine.overlaps(polygon, boundaryPolygon);
*/
export function overlaps(geometry1: GeometryUnion, geometry2: GeometryUnion): boolean;
/**
* Indicates if the given DE-9IM relation is true for the two geometries.
*
* @deprecated since version 4.32. Use [relateOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/relateOperator/) instead.
* @param geometry1 - The first geometry for the relation.
* @param geometry2 - The second geometry for the relation.
* @param relation - The Dimensionally Extended 9 Intersection Model (DE-9IM) matrix relation
* (encoded as a string) to test against the relationship of the two geometries. This string contains the
* test result of each intersection represented in the DE-9IM matrix. Each result is one character of the
* string and may be represented as either a number (maximum dimension returned: `0`,`1`,`2`), a Boolean
* value (`T` or `F`), or a mask character (for ignoring results: '\*'). For example, each of the following
* DE-9IM string codes are valid for testing whether a polygon geometry completely contains a line geometry:
* `TTTFFTFFT` (Boolean), 'T*\*\*\*\*\*FF\*' (ignore irrelevant intersections), or '102FF\*FF\*' (dimension form).
* Each returns the same result. See [this article](https://en.wikipedia.org/wiki/DE-9IM) and
* [this ArcGIS help page](https://pro.arcgis.com/en/pro-app/latest/help/data/databases/pdf/stgeometry_reference.pdf)
* for more information about the DE-9IM model and how string codes are constructed.
* @returns Returns `true` if the relation of the input geometries is accurate.
* @example
* // returns true if the polygon geometry completely
* // contains the polyline based on the DE-9IM string
* const isRelated = geometryEngine.relate(polygon, polyline, "TTTFFTFFT");
*/
export function relate(geometry1: GeometryUnion, geometry2: GeometryUnion, relation: string): boolean;
/**
* Indicates if the given geometry is non-OGC topologically simple.
* No polygon rings self-intersect.
* Polylines paths that self-intersect are considered simple.
*
* @deprecated since version 4.32. Use [simplifyOperator's isSimple()](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/simplifyOperator/#isSimple) method instead.
* @param geometry - The input geometry.
* @returns Returns `true` if the geometry is topologically simple.
* @example
* // returns true if given geometry is simple
* const simple = geometryEngine.isSimple(polyline);
*/
export function isSimple(geometry: GeometryUnion): boolean;
/**
* Performs the simplify operation on the geometry, which alters the given geometries to make their definitions
* topologically legal with respect to their geometry type. At the end of a simplify operation, no polygon rings
* or polyline paths will overlap, and no self-intersection will occur.
*
* @deprecated since version 4.32. Use [simplifyOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/simplifyOperator/) instead.
* @param geometry - The geometry to be simplified.
* @returns The simplified geometry.
* @example
* // Topologically simplifies a geometry
* const simplified = geometryEngine.simplify(polyline);
* console.log(geometryEngine.isSimple(simplified)); // true
*/
export function simplify(geometry: GeometryUnion): GeometryUnion;
/**
* Calculates the convex hull of one or more geometries. A convex hull is the smallest convex polygon that encloses a group of geometries or vertices.
* The input can be a single geometry (such as a polyline) or an array of any geometry type. The hull is typically a polygon but can also
* be a polyline or a point in degenerate cases.
*
* @deprecated since version 4.32. Use [convexHullOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/convexHullOperator/) instead.
* @param geometries - The input geometry or geometries used to calculate
* the convex hull. If an array is specified, the input array can include various geometry types. When an array
* is provided, the output will also be an array.
* @param merge - = false - Indicates whether to merge the output into a single geometry (usually a polygon).
* @returns Returns the convex hull of the input geometries. This is usually
* a polygon, but can also be a polyline (if the input is a set of points or polylines forming a straight line), or a point (in degenerate cases).
* @example
* // returns the convex hull of a multipoint as a single polygon
* const hull = geometryEngine.convexHull(multipoint);
* @example
* // returns the convex hull of an array of points as a single polygon
* const [ hull ] = geometryEngine.convexHull([ pointA, pointB, pointC ], true);
* @example
* // returns the convex hull for each input line geometry as three polygons
* const hulls = geometryEngine.convexHull([ lineA, lineB, lineC ]);
* @example
* // returns the convex hull for all input line geometries as a single polygon
* const [ hull ] = geometryEngine.convexHull([ lineA, lineB, lineC ], true);
* @example
* // returns the convex hull for all input geometries as a single polygon
* const [ hull ] = geometryEngine.convexHull([ point, line, polygon ], true);
*/
export function convexHull(geometries: GeometryUnion | GeometryUnion[], merge: boolean): GeometryUnion | GeometryUnion[];
/**
* Creates the difference of two geometries. The resultant geometry is the portion of `inputGeometry` not in the `subtractor`.
* The dimension of the `subtractor` has to be equal to or greater than that of the `inputGeometry`.
*
* @deprecated since version 4.32. Use [differenceOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/differenceOperator/) instead.
* @param inputGeometry - The input geometry to subtract from.
* @param subtractor - The geometry being subtracted from inputGeometry.
* @returns Returns the geometry of inputGeometry minus the subtractor geometry.
* @example
* // Creates a new geometry based on the
* // difference of the two
* const geometry = geometryEngine.difference(boundaryPolygon, buffers);
*/
export function difference(inputGeometry: GeometryUnion | GeometryUnion[], subtractor: GeometryUnion): GeometryUnion | GeometryUnion[];
/**
* Creates the symmetric difference of two geometries. The symmetric difference includes the parts
* that are in either of the sets, but not in both.
*
* @deprecated since version 4.32. Use [symmetricDifferenceOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/symmetricDifferenceOperator/) instead.
* @param leftGeometry - One of the Geometry instances in the XOR operation.
* @param rightGeometry - One of the Geometry instances in the XOR operation.
* @returns The symmetric differences of the two geometries.
* @example
* // Creates a new geometry based on the
* // symmetric difference of the two
* const geometry = geometryEngine.symmetricDifference(boundaryPolygon, buffers);
*/
export function symmetricDifference(leftGeometry: GeometryUnion | GeometryUnion[], rightGeometry: GeometryUnion): GeometryUnion | GeometryUnion[];
/**
* Creates new geometries from the intersections between two geometries. If the input geometries
* have different dimensions (i.e. point = 0; polyline = 1; polygon = 2), then the result's
* dimension will be equal to the lowest dimension of the
* inputs. The table below describes the expected output for various combinations of geometry
* types. Note that `geometry1` and `geometry2` are interchangeable in this operation
* and will return the same result if flipped.
*
* Geometry1 type | Geometry2 type | Result geometry type
* --------------|---------------------------|---------------------
* Polygon | Polygon | Polygon
* Polygon | Polyline | Polyline
* Polygon | Point | Point
* Polyline | Polyline | Polyline
* Polyline | Point | Point
* Point | Point | Point
*
* Note that two intersecting polylines will not return Point geometries.
* Rather, this function will return Polyline paths that are equal between the two geometries.
* See [intersectLinesToPoints()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#intersectLinesToPoints) to find the point intersections
* of two polylines.
*
* @deprecated since version 4.32. Use [intersectionOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/intersectionOperator/) instead.
* @param geometry1 - The input geometry or array of geometries.
* @param geometry2 - The geometry to intersect with geometry1.
* @returns The intersections of the geometries.
* @see [intersectLinesToPoints()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#intersectLinesToPoints)
* @example
* // Creates a new geometry from the intersection
* // of the two geometries
* const intersecting = geometryEngine.intersect(boundaryPolygon, buffers);
*/
export function intersect(geometry1: GeometryUnion | GeometryUnion[], geometry2: GeometryUnion): GeometryUnion | GeometryUnion[];
/**
* All inputs must be of the same type of geometries and share one spatial reference.
*
* @deprecated since version 4.32. Use [unionOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/unionOperator/) instead.
* @param geometries - An array of Geometries to union.
* @returns The union of the geometries.
* @example
* // pt1 and pt2 are Point geometries to union together
* const union = geometryEngine.union([pt1, pt2]);
*/
export function union(geometries: GeometryUnion[]): GeometryUnion;
/**
* The offset operation creates a geometry that is a constant planar distance from an input
* polyline or polygon. It is similar to buffering, but produces a one-sided result.
*
* @deprecated since version 4.32. Use [offsetOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/offsetOperator/) instead.
* @param geometry - The geometries to offset.
* @param offsetDistance - The planar distance to offset from the input geometry. If offsetDistance > 0, then the offset
* geometry is constructed to the right of the oriented input geometry, if offsetDistance = 0, then there is no
* change in the geometries, otherwise it is constructed to the left. For a simple polygon, the orientation of outer
* rings is clockwise and for inner rings it is counter clockwise. So the "right side" of a simple polygon is always its inside.
* @param offsetUnit - Measurement unit of the offset distance.
* Defaults to the units of the input geometries.
* @param joinType - The join type.
* @param bevelRatio - Applicable when `joinType = 'miter'`; bevelRatio is multiplied by the offset distance and
* the result determines how far a mitered offset intersection can be located before it is beveled.
* @param flattenError - Applicable when `joinType = 'round'`; flattenError determines the maximum distance of the resulting
* segments compared to the true circular arc. The algorithm never produces more than around 180 vertices for each round join.
* @returns The offset geometries.
* @example
* // Creates a new geometry offset from the provided geometry
* const offset = geometryEngine.offset(boundaryPolygon, 500, "meters", "round");
*/
export function offset(geometry: GeometryUnion | GeometryUnion[], offsetDistance: number, offsetUnit?: number | LinearUnit, joinType?: any, bevelRatio?: number, flattenError?: number): GeometryUnion | GeometryUnion[];
/**
* Creates planar (or Euclidean) buffer polygons at a specified distance around the input geometries.
*
* The GeometryEngine has two methods for buffering geometries client-side: buffer and [geodesicBuffer()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#geodesicBuffer).
* Use caution when
* deciding which method to use. As a general rule, use [geodesicBuffer()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#geodesicBuffer) if the input geometries
* have a spatial reference of either WGS84 (wkid: 4326) or [Web Mercator](https://developers.arcgis.com/javascript/latest/references/core/geometry/SpatialReference/#isWebMercator). Only use buffer (this method)
* when attempting to buffer geometries with a [projected coordinate system](https://developers.arcgis.com/rest/services-reference/enterprise/using-spatial-references.htm) other than Web Mercator. If you need to buffer geometries
* with a geographic coordinate system other than WGS84 (wkid: 4326), use
* [buffer()](https://developers.arcgis.com/javascript/latest/references/core/rest/geometryService/#buffer).
*
* @deprecated since version 4.32. Use [bufferOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/bufferOperator/) instead.
* @param geometry - The buffer input geometry.
* The `geometry` and `distance` parameters must be specified as either both arrays or
* both non-arrays. Never specify one as an array and the other a non-array.
* @param distance - The specified distance(s) for buffering. The `geometry` and `distance` parameters must be specified as either both arrays or
* both non-arrays. Never specify one as an array and the other a non-array.
* When using an array of geometries as input, the length of the geometry array does not have to
* equal the length of the `distance` array. For example, if you pass an array of four geometries:
* `[g1, g2, g3, g4]` and an array with one distance: `[d1]`, all four geometries will be buffered by the
* single distance value. If instead you use an array of three distances: `[d1, d2, d3]`, `g1` will be buffered by
* `d1`, `g2` by `d2`, and `g3` and `g4` will both be buffered by `d3`. The value of the geometry array will
* be matched one to one with those in the distance array until the final value of the distance array is reached,
* in which case that value will be applied to the remaining geometries.
* @param unit - Measurement unit of the distance(s).
* Defaults to the units of the input geometries.
* @param toUnionResults - = false - Determines whether the output geometries should be unioned into a single
* polygon.
* @returns The resulting buffer(s).
* The result will be an array if an array of geometries is used as input. It will be a single polygon if
* a single geometry is input into the function.
* @see [geodesicBuffer()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#geodesicBuffer)
* @example
* // Buffer point by 1000 feet
* const ptBuff = geometryEngine.buffer(point, 1000, "feet");
*/
export function buffer(geometry: GeometryUnion | GeometryUnion[], distance: number, unit?: number | LinearUnit, toUnionResults?: boolean): Polygon | Polygon[];
/**
* Creates geodesic buffer polygons at a specified distance around the input geometries. When calculating distances,
* this method takes the curvature of the earth into account, which provides highly accurate results when dealing with
* very large geometries and/or geometries that spatially vary on a global scale where one projected coordinate
* system could not accurately plot coordinates and measure distances for all the geometries.
*
* This method only works with WGS84 (wkid: 4326) and [Web Mercator](https://developers.arcgis.com/javascript/latest/references/core/geometry/SpatialReference/#isWebMercator) spatial references. In general,
* if your input geometries are assigned one of those two spatial references, you should always use geodesicBuffer() to
* obtain the most accurate results for those geometries. If needing to buffer points assigned a
* [projected coordinate system other than Web Mercator](https://developers.arcgis.com/rest/services-reference/enterprise/using-spatial-references.htm), use [buffer()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#buffer) instead. If the input geometries
* have a geographic coordinate system other than WGS84 (wkid: 4326), use
* [buffer()](https://developers.arcgis.com/javascript/latest/references/core/rest/geometryService/#buffer).
*
* @deprecated since version 4.32. Use [geodesicBufferOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/geodesicBufferOperator/) instead.
* @param geometry - The buffer input geometry.
* The `geometry` and `distance` parameters must be specified as either both arrays or
* both non-arrays. Never specify one as an array and the other a non-array.
* @param distance - The specified distance(s) for buffering. The `geometry` and
* `distance` parameters must be specified as either both arrays or both non-arrays. Never specify one
* as an array and the other a non-array. When using an array of geometries as input, the length of the
* geometry array does not have to equal the length of the `distance` array. For example, if you pass an array of four geometries:
* `[g1, g2, g3, g4]` and an array with one distance: `[d1]`, all four geometries will be buffered by the
* single distance value. If instead you use an array of three distances: `[d1, d2, d3]`, `g1` will be buffered by
* `d1`, `g2` by `d2`, and `g3` and `g4` will both be buffered by `d3`. The value of the geometry array will
* be matched one to one with those in the distance array until the final value of the distance array is reached,
* in which case that value will be applied to the remaining geometries.
* @param unit - Measurement unit of the distance(s).
* Defaults to the units of the input geometries.
* @param toUnionResults - = false - Determines whether the output geometries should be unioned into a single
* polygon.
* @returns The resulting buffer(s).
* The result will be an array if an array of geometries is used as input. It will be a single polygon if
* a single geometry is input into the function.
* @example
* // point is a Point geometry
* const ptBuff = geometryEngine.geodesicBuffer(point, 1000, "kilometers"); // Buffer point by 1000km
*/
export function geodesicBuffer(geometry: GeometryUnion | GeometryUnion[], distance: number | number[], unit?: number | LinearUnit, toUnionResults?: boolean): Polygon | Polygon[];
/**
* Finds the coordinate of the geometry that is closest to the specified point.
*
* @deprecated since version 4.32. Use [proximityOperator's getNearestCoordinate()](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/proximityOperator/#getNearestCoordinate) method instead.
* @param geometry - The geometry to consider.
* @param inputPoint - The point used to search the nearest coordinate in the geometry.
* @returns Returns an object containing the nearest coordinate.
*/
export function nearestCoordinate(geometry: GeometryUnion, inputPoint: Point): NearestPointResult<Point>;
/**
* Finds the vertex on the geometry nearest to the specified point.
*
* @deprecated since version 4.32. Use [proximityOperator's getNearestVertex()](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/proximityOperator/#getNearestVertex) method instead.
* @param geometry - The geometry to consider.
* @param inputPoint - The point used to search the nearest vertex in the geometry.
* @returns Returns an object containing the nearest vertex.
* @example
* // Finds the nearest vertex of the polygon to the input point
* const {
* coordinate,
* distance
* } = geometryEngine.nearestVertex(boundaryPolygon, point);
*/
export function nearestVertex(geometry: GeometryUnion, inputPoint: Point): NearestPointResult<Point>;
/**
* Finds all vertices in the given distance from the specified point, sorted from the closest to the furthest and
* returns them as an array of Objects.
*
* @deprecated since version 4.32. Use [proximityOperator's getNearestVertices()](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/proximityOperator/#getNearestVertices) method instead.
* @param geometry - The geometry to consider.
* @param inputPoint - The point from which to measure.
* @param searchRadius - The distance to search from the inputPoint in the units of the view's spatial reference.
* @param maxVertexCountToReturn - The maximum number of vertices to return.
* @returns An array of objects containing the nearest
* vertices within the given `searchRadius`.
* @example
* // Returns an array of the nearest vertices
* const nearest = geometryEngine.nearestVertices(boundaryPolygon, point, 500, 2);
*/
export function nearestVertices(geometry: GeometryUnion, inputPoint: Point, searchRadius: number, maxVertexCountToReturn: number): NearestPointResult<Point>[];
/**
* Rotates a geometry counterclockwise by the specified number of degrees.
* Rotation is around the centroid, or a given rotation point.
*
* @deprecated since version 4.32. Use [Transformation's rotate()](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/support/Transformation/#rotate) method and the [affineTransformOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/affineTransformOperator/) instead.
* @param geometry - The geometry to rotate.
* @param angle - The rotation angle in degrees.
* @param rotationOrigin - Point to rotate the geometry around. Defaults to the centroid of the geometry.
* @returns The rotated geometry.
* @example
* // Returns a geometry rotated by 45 degrees
* const geometry = geometryEngine.rotate(boundaryPolygon, 45);
*/
export function rotate(geometry: GeometryUnion, angle: number, rotationOrigin?: Point | null): GeometryUnion;
/**
* Flips a geometry on the horizontal axis. Can optionally be flipped around a point.
*
* @deprecated since version 4.32. Use [Transformation's flipY()](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/support/Transformation/#flipY) method and the [affineTransformOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/affineTransformOperator/) instead.
* @param geometry - The input geometry to be flipped.
* @param flipOrigin - Point to flip the geometry around. Defaults to the centroid of the geometry.
* @returns The flipped geometry.
* @example
* // Returns a geometry flipped horizontally
* const geometry = geometryEngine.flipHorizontal(boundaryPolygon);
*/
export function flipHorizontal(geometry: GeometryUnion, flipOrigin?: Point | null | undefined): GeometryUnion;
/**
* Flips a geometry on the vertical axis. Can optionally be flipped around a point.
*
* @deprecated since version 4.32. Use [Transformation's flipX()](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/support/Transformation/#flipX) method and the [affineTransformOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/affineTransformOperator/) instead.
* @param geometry - The input geometry to be flipped.
* @param flipOrigin - Point to flip the geometry around. Defaults to the centroid of the geometry.
* @returns The flipped geometry.
* @example
* // Returns a geometry flipped vertically
* const geometry = geometryEngine.flipVertical(boundaryPolygon);
*/
export function flipVertical(geometry: GeometryUnion, flipOrigin?: Point | null | undefined): GeometryUnion;
/**
* Performs the generalize operation on the geometries in the cursor. Point and Multipoint geometries are left unchanged.
* Envelope is converted to a Polygon and then generalized.
*
* @deprecated since version 4.32. Use [generalizeOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/generalizeOperator/) instead.
* @param geometry - The input geometry to be generalized.
* @param maxDeviation - The maximum allowed deviation from the generalized geometry to the original geometry.
* @param removeDegenerateParts - When `true` the degenerate parts of the geometry will
* be removed from the output (may be undesired for drawing).
* @param maxDeviationUnit - Measurement unit for maxDeviation.
* Defaults to the units of the input geometry.
* @returns The generalized geometry.
* @example
* // Returns a generalized geometry
* const geometry = geometryEngine.generalize(boundaryPolygon, 2.5, true, "miles");
*/
export function generalize(geometry: GeometryUnion, maxDeviation: number, removeDegenerateParts?: boolean, maxDeviationUnit?: number | LinearUnit): GeometryUnion;
/**
* Densify geometries by plotting points between existing vertices.
*
* @deprecated since version 4.32. Use [densifyOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/densifyOperator/) instead.
* @param geometry - The geometry to be densified.
* @param maxSegmentLength - The maximum segment length allowed. Must be a positive value.
* @param maxSegmentLengthUnit - Measurement unit for maxSegmentLength.
* Defaults to the units of the input geometry.
* @returns The densified geometry.
* @see [geodesicDensify()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#geodesicDensify)
* @example
* // Returns a densified geometry
* const geometry = geometryEngine.densify(boundaryPolygon, 25);
*/
export function densify(geometry: GeometryUnion, maxSegmentLength: number, maxSegmentLengthUnit?: number | LinearUnit): GeometryUnion;
/**
* Returns a geodetically densified version of the input geometry. Use this function to draw the line(s) of the geometry along great circles.
*
* @deprecated since version 4.32. Use [geodeticDensifyOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/geodeticDensifyOperator/) instead.
* @param geometry - A polyline or polygon to densify.
* @param maxSegmentLength - The maximum segment length allowed (in meters if a `maxSegmentLengthUnit` is not provided). This must be a positive value.
* @param maxSegmentLengthUnit - Measurement unit for `maxSegmentLength`. If not provided, the unit will default to `meters`.
* @returns Returns the densified geometry.
* @example
* // lineGeom is a line geometry
* const densifiedGeom = geometryEngine.geodesicDensify(lineGeom, 10000);
*/
export function geodesicDensify(geometry: Polyline | Polygon, maxSegmentLength: number, maxSegmentLengthUnit?: LinearUnit): GeometryUnion;
/**
* Calculates the area of the input geometry. As opposed to [geodesicArea()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#geodesicArea), planarArea() performs
* this calculation using projected coordinates and does not take into account the earth's curvature. When using input geometries with a
* spatial reference of either WGS84 (wkid: 4326) or [Web Mercator](https://developers.arcgis.com/javascript/latest/references/core/geometry/SpatialReference/#isWebMercator), it is best practice to
* calculate areas using [geodesicArea()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#geodesicArea). If the input geometries have a projected coordinate system other than
* Web Mercator, use planarArea() instead.
*
* @deprecated since version 4.32. Use [areaOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/areaOperator/) instead.
* @param geometry - The input polygon.
* @param unit - Measurement unit of the return value.
* Defaults to the units of the input geometries.
* @returns The area of the input geometry.
* @example
* // Returns the numeric area of the given polygon
* const area = geometryEngine.planarArea(boundaryPolygon, "square-miles");
*/
export function planarArea(geometry: Polygon, unit?: number | AreaUnit): number;
/**
* Calculates the length of the input geometry. As opposed to [geodesicLength()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#geodesicLength), planarLength() uses
* projected coordinates and does not take into account
* the curvature of the earth when performing this calculation. When using input geometries with a
* spatial reference of either WGS84 (wkid: 4326) or [Web Mercator](https://developers.arcgis.com/javascript/latest/references/core/geometry/SpatialReference/#isWebMercator), it is best practice to
* calculate lengths using [geodesicLength()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#geodesicLength). If the input geometries have a projected coordinate system other than
* Web Mercator, use planarLength() instead.
*
* @deprecated since version 4.32. Use [lengthOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/lengthOperator/) instead.
* @param geometry - The input geometry.
* @param unit - Measurement unit of the return value.
* Defaults to the units of the input geometries.
* @returns The length of the input geometry.
* @example
* // Returns the numeric length of the given line
* const length = geometryEngine.planarLength(riverGeometry, "miles");
*/
export function planarLength(geometry: GeometryUnion, unit?: number | LinearUnit): number;
/**
* Calculates the area of the input geometry. As opposed to [planarArea()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#planarArea), geodesicArea takes into account
* the curvature of the earth when performing this calculation. Therefore, when using input geometries with a
* spatial reference of either WGS84 (wkid: 4326) or [Web Mercator](https://developers.arcgis.com/javascript/latest/references/core/geometry/SpatialReference/#isWebMercator), it is best practice to
* calculate areas using geodesicArea(). If the input geometries have a projected coordinate system other than
* Web Mercator, use [planarArea()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#planarArea) instead.
*
* This method only works with WGS84 (wkid: 4326) and [Web Mercator](https://developers.arcgis.com/javascript/latest/references/core/geometry/SpatialReference/#isWebMercator) spatial references.
*
* @deprecated since version 4.32. Use [geodeticAreaOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/geodeticAreaOperator/) instead.
* @param geometry - The input polygon.
* @param unit - Measurement unit of the return value.
* Defaults to the units of the input geometries.
* @returns Area of the input geometry.
* @example
* // Returns the numeric geodesic area of the given polygon
* const area = geometryEngine.geodesicArea(boundaryPolygon, "square-miles");
*/
export function geodesicArea(geometry: Polygon, unit?: number | AreaUnit): number;
/**
* Calculates the length of the input geometry. As opposed to [planarLength()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#planarLength), geodesicLength() takes into account
* the curvature of the earth when performing this calculation. Therefore, when using input geometries with a
* spatial reference of either WGS84 (wkid: 4326) or [Web Mercator](https://developers.arcgis.com/javascript/latest/references/core/geometry/SpatialReference/#isWebMercator), it is best practice to
* calculate lengths using geodesicLength(). If the input geometries have a projected coordinate system other than
* Web Mercator, use [planarLength()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#planarLength) instead.
*
* This method only works with WGS84 (wkid: 4326) and [Web Mercator](https://developers.arcgis.com/javascript/latest/references/core/geometry/SpatialReference/#isWebMercator) spatial references.
*
* @deprecated since version 4.32. Use [geodeticLengthOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/geodeticLengthOperator/) instead.
* @param geometry - The input geometry.
* @param unit - Measurement unit of the return value.
* Defaults to the units of the input geometry.
* @returns Length of the input geometry.
* @example
* // Returns the numeric geodesic length of the given line
* const length = geometryEngine.geodesicLength(riverGeometry, "miles");
*/
export function geodesicLength(geometry: GeometryUnion, unit?: number | LinearUnit): number;
/**
* Returns an array of points at the intersecting locations of two input polylines. Use
* [intersect()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#intersect) for all other geometry intersect operations.
*
* @deprecated since version 4.32. Use [intersectionOperator's executeMany()](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/intersectionOperator/#executeMany) method instead.
* @param line1 - The first polyline to use in the intersect operation.
* @param line2 - The second polyline to use in the intersect operation.
* @returns The point intersections of the input polylines.
* @since 4.25
* @see [intersect()](https://developers.arcgis.com/javascript/latest/references/core/geometry/geometryEngine/#intersect)
* @example
* // Creates an array of points for the intersections of the input lines
* const intersections = geometryEngine.intersectLinesToPoints(line1, line2);
*/
export function intersectLinesToPoints(line1: Polyline, line2: Polyline): Point[];