Base class for all classes that represent geometric shapes. More...
Header: | #include <Geometry.h> |
Since: | Esri::ArcGISRuntime 100.0 |
Inherits: | Esri::ArcGISRuntime::JsonSerializable |
Inherited By: | Esri::ArcGISRuntime::Envelope, Esri::ArcGISRuntime::Multipart, Esri::ArcGISRuntime::Multipoint, and Esri::ArcGISRuntime::Point |
Public Functions
Geometry() | |
Geometry(const Esri::ArcGISRuntime::Geometry &other) | |
Geometry(Esri::ArcGISRuntime::Geometry &&other) | |
virtual | ~Geometry() override |
Esri::ArcGISRuntime::GeometryDimension | dimension() const |
bool | equalsWithTolerance(const Esri::ArcGISRuntime::Geometry &other, double tolerance) const |
Esri::ArcGISRuntime::Envelope | extent() const |
Esri::ArcGISRuntime::GeometryType | geometryType() const |
bool | hasCurves() const |
bool | hasM() const |
bool | hasZ() const |
bool | isEmpty() const |
Esri::ArcGISRuntime::SpatialReference | spatialReference() const |
bool | operator!=(const Esri::ArcGISRuntime::Geometry &other) const |
Esri::ArcGISRuntime::Geometry & | operator=(const Esri::ArcGISRuntime::Geometry &other) |
Esri::ArcGISRuntime::Geometry & | operator=(Esri::ArcGISRuntime::Geometry &&other) |
bool | operator==(const Esri::ArcGISRuntime::Geometry &other) const |
Reimplemented Public Functions
virtual QString | toJson() const override |
virtual QJsonObject | unknownJson() const override |
virtual QJsonObject | unsupportedJson() const override |
Static Public Members
Esri::ArcGISRuntime::Geometry | fromJson(const QString &json) |
Detailed Description
Geometry is the base class for two-dimensional (x,y) and three-dimensional (x,y,z) geometries, such as Point, Multipoint, Polyline, Polygon, and Envelope. It represents real-world objects by defining a shape at a specific geographic location, and is used throughout the API to represent the shapes of features and graphics, layer extents, viewpoints, and GPS locations. It is also used to define the inputs and outputs for spatial analysis and geoprocessing operations, and to measure distances and areas.
All types of geometry have the following characteristics:
- A SpatialReference indicating the coordinate system used by its coordinates.
- Can be empty, indicating that they have no specific location or shape.
- May have z-values and/or m-values to define elevation and measures, respectively.
- Can be converted to and from JSON to be persisted or to be exchanged directly with REST services.
Immutability
Most geometries are created and not changed for their lifetime. Examples include features created to be stored in a geodatabase or read from a non-editable layer, and features returned from tasks such as a spatial query, geocode operation, network trace, or geoprocessing task. Immutable geometries (geometries that cannot be changed) offer important benefits to your app. They are inherently thread-safe, help prevent inadvertent changes, and allow for certain performance optimizations.
If you want to modify the shape of a Geometry, there are two options available:
- GeometryBuilder. Use a geometry builder if you want to incrementally reshape a geometry. If you want to reshape a Polygon, for example, then pass the polygon to a PolygonBuilder. The polygon builder copies the polygon and provides methods to add, update, and delete the polygon parts and segment vertices. The geometry builder represents the state of a geometry under modification, and you can obtain it at any time using GeometryBuilder::toGeometry.
- GeometryEditor. Use a geometry editor if you want to allow the user to interactively modify an existing geometry. Start the GeometryEditor by passing the geometry to GeometryEditor::start(const Esri::ArcGISRuntime::Geometry&). The start method signals to the geometry editor to start capturing user interaction with the map through mouse or touch gestures.
Note that the GeometryEngine offers a range of topological and spatial transformations that can create a new geometry from an existing geometry. The GeometryEngine allows you to perform actions on an existing geometry, such as a buffer, cut, clip, densify, or project, to produce a new output geometry. See GeometryEngine to explore various supported geometric operations.
Coordinate units
The coordinates that define a geometry are only meaningful in the context of the geometry's SpatialReference. The vertices and spatial reference together allow your app to translate a real-world object from its location on the Earth to its location on your map or scene.
In some cases, a geometry's spatial reference may not be set. For example, a Graphic that does not have a spatial reference is drawn using the same spatial reference as the GeoView to which it was added. If the coordinates are in a different spatial reference, the graphics may not display in the correct location, or at all.
When using GeometryBuilder to create a Polyline or Polygon from a collection of Point, you don't need to set the spatial reference of every point before you add it to the builder, as it is assigned the spatial reference of the builder itself. In most other cases, such as when using a geometry in geometry operations or when editing a feature table, spatialReference must be set.
Spatial reference and projection
Changing the coordinates of a geometry to have the same shape and location represented using a different SpatialReference is known as "projection" or sometimes as "reprojection". Because geometries are immutable, they do not have any member methods that project, transform, or otherwise modify their content.
Relevant samples:
- Add graphics with renderer: A renderer allows you to change the style of all graphics in a graphics overlay by referencing a single symbol style.
- Add graphics with symbols: Use a symbol style to display a graphic on a graphics overlay.
- Change viewpoint: Set the map view to a new viewpoint.
- Clip geometry: Clip a geometry with another geometry.
- Convex hull: Create a convex hull for a given set of points.
- Create and edit geometries: Use the Geometry Editor to create new point, multipoint, polyline, or polygon geometries or to edit existing geometries by interacting with a map view.
- Create and save KML file: Construct a KML document and save it as a KMZ file.
- Display OGC API Feature Collection: This sample demonstrates how to display an OGC API feature collection and query features while navigating the map view.
- Generate Offline Map (Overrides): Take a web map offline with additional options for each layer.
- Geodesic operations: Calculate a geodesic path between two points and measure its distance.
- Nearest vertex: Find the closest vertex and coordinate of a geometry to a point.
- Project: Project a point from one spatial reference to another.
- Sketch on map: This sample demonstrates how to use the Sketch Editor to edit or sketch a new point, line, or polygon geometry on to a map.
- Snap geometry edits: Use the Geometry Editor to edit a geometry and align it to existing geometries on a map.
- Spatial operations: Find the union, intersection, or difference of two geometries.
- Spatial relationships: Determine spatial relationships between two geometries.
See also GeometryEngine, GeometryBuilder, and GeometryEditor.
Member Function Documentation
Geometry::Geometry()
Default constructor. Creates an empty Geometry.
Geometry::Geometry(const Esri::ArcGISRuntime::Geometry &other)
Copy constructor from other Geometry.
Geometry::Geometry(Esri::ArcGISRuntime::Geometry &&other)
Move constructor from other Geometry.
[override virtual]
Geometry::~Geometry()
Destructor.
Esri::ArcGISRuntime::GeometryDimension Geometry::dimension() const
Returns the dimensionality of a Geometry, relating to the number of spatial dimensions in which the geometry may have a size.
You can use dimension to work out what kind of symbol can be applied to a specific type of geometry. For example, Point and Multipoint are both zero-dimensional point geometries, and both can be displayed using a type of MarkerSymbol. Polygon and Envelope are both 2-dimensional area geometries that can be displayed using a type of FillSymbol.
Returns GeometryDimension::Unknown if an error occurs.
bool Geometry::equalsWithTolerance (const Esri::ArcGISRuntime::Geometry &other, double tolerance) const
Returns true
if two geometries are approximately the same within the given tolerance.
- other - The second geometry.
- tolerance - The tolerance.
This function performs a lightweight comparison of two geometries that might be useful when writing test code. It uses the tolerance to compare each of x, y, and any other values the geometries possess (such as z or m) independently in the manner: abs(value1 - value2) <= tolerance. The single tolerance value is used even if the x, y, z or m units differ. This function does not respect modular arithmetic of spatial references which wrap around, so longitudes of -180 and +180 degrees are considered to differ by 360 degrees.
Returns true
if the difference of each is within the tolerance and all other properties of the geometries are exactly equal (such as spatial reference and vertex count). Returns false
if an error occurs.
For topological equality, use a relational operator such as GeometryEngine::equals(const Esri::ArcGISRuntime::Geometry&, const Esri::ArcGISRuntime::Geometry&).
Esri::ArcGISRuntime::Envelope Geometry::extent() const
Returns the minimum enclosing bounding-box (or Envelope) that covers the geometry.
[static]
Esri::ArcGISRuntime::Geometry Geometry::fromJson (const QString &json)
Converts a JSON string to an object.
- json - The JSON string.
Esri::ArcGISRuntime::GeometryType Geometry::geometryType () const
Returns the type of geometry.
This indicates the type of geometrical shape it can represent, such as Envelope, Point or Polygon.
Returns GeometryType::Unknown if an error occurs.
bool Geometry::hasCurves () const
Returns true
if this geometry contains curve segments, false
otherwise.
ArcGIS software supports polygon and polyline geometries that contain curve segments, sometimes known as true curves or nonlinear segments). Curves may be present in certain types of data, such as Mobile Map Packages (MMPK) or geometry JSON. When connecting to ArcGIS feature services that support curves (see ArcGISFeatureServiceInfo::isSupportsTrueCurve), this API retrieves densified versions of curve feature geometries by default.
If a polygon or polyline geometry contains curve segments, this property returns true
. You can use curve segments when using a MultipartBuilder to create or edit polygon and polyline geometries, and also get curve segments when iterating through the segments of existing Multipart geometries when this property returns true
. You can also choose to return true curves from feature services by using ArcGISRuntimeEnvironment::serviceCurveGeometryMode.
See also GeometryBuilder::hasCurves, ImmutablePart::hasCurves, CubicBezierSegment, and EllipticArcSegment.
bool Geometry::hasM () const
Returns true
if the geometry has m values (measure values), false
otherwise.
M is a vertex value that is stored with the geometry. These values typically represent non-spatial measurements or attributes.
bool Geometry::hasZ () const
Returns true
if the geometry has z-coordinate values, false
otherwise.
Only 3D geometries contain z-coordinate values. These values typically represent elevation, height, or depth.
bool Geometry::isEmpty () const
Returns true
if the geometry is empty, false
otherwise.
A geometry is empty if it does not have valid geographic coordinates, even if the SpatialReference is specified. An empty Geometry is a valid object that has no location in space.
Esri::ArcGISRuntime::SpatialReference Geometry::spatialReference () const
Returns the spatial reference for this geometry.
This can be empty if the geometry is not associated with a SpatialReference.
[override virtual]
QString Geometry::toJson () const
Reimplements: JsonSerializable::toJson() const.
Converts a geometry into an ArcGIS json geometry representation.
Returns this Geometry represented as a JSON String.
[override virtual]
QJsonObject Geometry::unknownJson () const
Reimplements: JsonSerializable::unknownJson() const.
Returns the unknown data from the source JSON.
Unknown JSON is a dictionary of values not defined in the ArcGIS specification used to create this object but found in the source JSON. If the object is written back to JSON, any unknown JSON data is not persisted. The ArcGIS specification may be for a web map, web scene, REST API, and so on.
See also JsonSerializable.
[override virtual]
QJsonObject Geometry::unsupportedJson () const
Reimplements: JsonSerializable::unsupportedJson() const.
Returns the unsupported data from the source JSON.
Unsupported JSON is a dictionary of values defined in the ArcGIS specification used to create this object but not currently used in this API. If the object is written back to JSON, any unsupported JSON data is persisted. The ArcGIS specification may be from a web map, web scene, REST API, and so on.
See also JsonSerializable.
[since Esri::ArcGISRuntime 200.2]
bool Geometry::operator!=(const Esri::ArcGISRuntime::Geometry &other) const
Inequality operator. Returns true
if this object and other are not equal.
This function was introduced in Esri::ArcGISRuntime 200.2.
See also Geometry::operator==.
Esri::ArcGISRuntime::Geometry &Geometry::operator=(const Esri::ArcGISRuntime::Geometry &other)
Assignment operator from other Geometry.
Esri::ArcGISRuntime::Geometry &Geometry::operator=(Esri::ArcGISRuntime::Geometry &&other)
Move operator from other Geometry.
bool Geometry::operator==(const Esri::ArcGISRuntime::Geometry &other) const
Returns true
if two geometries are exactly equal. The types of geometry, order of points, all values, and the SpatialReference must all be equal.
- other - The second geometry.
This method provides a strict comparison of two geometries to ensure that they are identical. For a slightly more relaxed comparison (one that does not take coordinate order into account), use GeometryEngine::equals(const Esri::ArcGISRuntime::Geometry&, const Esri::ArcGISRuntime::Geometry&).