Class GeometryEngine
- java.lang.Object
-
- com.esri.arcgisruntime.geometry.GeometryEngine
-
public final class GeometryEngine extends java.lang.Object
Performs geometric operations such as spatial relationship tests, reprojections, shape manipulations, topological query, analysis operations, and spatial operations onGeometry
objects. Spatial relationship tests are based on the Dimensionally Extended 9 Intersection Model (DE-9IM) developed by Clementini et al.Capabilities include:
- Create new geometries from others with
buffer(Geometry, double)
,clip(Geometry, Envelope)
, andunion(Geometry, Geometry)
. - Test spatial relationships between geometries such as
intersects(Geometry, Geometry)
, andcontains(Geometry, Geometry)
. - Find the
nearestCoordinate(Geometry, Point)
ornearestVertex(Geometry, Point)
between geometries. - Reproject a geometry to another
SpatialReference
usingproject(Geometry, SpatialReference)
. - Calculate area and length using
area(Polygon)
andlength(Polyline)
, or the geodetic equivalents (bufferGeodetic(Geometry, double, LinearUnit, double, GeodeticCurveType)
andlengthGeodetic(Geometry, LinearUnit, GeodeticCurveType)
) that account for the curvature of the earth.
GeometryEngine
generally operates in two dimensions; operations do not account for z-values unless documented as such for a specific method (for exampleproject(Geometry, SpatialReference)
will transform z-values in some cases).GeometryEngine
provides both planar (Euclidean) and geodetic versions of many operations. Be aware that methods named with only the operation are the planar versions (buffer(Geometry, double)
, for example), while the geodetic equivalent has "Geodetic" appended to the name (for examplebufferGeodetic(Geometry, double, LinearUnit, double, GeodeticCurveType)
).Geodetic methods are better suited to data that have a geographic spatial reference (see
SpatialReference.isGeographic()
), especially for large-area, small-scale use, while planar methods are suitable to data that have a projected coordinate system, especially for local, large-scale areas. Geodetic methods indicate this in the name, for examplebufferGeodetic(Geometry, double, LinearUnit, double, GeodeticCurveType)
.- Since:
- 100.0.0
- Create new geometries from others with
-
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static double
area(Envelope envelope)
Calculates the area for the Envelope passed in.static double
area(Polygon polygon)
Calculates the area for the Polygon passed in.static double
areaGeodetic(Geometry geometry, AreaUnit areaUnit, GeodeticCurveType curveType)
Calculates the area of the given geometry using a geodetic curve.static java.util.List<Polygon>
autoComplete(java.lang.Iterable<Polygon> existingBoundaries, java.lang.Iterable<Polyline> newBoundaries)
Fills the closed gaps between polygons using polygon boundaries and polylines as the boundary for the new polygons.static Geometry
boundary(Geometry geometry)
Calculates the boundary of the given geometry.static Polygon
buffer(Geometry geometry, double distance)
Creates and returns a geometry object that represents a buffer polygon relative to the given geometry at the specified distance around the given geometry.static java.util.List<Polygon>
buffer(java.lang.Iterable<Geometry> geometries, java.lang.Iterable<java.lang.Double> distances, boolean unionResult)
Creates and returns a buffer or buffers relative to the specified collection of geometries.static Polygon
bufferGeodetic(Geometry geometry, double distance, LinearUnit distanceUnit, double maxDeviation, GeodeticCurveType curveType)
Returns a geometry object that represents a buffer around the given geometry, calculated using a geodetic curve.static java.util.List<Polygon>
bufferGeodetic(java.lang.Iterable<Geometry> geometries, java.lang.Iterable<java.lang.Double> distances, LinearUnit distanceUnit, double maxDeviation, GeodeticCurveType curveType, boolean unionResult)
Creates a buffer or buffers relative to a collection of geometries, basing calculations on a geodesic curve.static Geometry
clip(Geometry geometry, Envelope envelope)
Returns a geometry created by clipping the given Geometry with the given Envelope.static Envelope
combineExtents(Geometry geometry1, Geometry geometry2)
Combines the extents of two given geometries.static Envelope
combineExtents(java.lang.Iterable<Geometry> geometries)
Combines the extents of a collection of geometries.static boolean
contains(Geometry container, Geometry within)
Tests if geometry1 contains geometry2.static Geometry
convexHull(Geometry geometry)
Calculates the convex hull of the given geometry.static java.util.List<Geometry>
convexHull(java.lang.Iterable<Geometry> geometries, boolean unionResult)
Calculates the convex hull or hulls of the geometries in the given collection.static Point
createPointAlong(Polyline polyline, double distance)
Calculates the point at the given distance along the line.static boolean
crosses(Geometry geometry1, Geometry geometry2)
Tests if geometry1 crosses geometry2.static java.util.List<Geometry>
cut(Geometry geometry, Polyline cutter)
Cuts geometry with cutter.static Geometry
densify(Geometry geometry, double maxSegmentLength)
Densifies the input geometry by inserting additional vertices along the geometry at an interval defined bymaxSegmentLength
.static Geometry
densifyGeodetic(Geometry geometry, double maxSegmentLength, LinearUnit lengthUnit, GeodeticCurveType curveType)
Densifies the input geometry by creating additional vertices along the geometry, using a geodesic curve.static Geometry
difference(Geometry geometry1, Geometry geometry2)
Constructs the set-theoretic difference between two geometries.static boolean
disjoint(Geometry geometry1, Geometry geometry2)
Tests whether two geometries are disjoint.static double
distanceBetween(Geometry geometry1, Geometry geometry2)
Measures the simple planar distance between two geometries.static GeodeticDistanceResult
distanceGeodetic(Point point1, Point point2, LinearUnit distanceUnit, AngularUnit azimuthUnit, GeodeticCurveType curveType)
Calculates the distance between two Points, returning the result in the given linear unit of measurement.static Geometry
ellipseGeodesic(GeodesicEllipseParameters parameters)
Calculates a geodesic ellipse (or geodesic circle, if semiAxis1Length = semiAxis2Length) centered on a specific point.static boolean
equals(Geometry geometry1, Geometry geometry2)
Tests if two geometries are equal.static Polyline
extend(Polyline polyline, Polyline extender, ExtendOptions... extendOptions)
Extends a polyline using a polyline as the extender.static double
fractionAlong(Polyline line, Point point, double tolerance)
Finds the location on the line nearest the point, expressed as the fraction along the line's total geodesic length, if the point is within the specified distance from the the closest location on the line.static Geometry
generalize(Geometry geometry, double maxDeviation, boolean removeDegenerateParts)
Generalizes the given geometry by removing vertices, based on the Douglas-Peucker algorithm.static Geometry
intersection(Geometry geometry1, Geometry geometry2)
Calculates the intersection of two geometries.static java.util.List<Geometry>
intersections(Geometry geometry1, Geometry geometry2)
Calculates the intersections of two geometries.static boolean
intersects(Geometry geometry1, Geometry geometry2)
Tests if two geometries intersect.static boolean
isSimple(Geometry geometry)
Indicates if this Geometry is topologically simple (in other words, is topologically correct).static Point
labelPoint(Polygon polygon)
Calculates an interior point for the given polygon.static double
length(Polyline polyline)
Calculates the length of the given polyline.static double
lengthGeodetic(Geometry geometry, LinearUnit lengthUnit, GeodeticCurveType curveType)
Calculates the geodetic length of the geometry.static Point
moveGeodetic(Point point, double distance, LinearUnit distanceUnit, double azimuth, AngularUnit azimuthUnit, GeodeticCurveType curveType)
Returns a new Point, moved by the given distance at the given azimuth (angle) from the given input Point.static java.util.List<Point>
moveGeodetic(java.util.List<Point> points, double distance, LinearUnit distanceUnit, double azimuth, AngularUnit azimuthUnit, GeodeticCurveType curveType)
Returns a List of Points, moved by the given distance at the given azimuth (angle) from the given input List of Points.static ProximityResult
nearestCoordinate(Geometry geometry, Point point)
Determines the nearest point in the input geometry to the input point using a simple planar measurement.static ProximityResult
nearestCoordinateGeodetic(Geometry geometry, Point point, double maxDeviation, LinearUnit deviationUnit)
Determines the nearest point in the input geometry to the input point, by using a shape preserving geodesic approximation of the input geometry.static ProximityResult
nearestVertex(Geometry geometry, Point point)
Returns aProximityResult
that describes the nearest vertex in the input geometry to the input point.static Geometry
normalizeCentralMeridian(Geometry geometry)
Returns a copy of the input geometry that does not intersect the antimeridian.static Geometry
offset(Geometry geometry, double distance, GeometryOffsetType offsetType, double bevelRatio, double flattenError)
Creates an offset version of the input geometry.static boolean
overlaps(Geometry geometry1, Geometry geometry2)
Tests if two geometries overlap.static Geometry
project(Geometry geometry, SpatialReference spatialReference)
Projects the given geometry from its current spatial reference system into the given spatial reference system, using the default geographic transformation.static Geometry
project(Geometry geometry, SpatialReference spatialReference, DatumTransformation datumTransformation)
Projects the given geometry from its current spatial reference system into the given output spatial reference system, applying the datum transformation provided.static boolean
relate(Geometry geometry1, Geometry geometry2, java.lang.String relation)
Compares the spatial relationship of two geometries.static Geometry
removeM(Geometry geometry)
Creates a copy of a geometry with its m values removed.static Geometry
removeZ(Geometry geometry)
Creates a copy of a geometry with its z values removed.static Geometry
removeZAndM(Geometry geometry)
Creates a copy of a geometry with its z- and m values removed.static Multipart
reshape(Multipart geometry, Polyline reshaper)
Reshapes a polygon or polyline using a single path polyline as thereshaper
.static Geometry
sectorGeodesic(GeodesicSectorParameters parameters)
Creates a sector as a polygon, polyline or multipoint geometry.static Geometry
setM(Geometry geometry, double m)
Creates a copy of a geometry with its m values set to the given value.static Geometry
setZ(Geometry geometry, double z)
Creates a copy of a geometry with its z values set to the given value.static Geometry
setZAndM(Geometry geometry, double z, double m)
Creates a copy of a geometry with its z- and m values set to the given values.static Geometry
simplify(Geometry geometry)
Simplifies the given geometry to make it topologically consistent according to its geometry type.static Geometry
symmetricDifference(Geometry geometry1, Geometry geometry2)
Calculates the symmetric difference (exclusive or) of the two geometries.static boolean
touches(Geometry geometry1, Geometry geometry2)
Test if the two geometries touch on their borders.static Geometry
union(Geometry geometry1, Geometry geometry2)
Calculates the union of the two geometries.static Geometry
union(java.lang.Iterable<Geometry> geometries)
Calculates the union of a collection of geometries.static boolean
within(Geometry within, Geometry container)
Tests ifwithin
is withincontainer
.
-
-
-
Method Detail
-
area
public static double area(Envelope envelope)
Calculates the area for the Envelope passed in. This is a planar measurement to compute area for use on geometries using a projected coordinate system. UseareaGeodetic(Geometry, AreaUnit, GeodeticCurveType)
for geodetic measurement.- Parameters:
envelope
- envelope whose area is to be calculated- Returns:
- area in units matching the envelope's spatial reference
- Throws:
java.lang.NullPointerException
- if envelope is null- Since:
- 100.0.0
-
area
public static double area(Polygon polygon)
Calculates the area for the Polygon passed in. This is a planar measurement using 2D Cartesian mathematics to compute the area. UseareaGeodetic(Geometry, AreaUnit, GeodeticCurveType)
for geodetic measurement.The calculated area is based upon the
SpatialReference
of the input geometry. Planar measurements of distance and area can be extremely inaccurate if using an unsuitable spatial reference. Ensure that you understand the potential for error with the geometry's spatial reference.Some spatial references are more appropriate than others for measuring area, and an 'area preserving' spatial reference would be most appropriate with this method. If the input geometry to this method is not in an 'area preserving' spatial reference, you can calculate more accurate results by doing one of the following:
- Use a different spatial reference. Use the
project(Geometry, SpatialReference)
method to project the geometry to a spatial reference that is better suited for area calculations. - Use the geodetic equivalent:
areaGeodetic(Geometry, AreaUnit, GeodeticCurveType)
.
The input geometry must be topologically correct to get its accurate area. Geometries returned by ArcGIS Server services are always topologically correct. If the geometry is not topologically correct, then the resultant area from this method could give negative results. Best practice is to
simplify(Geometry)
geometries before passing to this method.Supports true curves.
- Parameters:
polygon
- polygon whose area is to be calculated- Returns:
- area of the given polygon, in the same units as the polygon's spatial reference
- Throws:
java.lang.NullPointerException
- if polygon is null- Since:
- 100.0.0
- Use a different spatial reference. Use the
-
areaGeodetic
public static double areaGeodetic(Geometry geometry, AreaUnit areaUnit, GeodeticCurveType curveType)
Calculates the area of the given geometry using a geodetic curve.The term geodesic means calculating the shortest distance between two points on a spheroid. Using geodesic algorithms to calculate distances provides a highly accurate way to obtain length and area of measurements of geographic features. The geodesic algorithm uses the concept of a great circle to obtain the shortest route between two points along the earth’s surface. The area measurement obtained via this method is typically superior to that of the
area(Polygon)
method, asarea(Polygon)
is based upon a projection (i.e. a flat 2D representation of a 3D surface) which often introduces distortion depending on theSpatialReference
the geometry is in.The input geometry must be topologically correct to get its accurate area. If the geometry is not topologically correct, then the resultant area from this method could give negative results. Best practice is to
simplify(Geometry)
geometries before passing to this method. Geometries returned by ArcGIS Server services are always correct. Therefore, if you construct geometries programmatically or using the sketch layer, or if you modify geometries returned by ArcGIS Server, you should always simplify them usingsimplify(Geometry)
first.Supports true curves, calculating the result by densifying curves.
- Parameters:
geometry
- geometry whose area is to be calculatedareaUnit
- unit of measure for the return value. If null, defaults to unit of IdAreaUnitId.SQUARE_METERS
curveType
- type of curve to calculate the geodetic area- Returns:
- the geodetic area of the given geometry
- Throws:
java.lang.IllegalArgumentException
- if geometry or curveType is null- Since:
- 100.0.0
-
autoComplete
public static java.util.List<Polygon> autoComplete(java.lang.Iterable<Polygon> existingBoundaries, java.lang.Iterable<Polyline> newBoundaries)
Fills the closed gaps between polygons using polygon boundaries and polylines as the boundary for the new polygons.The new polygons are created in the closed empty areas bounded by the edges of the existing polygon boundaries and the new boundary polylines. The newly created polygons do not overlap any existing polygons or polylines, and the boundary of a new polygon must contain at least one edge from the polylines. Only polygons that intersect the input polylines will participate in the operation, so it makes sense to filter the input accordingly.
The geometries in existingBoundaries and newBoundaries must have consistent spatial references.
- Parameters:
existingBoundaries
- the polygonsnewBoundaries
- the polylines- Returns:
- an unmodifiable list of the new polygons that were created; empty if either existingBoundaries or newBoundaries is empty
- Throws:
java.lang.IllegalArgumentException
- if existingBoundaries or newBoundaries is nullArcGISRuntimeException
- if the geometries in existingBoundaries and newBoundaries have inconsistent spatial references- Since:
- 100.1.0
-
boundary
public static Geometry boundary(Geometry geometry)
Calculates the boundary of the given geometry.- The boundary of a point is an empty geometry. Points have no boundary.
- The boundary of a polyline is a multipoint containing the end points of the polyline's parts.
- The boundary of a polygon is a polyline describing its outer and inner rings.
Supports true curves.
- Parameters:
geometry
- geometry whose boundary is to be calculated- Returns:
- the boundary of the given geometry
- Throws:
java.lang.IllegalArgumentException
- if geometry is null- Since:
- 100.0.0
-
buffer
public static Polygon buffer(Geometry geometry, double distance)
Creates and returns a geometry object that represents a buffer polygon relative to the given geometry at the specified distance around the given geometry. This is a planar buffer operation. UsebufferGeodetic(Geometry, double, LinearUnit, double, GeodeticCurveType)
to produce a geodetic buffer.The returned polygon is based upon the
SpatialReference
of the input geometry. Planar measurements of distance and area can be extremely inaccurate if using an unsuitable spatial reference. Ensure that you understand the potential for error with the geometry's spatial reference. For this method, some spatial references are better than others for getting accurate results. To get the most accurate buffer polygons using this method, consider using an 'area preserving' spatial reference such as: Albers, Lambert, Mollweide, Hammer, Sinusoidal, etc.If the input geometry to this method is not based on a good 'area preserving' spatial reference, then there are two options available to produce accurate buffers:
- Use the
project(Geometry, SpatialReference)
method to project the geometry to a coordinate system that is better suited for buffers. - Use the
bufferGeodetic(Geometry, double, LinearUnit, double, GeodeticCurveType)
. method which projects the geometry to a geographic coordinate system to obtain the most accurate buffers possible.
Supports true curves as input, producing a densified curve as output where applicable.
- Parameters:
geometry
- geometry to bufferdistance
- buffer distance for the geometry in the same units as the geometry's spatial reference- Returns:
- a polygon that represents a buffer at the desired distance around the given geometry
- Throws:
java.lang.NullPointerException
- if geometry is null- Since:
- 100.0.0
- Use the
-
buffer
public static java.util.List<Polygon> buffer(java.lang.Iterable<Geometry> geometries, java.lang.Iterable<java.lang.Double> distances, boolean unionResult)
Creates and returns a buffer or buffers relative to the specified collection of geometries. The geometries must have the same spatial references. This is a planar buffer operation. UsebufferGeodetic(Iterable, Iterable, LinearUnit, double, GeodeticCurveType, boolean)
to produce geodetic buffers.The polygons returned from this method are based upon the
SpatialReference
of the input geometry. Planar measurements of distance and area can be extremely inaccurate if using an unsuitable spatial reference. Ensure that you understand the potential for error with the geometry's spatial reference. For this method, some spatial references are better than others for getting accurate results. To get the most accurate buffer polygons using this method, consider using an 'area preserving' SpatialReference such as: Albers, Lambert, Mollweide, Hammer, Sinusoidal, etc.If the input geometry to this method is not based on a good 'area preserving' spatial reference, then there are two options available to produce accurate buffers:
- Use the
project(Geometry, SpatialReference)
method to project the geometry to a coordinate system that is better suited for buffers. - Use the
buffer(Iterable, Iterable, boolean)
method, which projects the geometry to a geographic coordinate system to obtain the most accurate buffers possible.
Supports true curves as input, producing a densified curve as output where applicable.
- Parameters:
geometries
- the geometries to bufferdistances
- the buffer distances for the geometries' in the same units as the geometry's spatial reference. If the number of distances is fewer than the number of geometries, the last distance value is used for the rest of the geometries.unionResult
- true to return a single geometry that buffers all the input geometries; false to return a separate buffer for each of the input geometries.- Returns:
- an unmodifiable list containing either a single polygon or one polygon per input geometry, depending on the value of unionResult
- Throws:
java.lang.IllegalArgumentException
- if geometries is null, or if distances is null or emptyArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent- Since:
- 100.1.0
- Use the
-
bufferGeodetic
public static Polygon bufferGeodetic(Geometry geometry, double distance, LinearUnit distanceUnit, double maxDeviation, GeodeticCurveType curveType)
Returns a geometry object that represents a buffer around the given geometry, calculated using a geodetic curve.Geodesic buffers account for the actual shape of the Earth. Distances are calculated between points on a curved surface (the geoid) as opposed to points on a flat surface (the Cartesian plane).
Negative distance can be used to create a buffer inside a
Polygon
or anEnvelope
. Using a negative buffer distance will shrink geometry's boundary by the distance specified. Note that if the negative buffer distance is large enough, the geometry may collapse to an empty polygon.- Parameters:
geometry
- the geometry to bufferdistance
- the buffer distance for the geometrydistanceUnit
- the unit of measurement for distancemaxDeviation
- the maximum deviation between pointscurveType
- the type of geodetic curve to use- Returns:
- a polygon that represents a buffer at the desired distance around the given geometry
- Throws:
java.lang.IllegalArgumentException
- if geometry, distanceUnit or curveType is nullArcGISRuntimeException
- if the spatial reference of geometry is null- Since:
- 100.1.0
-
bufferGeodetic
public static java.util.List<Polygon> bufferGeodetic(java.lang.Iterable<Geometry> geometries, java.lang.Iterable<java.lang.Double> distances, LinearUnit distanceUnit, double maxDeviation, GeodeticCurveType curveType, boolean unionResult)
Creates a buffer or buffers relative to a collection of geometries, basing calculations on a geodesic curve. The geometries must have consistent, non-null spatial references.Geodesic buffers account for the actual shape of the Earth. Distances are calculated between points on a curved surface (the geoid) as opposed to points on a flat surface (the Cartesian plane).
Negative distance can be used to create buffers inside polygons. Using a negative buffer distance will shrink polygons' boundaries by the distance specified. Note that if the negative buffer distance is large enough, polygons may collapse to empty geometries.
- Parameters:
geometries
- the geometries to bufferdistances
- the buffer distances for the geometries. If the number of distances is fewer than the number of geometries, the last distance value is used for the rest of the geometries.distanceUnit
- the unit of measurement for distancesmaxDeviation
- the maximum deviation between pointscurveType
- the type of geodetic curve to useunionResult
- true to return a single geometry that buffers all the input geometries; false to return a separate buffer for each of the input geometries- Returns:
- an unmodifiable list of polygon geometries that represent a geodesic buffer at the desired distance(s)
relative to the given geometries. If
unionResult
is true, there will be only one polygon in the resulting list. Ifgeometries
is an empty list, the returned list of polygons is also empty. - Throws:
java.lang.IllegalArgumentException
- if geometries, distanceUnit or curveType is null, or if distances is null or emptyArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent- Since:
- 100.1.0
-
combineExtents
public static Envelope combineExtents(Geometry geometry1, Geometry geometry2)
Combines the extents of two given geometries. The input geometries must have consistent spatial references.Supports true curves.
- Parameters:
geometry1
- a geometrygeometry2
- another geometry- Returns:
- an envelope that covers the extents of the input geometries
- Throws:
java.lang.IllegalArgumentException
- if geometry1 or geometry2 is nullArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.1.0
-
combineExtents
public static Envelope combineExtents(java.lang.Iterable<Geometry> geometries)
Combines the extents of a collection of geometries. The input geometries must have consistent spatial references.Supports true curves.
- Parameters:
geometries
- the input geometries- Returns:
- an envelope that covers the extents of the input geometries
- Throws:
java.lang.IllegalArgumentException
- if geometries is null or emptyArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent- Since:
- 100.1.0
-
contains
public static boolean contains(Geometry container, Geometry within)
Tests if geometry1 contains geometry2.Supports true curves.
- Parameters:
container
- geometry that is tested for the "contains" relationship towithin
within
- geometry that is tested for the "within" relationship tocontainer
- Returns:
- true if
container
containswithin
, false otherwise - Throws:
java.lang.NullPointerException
- if container or within is nullArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.0.0
-
convexHull
public static Geometry convexHull(Geometry geometry)
Calculates the convex hull of the given geometry. The convex hull of a geometry is the minimal bounding geometry such that all outer angles are convex. If you imagine a rubber band stretched around the input geometry, the rubber band takes the shape of the convex hull.- Parameters:
geometry
- the input geometry- Returns:
- the convex hull of the given geometry
- Throws:
java.lang.IllegalArgumentException
- if geometry is null- Since:
- 100.0.0
-
convexHull
public static java.util.List<Geometry> convexHull(java.lang.Iterable<Geometry> geometries, boolean unionResult)
Calculates the convex hull or hulls of the geometries in the given collection. The geometries must have consistent spatial references. The convex hull of a geometry is the minimal bounding geometry such that all outer angles are convex. If you imagine a rubber band stretched around the input geometry, the rubber band takes the shape of the convex hull.- Parameters:
geometries
- the input geometriesunionResult
- true to return a single convex hull that encloses all the input geometries, false to return a separate convex hull for each of the input geometries- Returns:
- an unmodifiable list containing either a single geometry or one geometry per input geometry, depending on the value of unionResult
- Throws:
java.lang.IllegalArgumentException
- if geometries is nullArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent- Since:
- 100.1.0
-
crosses
public static boolean crosses(Geometry geometry1, Geometry geometry2)
Tests if geometry1 crosses geometry2.This method returns true if an intersection results in a geometry whose dimension is one less than the maximum dimension of the two source geometries and the intersection set is interior to both source geometries. This method only returns true for the following combinations of geometries: Multipoint/Polygon, Multipoint/Polyline, Polyline/Polyline, and Polyline/Polygon comparisons.
Supports true curves.
- Parameters:
geometry1
- one of the two geometriesgeometry2
- the other geometry- Returns:
- true if
geometry1
crossesgeometry2
, false otherwise - Throws:
java.lang.IllegalArgumentException
- if geometry1 or geometry2 is nullArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.0.0
-
cut
public static java.util.List<Geometry> cut(Geometry geometry, Polyline cutter)
Cuts geometry with cutter.The cutter and geometry's spatial references must match.
When cutting a
Polyline
, all left cuts will be grouped together in the firstGeometry
, right cuts and co-incident cuts are grouped in the secondGeometry
, and each undefined cut, along with any uncut parts, are output as separate Polylines. A touch is considered to be a cut.When cutting a
Polygon
, all left cuts are grouped in the firstGeometry
, all right cuts are in the secondGeometry
, and each undefined cut, along with any left-over parts after cutting, are output as a separateGeometry
.If there were no cuts then an empty collection will be returned.
If the left or right cut does not exist, the returned
Geometry
will be empty for this type of cut. 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.- Parameters:
geometry
- geometry to cutcutter
- polyline that cuts the geometry- Returns:
- collection of geometries after cut
- Throws:
java.lang.IllegalArgumentException
- if geometry or cutter is null- Since:
- 100.0.0
-
densify
public static Geometry densify(Geometry geometry, double maxSegmentLength)
Densifies the input geometry by inserting additional vertices along the geometry at an interval defined bymaxSegmentLength
. Additional vertices are not inserted on segments of the inputPolyline
orPolygon
that are shorter thanmaxSegmentLength
.Supports true curves as input, producing a densified curve as output where applicable.
- Parameters:
geometry
- aPolyline
orPolygon
to densifymaxSegmentLength
- The maximum distance between vertices when the input geometry is densified. The linear unit is assumed to be that of the input geometry's spatial reference (decimal degrees for a geometry with a geographic spatial reference, meters for geometry with a Mercator spatial reference, and so on). UseSpatialReference.getUnit()
to determine the unit used by the spatial reference.- Returns:
- the densified geometry
- Throws:
java.lang.IllegalArgumentException
- if geometry is null- Since:
- 100.0.0
-
densifyGeodetic
public static Geometry densifyGeodetic(Geometry geometry, double maxSegmentLength, LinearUnit lengthUnit, GeodeticCurveType curveType)
Densifies the input geometry by creating additional vertices along the geometry, using a geodesic curve.- Parameters:
geometry
- geometry to densifymaxSegmentLength
- the maximum distance between vertices when the input geometry is densified. Must be a positive value.lengthUnit
- unit of measure formaxSegmentLength
. If null, defaults to linear unit of IdLinearUnitId.METERS
.curveType
- type of geodetic curve to calculate- Returns:
- the geodesic densified geometry
- Throws:
java.lang.IllegalArgumentException
- if geometry or curveType is nullArcGISRuntimeException
- if the spatial reference of geometry is null- Since:
- 100.0.0
-
difference
public static Geometry difference(Geometry geometry1, Geometry geometry2)
Constructs the set-theoretic difference between two geometries. This will return a geometry consisting of the parts of geometry1 that are not in geometry2.This method performs a spatial subtraction from the two input geometries. This means that the order of the two input geometry arguments of the difference method will have different results if they are switched. Think of the difference equation as:
A (Difference) B = C
B (Difference) A = D
See
symmetricDifference(Geometry, Geometry)
to get the parts that are in either geometry, but not in both.This method supports true curves.
- Parameters:
geometry1
- first geometrygeometry2
- second geometry- Returns:
- new geometry object that represents the difference of the two given input geometries
- Throws:
java.lang.NullPointerException
- if geometry1 or geometry2 is nullArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.0.0
-
disjoint
public static boolean disjoint(Geometry geometry1, Geometry geometry2)
Tests whether two geometries are disjoint.Supports true curves.
- Parameters:
geometry1
- geometry1 one of the two geometriesgeometry2
- geometry2 the other geometry- Returns:
- true if
geometry1
andgeometry2
do not intersect/overlap, false otherwise - Throws:
java.lang.IllegalArgumentException
- if geometry1 or geometry2 are nullArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.0.0
-
distanceBetween
public static double distanceBetween(Geometry geometry1, Geometry geometry2)
Measures the simple planar distance between two geometries. This is a planar measurement using 2D Cartesian mathematics to calculate the distance in the same coordinate space as the inputs. UsedistanceGeodetic(Point, Point, LinearUnit, AngularUnit, GeodeticCurveType)
for a geodetic measurement of distance.This distance calculation is based upon the
SpatialReference
of the input geometries. In general, planar measurements of distance and area can be extremely inaccurate if using an unsuitable spatial reference. Distortion may be negligible, however, for large scale maps (small areas) that use a suitable map projection. Ensure that you understand the potential for error with the geometry's spatial reference.If you need to calculate more accurate results, do one of the following:
- Use a different spatial reference.
- Use the geodetic equivalent:
distanceGeodetic(Point, Point, LinearUnit, AngularUnit, GeodeticCurveType)
.
- Parameters:
geometry1
- first geometrygeometry2
- second geometry- Returns:
- the distance between the two geometries in the same units as the geometry's spatial reference
- Throws:
java.lang.NullPointerException
- if geometry1 or geometry2 is nullArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.0.0
- See Also:
distanceGeodetic(Point, Point, LinearUnit, AngularUnit, GeodeticCurveType)
-
distanceGeodetic
public static GeodeticDistanceResult distanceGeodetic(Point point1, Point point2, LinearUnit distanceUnit, AngularUnit azimuthUnit, GeodeticCurveType curveType)
Calculates the distance between two Points, returning the result in the given linear unit of measurement. The distance is calculated by accounting for the curvature of the earth's surface, using the given geodetic curve type. Use this method as an alternative to thedistanceBetween(Geometry, Geometry)
method for points that have ageographic
spatial reference. The returned result includes additional information about the azimuths between the input points, in the given angular units.- Parameters:
point1
- the Point to calculate distance frompoint2
- the Point to calculate distance todistanceUnit
- the linear unit of measurement for the returned resultazimuthUnit
- the angular unit of measurement for the returned resultcurveType
- the type of geodetic curve between the two points to use to calculate distance- Returns:
- the calculated geodetic distance, and other information resulting from the measurement
- Throws:
java.lang.IllegalArgumentException
- if any of the arguments is nullArcGISRuntimeException
- if point1 and point2 have different spatial references- Since:
- 100.0.0
-
moveGeodetic
public static java.util.List<Point> moveGeodetic(java.util.List<Point> points, double distance, LinearUnit distanceUnit, double azimuth, AngularUnit azimuthUnit, GeodeticCurveType curveType)
Returns a List of Points, moved by the given distance at the given azimuth (angle) from the given input List of Points. The distance is calculated by accounting for the curvature of the earth's surface, using the given geodetic curve type. Specifying a negative distance moves points in the opposite direction from azimuth.Each
Point
in the input list ofPoint
s must have the sameSpatialReference
. The returned unmodifiable collection is in the same order as the input, but with newPoint
s at their destination locations.- Parameters:
points
- the points to use as the starting locations for the returned pointsdistance
- the distance to move the pointsdistanceUnit
- the unit of measure of distance. If null,LinearUnitId.METERS
will be used.azimuth
- the azimuth angle of the direction for the pointsazimuthUnit
- the angular unit of measure of azimuth. If null,AngularUnitId.DEGREES
will be used.curveType
- the type of geodetic curve to move the points along- Returns:
- an unmodifiable List of new Points, moved by the given distance from the input points
- Throws:
java.lang.IllegalArgumentException
- if points or curveType is nullArcGISRuntimeException
- if the spatial references of the input points are inconsistent or null- Since:
- 100.0.0
-
moveGeodetic
public static Point moveGeodetic(Point point, double distance, LinearUnit distanceUnit, double azimuth, AngularUnit azimuthUnit, GeodeticCurveType curveType)
Returns a new Point, moved by the given distance at the given azimuth (angle) from the given input Point. The distance is calculated by accounting for the curvature of the earth's surface, using the given geodetic curve type.- Parameters:
point
- the point to use as starting location for the returned pointdistance
- the distance to move the pointsdistanceUnit
- the unit of measure of distance. If null,LinearUnitId.METERS
will be used.azimuth
- the azimuth (angle) of the direction of movementazimuthUnit
- the angular unit of measure of azimuth. If null,AngularUnitId.DEGREES
will be used.curveType
- the type of geodetic curve to move the point along- Returns:
- a new Point moved by the given distance from the input point
- Throws:
java.lang.IllegalArgumentException
- if point or curveType is nullArcGISRuntimeException
- if point spatial reference is null- Since:
- 100.0.0
-
ellipseGeodesic
public static Geometry ellipseGeodesic(GeodesicEllipseParameters parameters)
Calculates a geodesic ellipse (or geodesic circle, if semiAxis1Length = semiAxis2Length) centered on a specific point. If this method is used to generate a polygon or a polyline, the result may have more than one part depending on the size of the ellipse and its position relative to the horizon of the coordinate system. When the method generates a polyline or a multipoint, the result vertices lie on the boundary of the ellipse. When a polygon is generated, the interior of the polygon is the interior of the ellipse.If the smaller axis is zero, the ellipse will degenerate to a line segment, a point, or an empty geometry (depending on the larger axis and output type). Otherwise, if
GeodesicEllipseParameters.getMaxPointCount()
< 10, the number of vertices will default to 10.- Parameters:
parameters
- various options needed to construct the ellipse- Returns:
- a geodesic ellipse centered on a specific point
- Throws:
java.lang.IllegalArgumentException
- if parameters is nulljava.lang.IllegalArgumentException
- if theGeodesicEllipseParameters.getGeometryType()
is not one ofGeometryType.MULTIPOINT
,GeometryType.POLYLINE
,GeometryType.POLYGON
ArcGISRuntimeException
- if parameters is not valid- Since:
- 100.0.0
-
equals
public static boolean equals(Geometry geometry1, Geometry geometry2)
Tests if two geometries are equal. Does not take coordinate order into account.For the strictest equals comparisons of two geometries (which do take into account coordinate order) use:
Point.equals(Geometry, double)
Geometry.equals(Geometry, double)
Object.equals(Object)
Geometry.equals(Geometry, double)
Geometry.equals(Geometry, double)
Geometry.equals(Geometry, double)
Supports true curves.
- Parameters:
geometry1
- does this geometry equal geometry2?geometry2
- does this geometry equal geometry1?- Returns:
- true if the two geometries are equal, false otherwise
- Throws:
java.lang.NullPointerException
- if geometry1 or geometry2 is null- Since:
- 100.0.0
-
extend
public static Polyline extend(Polyline polyline, Polyline extender, ExtendOptions... extendOptions)
Extends a polyline using a polyline as the extender.The output polyline will have the first and last segment of each path extended to the extender if the segments can be interpolated to intersect the extender. In the case that the segments can be extended to multiple segments of the extender, the shortest extension is chosen. Only end points for paths that are not shared by the end points of other paths will be extended.
- Parameters:
polyline
- the polyline to be extendedextender
- the polyline to extend toextendOptions
- an array or sequence of one or more ExtendOptions, indicating the type of extend operation to perform- Returns:
- the extended polyline, or null if polyline cannot be extended by extender
- Throws:
java.lang.IllegalArgumentException
- if polyline, extender or extendOptions is null, or extendOptions is emptyjava.lang.IllegalArgumentException
- if multiple extendOptions are passed and they contain values that are incompatible with each other- Since:
- 100.1.0
-
fractionAlong
public static double fractionAlong(Polyline line, Point point, double tolerance)
Finds the location on the line nearest the point, expressed as the fraction along the line's total geodesic length, if the point is within the specified distance from the the closest location on the line. The line and point must have consistent spatial references.This method supports true curves.
- Parameters:
line
- the line to locate the point's distance along its lengthpoint
- the point to locatetolerance
- maximum distance that a point is allowed to be from the line, in the units of theSpatialReference
. If the tolerance is -1, the fraction of the closest location on the line is always returned as long as the point lies between the two ends of the polyline. If the distance from the point to the closest location on the line is greater than the tolerance, or the tolerance is -1 and the point does not lie between the two ends of the polyline, NaN is returned.- Returns:
- the length along the line nearest the input point, expressed as the fraction of the line's length between 0.0 and 1.0, or NAN if the point is outside the tolerance
- Throws:
java.lang.IllegalArgumentException
- if the line or point parameters are null- Since:
- 100.6.0
-
generalize
public static Geometry generalize(Geometry geometry, double maxDeviation, boolean removeDegenerateParts)
Generalizes the given geometry by removing vertices, based on the Douglas-Peucker algorithm. Point and Multipoint geometries cannot be generalized.Supports true curves as input, producing a densified curve as output where applicable.
- Parameters:
geometry
- geometry to generalizemaxDeviation
- the maximum distance that the generalized geometry can deviate from the original, in the same units as the geometry's spatial reference systemremoveDegenerateParts
- if true, degenerate parts of the resulting geometry that are undesired for drawing will be removed- Returns:
- geometry that represents the generalization of the input geometry
- Throws:
java.lang.IllegalArgumentException
- if geometry is null- Since:
- 100.0.0
-
intersection
public static Geometry intersection(Geometry geometry1, Geometry geometry2)
Calculates the intersection of two geometries.The result has the same dimensionality as the lower dimensionality of the two intersecting geometries. Returns an empty geometry if there is no intersection with this dimensionality. For example, the intersection of two polygons (geometries with area, so they have dimensionality of 2) or, say, a polygon and an envelope (also an area) is a polygon. Similarly, the intersection of a polyline (a line, so dimensionality of 1) and another polyline is always a polyline. Therefore when computing the intersection of polylines, this function does not return points where they cross, but rather lines of overlap. If there are no lines of overlap, an empty polyline is returned even if the input lines cross. To obtain all intersections, irrespective of dimensionality, see
intersections(Geometry, Geometry)
.Supports true curves.
- Parameters:
geometry1
- first geometrygeometry2
- second geometry- Returns:
- geometry object that represents the intersection of the given geometries
- Throws:
java.lang.NullPointerException
- if geometry1 or geometry2 is nullArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.0.0
-
intersections
public static java.util.List<Geometry> intersections(Geometry geometry1, Geometry geometry2)
Calculates the intersections of two geometries.The returned list contains one geometry of each dimension for which there are intersections. For example, if both inputs are polylines, the list will contain at most two geometries: the first a multipoint containing the points at which the lines cross, and the second a polyline containing the lines of overlap. If a crossing point lies within a line of overlap, only the line of overlap is present - the result set is not self-intersecting. If there are no crossing points or there are no lines of overlap, the respective geometry will not be present in the list. If the input geometries do not intersect, the list will be empty. The table below shows, for each combination of pairs of input geometry types, the types of geometry that will be contained within the list if there are intersections of that type.
Set of potential output geometry types for pairs of input geometry types: Input type Point/Multipoint Polyline Polygon/Envelope Point/Multipoint Multipoint Multipoint Multipoint Polyline Multipoint Multipoint, Polyline Multipoint, Polyline Polygon/Envelope Multipoint Multipoint, Polyline Multipoint, Polyline, Polygon The geometries in the returned list are sorted by ascending dimensionality, for example multipoint (dimension 0) then polyline (dimension 1) then polygon (dimension 2) for the intersection of two geometries with area that have intersections of those types.
Supports true curves.
- Parameters:
geometry1
- first geometrygeometry2
- second geometry- Returns:
- an unmodifiable list containing geometry objects that represent the intersection of the given geometries
- Throws:
java.lang.IllegalArgumentException
- if geometry1 or geometry2 is nullArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.1.0
-
intersects
public static boolean intersects(Geometry geometry1, Geometry geometry2)
Tests if two geometries intersect.Supports true curves.
- Parameters:
geometry1
- first geometrygeometry2
- second geometry- Returns:
- true if the two geometries intersect, false otherwise
- Throws:
java.lang.NullPointerException
- if geometry1 or geometry2 is nullArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.0.0
-
labelPoint
public static Point labelPoint(Polygon polygon)
Calculates an interior point for the given polygon. This point can be used by clients to place a label for the polygon.This method supports true curves.
- Parameters:
polygon
- polygon to calculate the interior point of- Returns:
- a point that represents the interior point for the given polygon
- Throws:
java.lang.IllegalArgumentException
- if polygon is null- Since:
- 100.0.0
-
length
public static double length(Polyline polyline)
Calculates the length of the given polyline. This is a planar measurement using 2D Cartesian mathematics to compute the length. UselengthGeodetic(Geometry, LinearUnit, GeodeticCurveType)
for geodetic measurement.This length calculation is based upon the
SpatialReference
of the input geometry. Although some projections are better than others for preserving distance, it will always be distorted in some areas of the map. Distortion may be negligible for large scale maps (small areas) that use a suitable map projection. Make sure you know your data and spatial reference if accurate measurements are required. For more accurate results, consider using thelengthGeodetic(Geometry, LinearUnit, GeodeticCurveType)
operation.Supports true curves.
- Parameters:
polyline
- polyline to calculate the length of- Returns:
- the length of the given geometry in the same units as the polyline's spatial reference
- Throws:
java.lang.NullPointerException
- if polyline is null- Since:
- 100.0.0
-
lengthGeodetic
public static double lengthGeodetic(Geometry geometry, LinearUnit lengthUnit, GeodeticCurveType curveType)
Calculates the geodetic length of the geometry. Geodesic length is calculated using only the vertices of the geometry and defines the lines between vertices as geodesic segments independent of the actual shape of the geometry. A geodesic segment is the shortest path between two points on an ellipsoid.Supports true curves, calculating the results by densifying curves.
- Parameters:
geometry
- geometry to calculate the geodetic length oflengthUnit
- unit of measure for the return value. If null, defaults to linear unit of IdLinearUnitId.METERS
.curveType
- geodetic curve type to calculate the length- Returns:
- the geodetic length of the given geometry
- Throws:
java.lang.IllegalArgumentException
- if geometry or curveType is nullArcGISRuntimeException
- if the spatial reference of geometry is null- Since:
- 100.0.0
-
nearestCoordinate
public static ProximityResult nearestCoordinate(Geometry geometry, Point point)
Determines the nearest point in the input geometry to the input point using a simple planar measurement.Input geometry of type
Envelope
is not supported. To find the nearest coordinate on anEnvelope
, convert it to aPolygon
first.Planar measurements of distance and area can be extremely inaccurate if using an unsuitable spatial reference. Ensure that you understand the potential for error with the geometry's spatial reference. If you need to calculate more accurate results consider using a different spatial reference, or using the geodetic equivalent,
nearestCoordinateGeodetic(Geometry, Point, double, LinearUnit)
.If the specified geometry is a polyline or polygon, the nearest coordinate is the closest point on or along the line segment that comprises the geometry; it may not necessarily be the closest vertex of the line segment. If you want to obtain the closest vertex in the polyline or polygon use the
nearestVertex(Geometry, Point)
method instead.Supports true curves.
- Parameters:
geometry
- geometry on which to find the nearest coordinate.Envelope
is not supportedpoint
- point to calculate the nearest coordinate from- Returns:
- a
ProximityResult
containing the results of the operation. This is null if the input geometry is empty.ProximityResult.getDistance()
is zero if the point lies inside an input polygon or polyline. - Throws:
java.lang.IllegalArgumentException
- if geometry or point is nulljava.lang.IllegalArgumentException
- if geometry is of typeEnvelope
ArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.0.0
-
nearestCoordinateGeodetic
public static ProximityResult nearestCoordinateGeodetic(Geometry geometry, Point point, double maxDeviation, LinearUnit deviationUnit)
Determines the nearest point in the input geometry to the input point, by using a shape preserving geodesic approximation of the input geometry.All geometry types are supported for the
geometry
parameter. Supports true curves.- Parameters:
geometry
- a geometry object on which to calculate the nearest coordinate to thepoint
parameterpoint
- the point from which to calculate the nearest coordinate on thegeometry
parametermaxDeviation
- the maximum distance that the geodesic geometry can deviate from the original, in the units of thedeviationUnit
parameter. This value controls the error of calculation. If <= zero, or if NAN, deviation defaults to 0.01 meters.deviationUnit
- the unit of measure for themaxDeviation
parameter. If null, the units ofmaxDeviation
are assumed to be meters.- Returns:
- a
ProximityResult
containing the results of the operation, where theProximityResult.getDistance()
is returned in meters. Returns null if the input geometry is empty.ProximityResult.getDistance()
is zero if the point lies inside an input polygon, polyline, or envelope. - Throws:
java.lang.IllegalArgumentException
- if geometry is nulljava.lang.IllegalArgumentException
- if point is null- Since:
- 100.14.0
- See Also:
nearestCoordinate(Geometry, Point)
-
nearestVertex
public static ProximityResult nearestVertex(Geometry geometry, Point point)
Returns aProximityResult
that describes the nearest vertex in the input geometry to the input point.Input geometry of type
Envelope
is not supported. To find the nearest vertex on anEnvelope
, convert it to aPolygon
first.If the specified geometry is a polyline or polygon, the nearest vertex is the closest end point of the line segment that comprises the geometry; it may not necessarily be the closest point along the line segment. If you want to obtain the closest point in the polyline or polygon use the
nearestCoordinate(Geometry, Point)
method instead.Input geometries with true curves (where
Geometry.hasCurves()
is true) are supported, although curve segments do not affect the return value.- Parameters:
geometry
- geometry on which to find the nearest vertex.Envelope
is not supportedpoint
- point to calculate the nearest vertex from- Returns:
- result containing the nearest vertex
- Throws:
java.lang.IllegalArgumentException
- if geometry or point is nulljava.lang.IllegalArgumentException
- if geometry is of typeEnvelope
ArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.0.0
-
normalizeCentralMeridian
public static Geometry normalizeCentralMeridian(Geometry geometry)
Returns a copy of the input geometry that does not intersect the antimeridian. You may wish to use this method to normalize geometries before passing them to methods that require coordinates within the spatial reference domain, for example geodatabase editing methods or geocoding services.The returned geometry may have multiple parts, in order to ensure each part does not intersect the antimeridian. The returned geometry is the same type as the input geometry, except in the case of an Envelope in which case the returned geometry is a Polygon.
This method supports true curves.
- Parameters:
geometry
- the geometry to be normalized- Returns:
- the normalized geometry
- Throws:
java.lang.NullPointerException
- if geometry is null- Since:
- 100.0.0
-
offset
public static Geometry offset(Geometry geometry, double distance, GeometryOffsetType offsetType, double bevelRatio, double flattenError)
Creates an offset version of the input geometry.The offset operation creates a geometry that is a constant distance from the input geometry. It is similar to buffering, but produces a one sided result. If offset distance is greater than 0, then the offset geometry is constructed to the right of the oriented input geometry, otherwise it is constructed to the left. For a simple polygon, the orientation of outer rings is clockwise and for inner rings it is counterclockwise. So the "right side" of a simple polygon is always its inside. The bevelRatio is multiplied by the offset distance and the result determines how far a mitered offset intersection can be from the input curve before it is beveled.
- Parameters:
geometry
- geometry to create the offset fromdistance
- offset distance for the geometry result. If distance is greater than 0, then the offset geometry is constructed to the right of the input geometry, otherwise it is constructed to the leftoffsetType
- offset type of the geometry resultbevelRatio
- the ratio used to produce a bevel join instead of a miter join (used only when the offset type isGeometryOffsetType.MITERED
)flattenError
- the maximum distance of the resulting segments compared to the true circular arc (used only when the offset type isGeometryOffsetType.ROUNDED
). The algorithm never produces more than around 180 vertices for each round join.- Returns:
- an offset version of the input geometry
- Throws:
java.lang.IllegalArgumentException
- if geometry or offsetType is null- Since:
- 100.0.0
-
overlaps
public static boolean overlaps(Geometry geometry1, Geometry geometry2)
Tests if two geometries overlap.Supports true curves.
- Parameters:
geometry1
- one of the two geometriesgeometry2
- the other geometry- Returns:
- true if the two geometries overlap, false otherwise
- Throws:
java.lang.IllegalArgumentException
- ifgeometry1
orgeometry2
is nullArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.0.0
-
project
public static Geometry project(Geometry geometry, SpatialReference spatialReference)
Projects the given geometry from its current spatial reference system into the given spatial reference system, using the default geographic transformation.A default best-choice
DatumTransformation
is applied to the project operation. You can use theTransformationCatalog.getTransformation(SpatialReference, SpatialReference)
method to find out which transformation is used by default for the given spatial references. To control the specific transformation used, use theproject(Geometry, SpatialReference, DatumTransformation)
overload.If the geometry parameter has z values, those z values will also be transformed, provided that both the
SpatialReference
of that geometry and thespatialReference
parameter have a vertical coordinate system.Supports true curves. Projecting curves located at poles and coordinate system horizons using ArcGIS Runtime may give results that differ slightly from other ArcGIS software because ArcGIS Runtime uses a different geometry projection function.
- Parameters:
geometry
- input geometry to projectspatialReference
- the output spatial reference into which the geometry will be projected- Returns:
- the geometry projected into the output spatial reference. If the input
geometry
has a nullSpatialReference
, no projection occurs; instead, this method returns an identical geometry that has the spatial reference specified by thespatialReference
parameter. - Throws:
java.lang.NullPointerException
- if geometry or spatialReference is null- Since:
- 100.0.0
-
project
public static Geometry project(Geometry geometry, SpatialReference spatialReference, DatumTransformation datumTransformation)
Projects the given geometry from its current spatial reference system into the given output spatial reference system, applying the datum transformation provided.Use this overload to project a geometry if the difference between the input geometry's
SpatialReference
and the outputSpatialReference
involves a change of datum, and you do not wish to use the default datum transformation used byproject(Geometry, SpatialReference)
.// Create a geometry located in London, UK, with British National Grid spatial reference Point britishNationalGridPt = new Point(538985.355, 177329.516, SpatialReference.create(27700)); // Create a GeographicTransformation with a single step using WKID for OSGB_1936_To_WGS_1984_NGA_7PAR transformation GeographicTransformation transform = GeographicTransformation.create(GeographicTransformationStep.create(108336)); // Project the point to WGS84, using the transformation Point wgs84Pt = (Point) GeometryEngine.project(britishNationalGridPt, SpatialReferences.getWgs84(), transform);
Supports true curves. Projecting curves located at poles and coordinate system horizons using ArcGIS Runtime may give results that differ slightly from other ArcGIS software because ArcGIS Runtime uses a different geometry projection function.
- Parameters:
geometry
- the input geometry to projectspatialReference
- the output spatial reference into which the geometry will be projecteddatumTransformation
- the datum transformation that describes how coordinates are converted from one coordinate system to another; if null, then the default transformation is used. Using aHorizontalVerticalTransformation
here will also transform the z-values of the geometry, if (1) thegeometry
has z-values and (2) both thespatialReference
parameter and theSpatialReference
of thegeometry
parameter have a vertical coordinate system set.- Returns:
- the geometry projected into the output spatial reference. If the input
geometry
has a nullSpatialReference
no projection occurs; instead, this method returns an identical geometry that has the spatial reference specified by thespatialReference
parameter. - Throws:
java.lang.IllegalArgumentException
- if geometry or spatialReference is nullArcGISRuntimeException
- if the datumTransformation'sDatumTransformation.isMissingProjectionEngineFiles()
method returns true- Since:
- 100.2.0
-
relate
public static boolean relate(Geometry geometry1, Geometry geometry2, java.lang.String relation)
Compares the spatial relationship of two geometries. Can compare interior, boundary and exterior of two geometries based on a DE-9IM encoded string.This method supports true curves.
- Parameters:
geometry1
- one of the two geometriesgeometry2
- the other geometryrelation
- the DE-9IM string to be evaluated. Strings such as "T*****FF*" are accepted.- Returns:
- true if the two geometries are related by the given relation, false otherwise
- Throws:
java.lang.IllegalArgumentException
- if geometry1 or geometry2 is nulljava.lang.IllegalArgumentException
- if relation is null or emptyArcGISRuntimeException
- if relation is not valid- Since:
- 100.0.0
-
removeM
public static Geometry removeM(Geometry geometry)
Creates a copy of a geometry with its m values removed. If the given geometry has no m values, the given geometry itself is returned. The resulting geometry will haveGeometry.hasM()
false.Supports true curves.
- Parameters:
geometry
- the input geometry- Returns:
- a copy of the input geometry with its m values removed, or the input geometry itself if it already has no m values
- Throws:
java.lang.IllegalArgumentException
- if geometry is null- Since:
- 100.1.0
-
removeZ
public static Geometry removeZ(Geometry geometry)
Creates a copy of a geometry with its z values removed. If the given geometry has no z values, the given geometry itself is returned. The resulting geometry will haveGeometry.hasZ()
false.Supports true curves.
- Parameters:
geometry
- the input geometry- Returns:
- a copy of the input geometry with its z values removed, or the input geometry itself if it already has no z values
- Throws:
java.lang.IllegalArgumentException
- if geometry is null- Since:
- 100.1.0
-
removeZAndM
public static Geometry removeZAndM(Geometry geometry)
Creates a copy of a geometry with its z- and m values removed. If the given geometry has no z- or m values, the given geometry itself is returned. The resulting geometry will haveGeometry.hasZ()
andGeometry.hasM()
false.Supports true curves.
- Parameters:
geometry
- the input geometry- Returns:
- a copy of the input geometry with its z- and m values removed, or the input geometry itself if it already has no z- or m values
- Throws:
java.lang.IllegalArgumentException
- if geometry is null- Since:
- 100.1.0
-
reshape
public static Multipart reshape(Multipart geometry, Polyline reshaper)
Reshapes a polygon or polyline using a single path polyline as thereshaper
. The output geometry takes the shape of the input geometry where it first intersects thereshaper
to the last intersection. The first and last intersection points of thereshaper
are chosen closest to the end points of thereshaper
in the case that multiple intersections are found. For polygons, only individual paths can be reshaped. However, polylines can be reshaped across paths.- Parameters:
geometry
- the polygon or polyline to be reshapedreshaper
- the single path polyline reshaper- Returns:
- the reshaped polygon or polyline, or null if the input geometry cannot be reshaped by the reshaper
- Throws:
java.lang.IllegalArgumentException
- if geometry or reshaper is null- Since:
- 100.1.0
-
sectorGeodesic
public static Geometry sectorGeodesic(GeodesicSectorParameters parameters)
Creates a sector as a polygon, polyline or multipoint geometry. A geodesic sector is defined by a geodesic elliptical arc and two radii extending from the center point of the arc to the points where they each intersect the arc. The arc is a portion of an ellipse. The ellipse is defined by a center point, the lengths of its semi-major and semi-minor axes, and the direction of its semi-major axis. The first radius of the sector is defined by the start direction angle relative to the direction of the semi-major axis. The second radius is the sum of the start direction and the sector angle.- Parameters:
parameters
- options for constructing the sector- Returns:
- a geometry representing the geodesic sector
- Throws:
java.lang.IllegalArgumentException
- if parameters is nulljava.lang.IllegalArgumentException
- if theGeodesicEllipseParameters.getGeometryType()
is not one ofGeometryType.MULTIPOINT
,GeometryType.POLYLINE
,GeometryType.POLYGON
ArcGISRuntimeException
- if parameters is not valid- Since:
- 100.0.0
-
setM
public static Geometry setM(Geometry geometry, double m)
Creates a copy of a geometry with its m values set to the given value. If the given geometry already has m values, they will be replaced within the resulting geometry by the given m value. The resulting geometry will haveGeometry.hasM()
true.Supports true curves.
- Parameters:
geometry
- the input geometrym
- the m value to set- Returns:
- a copy of the input geometry with its m values set to the given value
- Throws:
java.lang.IllegalArgumentException
- if geometry is null- Since:
- 100.1.0
-
setZ
public static Geometry setZ(Geometry geometry, double z)
Creates a copy of a geometry with its z values set to the given value. If the given geometry already has z values, they will be replaced within the resulting geometry by the given z value. The resulting geometry will haveGeometry.hasZ()
true.Supports true curves.
- Parameters:
geometry
- the input geometryz
- the z value to set- Returns:
- a copy of the input geometry with its z values set to the given value
- Throws:
java.lang.IllegalArgumentException
- if geometry is null- Since:
- 100.1.0
-
setZAndM
public static Geometry setZAndM(Geometry geometry, double z, double m)
Creates a copy of a geometry with its z- and m values set to the given values. If the given geometry already has z- or m values, they will be replaced within the resulting geometry by the given values. The resulting geometry will haveGeometry.hasZ()
andGeometry.hasM()
true.Supports true curves.
- Parameters:
geometry
- the input geometryz
- the z value to setm
- the m value to set- Returns:
- a copy of the input geometry with its z- and m values set to the given values
- Throws:
java.lang.IllegalArgumentException
- if geometry is null- Since:
- 100.1.0
-
simplify
public static Geometry simplify(Geometry geometry)
Simplifies the given geometry to make it topologically consistent according to its geometry type. For instance, it rectifies polygons that may be self-intersecting, or contain incorrect ring orientations.Many of the methods in the geometry engine only work on geometry that is simple, and only simple geometries can be stored in a geodatabase.
Supports true curves.
- Parameters:
geometry
- geometry to simplify- Returns:
- simplified geometry
- Throws:
java.lang.NullPointerException
- if geometry is null- Since:
- 100.0.0
-
symmetricDifference
public static Geometry symmetricDifference(Geometry geometry1, Geometry geometry2)
Calculates the symmetric difference (exclusive or) of the two geometries.- Parameters:
geometry1
- one of the two geometriesgeometry2
- the other geometry- Returns:
- the symmetric difference of the two geometries
- Throws:
java.lang.IllegalArgumentException
- if geometry1 or geometry2 is nullArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.0.0
-
touches
public static boolean touches(Geometry geometry1, Geometry geometry2)
Test if the two geometries touch on their borders.Supports true curves.
- Parameters:
geometry1
- does this geometry touch geometry2?geometry2
- does this geometry touch geometry1?- Returns:
- true if the two geometries have at least one boundary point in common, but no interior points. False otherwise.
- Throws:
java.lang.NullPointerException
- if geometry1 or geometry2 is nullArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.0.0
-
union
public static Geometry union(Geometry geometry1, Geometry geometry2)
Calculates the union of the two geometries.Returns those parts of the two input geometries which overlap, combined into a single geometry. This means that the order of the input parameters of the GeometryEngine.Intersection is irrelevant. Think of the union equation as:
A (Union) B = C
B (Union) A = C
Supports true curves.
- Parameters:
geometry1
- first geometrygeometry2
- second geometry- Returns:
- the union of the two geometries
- Throws:
java.lang.NullPointerException
- if geometry1 or geometry2 is nullArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.0.0
-
union
public static Geometry union(java.lang.Iterable<Geometry> geometries)
Calculates the union of a collection of geometries.If the collection contains geometries of differing dimensionality, returns the union of the subset of geometries with the highest dimensionality. For example, given a collection of polygons, polylines and points, returns the union of the polygons.
The input geometries must have consistent spatial references.
- Parameters:
geometries
- the input geometries- Returns:
- the union of the input geometries
- Throws:
java.lang.IllegalArgumentException
- if geometries is null or emptyArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent- Since:
- 100.1.0
-
within
public static boolean within(Geometry within, Geometry container)
Tests ifwithin
is withincontainer
.Supports true curves.
- Parameters:
within
- geometry that is tested for the "within" relationship tocontainer
container
- geometry that is tested for the "contains" relationship towithin
- Returns:
- true if
within
lies in the interior of thecontainer
, false otherwise. The boundary and interior ofwithin
is not allowed to intersect the exterior of thecontainer
andwithin
may not equal thecontainer
. - Throws:
java.lang.NullPointerException
- if within or container is nullArcGISRuntimeException
- if the spatial references of the input geometries are inconsistent or null- Since:
- 100.0.0
-
clip
public static Geometry clip(Geometry geometry, Envelope envelope)
Returns a geometry created by clipping the given Geometry with the given Envelope. If no part of the Geometry lies within the Envelope, then the returned Geometry will be empty.Supports true curves.
- Parameters:
geometry
- the geometry to be clipped by the given envelopeenvelope
- the extent at which to clip the given geometry- Returns:
- the clipped geometry
- Throws:
java.lang.IllegalArgumentException
- if geometry or envelope is nullArcGISRuntimeException
- if geometry and envelope arguments have different spatial references- Since:
- 100.0.0
- See Also:
intersection(Geometry, Geometry)
-
isSimple
public static boolean isSimple(Geometry geometry)
Indicates if this Geometry is topologically simple (in other words, is topologically correct).Point geometries are always simple.
Multipoint geometries cannot have any points with exactly equal x and y values.
Polylines can have no degenerate segments.
For Polygons, the following must be true for the polygon to be considered simple:
- Exterior rings must be clockwise, and holes must be counterclockwise.
- Rings can touch other rings only at a finite number of vertices.
- Rings can be self tangent only at a finite number of vertices.
- Segments with a length less than zero are not allowed.
- Each path must contain at least three non-coincident vertices.
- Paths must not be empty.
Supports true curves.
- Parameters:
geometry
- the geometry to be tested if it is simple- Returns:
- true if the provided geometry is simple, false otherwise
- Throws:
java.lang.IllegalArgumentException
- if the geometry is null- Since:
- 100.0.0
-
createPointAlong
public static Point createPointAlong(Polyline polyline, double distance)
Calculates the point at the given distance along the line.If
distance
is less than or equal to zero, the point returned is coincident with the start of the line. If thedistance
is greater than or equal to the line's length, the point returned is coincident with the end of the line. If the line has multiple parts (notes: the gap does not count as part of line, it is ignored), and the distance falls exactly on a boundary between two parts, the returned point will be coincident with either the end of one part or the start of the next – which is undetermined.This method supports true curves.
As an example to illustrate the returned point you expect to obtain, suppose that you have a polyline with two parts, one is from [0, 0] to [10, 0], the other from [30, 0] to [50, 0], here is the table for the returned point at a given distance:
Distance Point returned Comments 0 [0, 0] Start of part 0 5 [5, 0] Midpoint of part 0 10 [10, 0] End of part 0 10 [30, 0] OR start of part 1 20 [40, 0] Midpoint of part 1 30 [50, 0] end of part 1 - Parameters:
polyline
- the polyline from which the point is createddistance
- the distance along the polyline, in the units of the polyline, where to create the point- Returns:
- the point at the given distance along the line
- Throws:
java.lang.IllegalArgumentException
- if polyline is null- Since:
- 100.3.0
-
-