21#include <QDomDocument>
41#include "json_fwd.hpp"
42using namespace nlohmann;
140 double mGridSize = -1;
166 Q_PROPERTY(
bool isNull READ isNull )
321 static QgsGeometry collectGeometry(
const QVector<QgsGeometry> &geometries );
338 static QgsGeometry createWedgeBuffer(
const QgsPoint ¢er,
double azimuth,
double angularWidth,
339 double outerRadius,
double innerRadius = 0 );
346 void fromWkb(
unsigned char *wkb,
int length )
SIP_SKIP;
352 void fromWkb(
const QByteArray &wkb );
372 bool isEmpty() const;
418 bool isGeosValid(
Qgis::GeometryValidityFlags flags =
Qgis::GeometryValidityFlags() ) const;
428 bool isSimple() const;
443 bool isAxisParallelRectangle(
double maximumDeviation,
bool simpleRectanglesOnly = false ) const;
473 double length() const;
660 double hausdorffDistance(
const QgsGeometry &geom )
const;
680 double hausdorffDistanceDensify(
const QgsGeometry &geom,
double densifyFraction )
const;
744 double distanceToVertex(
int vertex )
const;
753 double angleAtVertex(
int vertex )
const;
767 void adjacentVertices(
int atVertex,
int &beforeVertex
SIP_OUT,
int &afterVertex
SIP_OUT )
const;
781 bool insertVertex(
double x,
double y,
int beforeVertex );
795 bool insertVertex(
const QgsPoint &point,
int beforeVertex );
804 bool moveVertex(
double x,
double y,
int atVertex );
813 bool moveVertex(
const QgsPoint &p,
int atVertex );
826 bool deleteVertex(
int atVertex );
835 bool toggleCircularAtVertex(
int atVertex );
842 QgsPoint vertexAt(
int atVertex )
const;
876 double closestVertexWithContext(
const QgsPointXY &point,
int &atVertex
SIP_OUT )
const;
942 QgsGeometry removeInteriorRings(
double minimumAllowedArea = -1 )
const;
974 Qgis::GeometryOperationResult transform( const QTransform &t,
double zTranslate = 0.0,
double zScale = 1.0,
double mTranslate = 0.0,
double mScale = 1.0 );
982 Qgis::GeometryOperationResult rotate(
double rotation, const
QgsPointXY ¢er );
1037 Qgis::GeometryOperationResult reshapeGeometry( const
QgsLineString &reshapeLineString );
1110 QgsGeometry orthogonalize(
double tolerance = 1.0E-8,
int maxIterations = 1000,
double angleThreshold = 15.0 ) const;
1124 QgsGeometry triangularWaves(
double wavelength,
double amplitude,
bool strictWavelength = false ) const;
1144 QgsGeometry triangularWavesRandomized(
double minimumWavelength,
double maximumWavelength,
double minimumAmplitude,
double maximumAmplitude,
unsigned long seed = 0 ) const;
1158 QgsGeometry squareWaves(
double wavelength,
double amplitude,
bool strictWavelength = false ) const;
1178 QgsGeometry squareWavesRandomized(
double minimumWavelength,
double maximumWavelength,
double minimumAmplitude,
double maximumAmplitude,
unsigned long seed = 0 ) const;
1192 QgsGeometry roundWaves(
double wavelength,
double amplitude,
bool strictWavelength = false ) const;
1212 QgsGeometry roundWavesRandomized(
double minimumWavelength,
double maximumWavelength,
double minimumAmplitude,
double maximumAmplitude,
unsigned long seed = 0 ) const;
1227 QgsGeometry applyDashPattern( const QVector<
double > &pattern,
1228 Qgis::DashPatternLineEndingRule startRule =
Qgis::DashPatternLineEndingRule::NoRule,
1229 Qgis::DashPatternLineEndingRule endRule =
Qgis::DashPatternLineEndingRule::NoRule,
1230 Qgis::DashPatternSizeAdjustment adjustment =
Qgis::DashPatternSizeAdjustment::ScaleBothDashAndGap,
1231 double patternOffset = 0 ) const;
1245 QgsGeometry snappedToGrid(
double hSpacing,
double vSpacing,
double dSpacing = 0,
double mSpacing = 0 ) const;
1267 bool removeDuplicateNodes(
double epsilon = 4 * std::numeric_limits<
double>::epsilon(),
bool useZValues = false );
1278 bool intersects( const
QgsRectangle &rectangle ) const;
1294 bool intersects( const
QgsGeometry &geometry ) const;
1305 bool boundingBoxIntersects( const
QgsRectangle &rectangle ) const;
1316 bool boundingBoxIntersects( const
QgsGeometry &geometry ) const;
1333 bool contains( const
QgsGeometry &geometry ) const;
1345 bool disjoint( const
QgsGeometry &geometry ) const;
1357 bool touches( const
QgsGeometry &geometry ) const;
1369 bool overlaps( const
QgsGeometry &geometry ) const;
1393 bool crosses( const
QgsGeometry &geometry ) const;
1402 QgsGeometry buffer(
double distance,
int segments ) const;
1416 QgsGeometry buffer(
double distance,
int segments,
Qgis::EndCapStyle endCapStyle,
Qgis::JoinStyle joinStyle,
double miterLimit ) const;
1426 QgsGeometry offsetCurve(
double distance,
int segments,
Qgis::JoinStyle joinStyle,
double miterLimit ) const;
1443 QgsGeometry singleSidedBuffer(
double distance,
int segments,
Qgis::BufferSide side,
1444 Qgis::JoinStyle joinStyle =
Qgis::JoinStyle::Round,
1445 double miterLimit = 2.0 ) const;
1464 QgsGeometry taperedBuffer(
double startWidth,
double endWidth,
int segments ) const;
1480 QgsGeometry variableWidthBufferByM(
int segments ) const;
1488 QgsGeometry extendLine(
double startDistance,
double endDistance ) const;
1502 QgsGeometry densifyByCount(
int extraNodesPerSegment ) const;
1518 QgsGeometry densifyByDistance(
double distance ) const;
1535 QgsGeometry convertToCurves(
double distanceTolerance = 1e-8,
double angleTolerance = 1e-8 ) const;
1709 QgsGeometry delaunayTriangulation(
double tolerance = 0.0,
bool edgesOnly = false ) const;
1791 double lineLocatePoint( const
QgsGeometry &point ) const;
1802 double interpolateAngle(
double distance ) const;
1938 const
Qgis::GeometryType type = sipCpp->type();
1939 if ( sipCpp->isNull() )
1941 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Cannot generate points inside a null geometry." ).toUtf8().constData() );
1944 else if ( type != Qgis::GeometryType::Polygon )
1946 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"Cannot generate points inside a %1 geometry. Only Polygon types are permitted." ).arg(
QgsWkbTypes::displayString( sipCpp->wkbType() ) ).toUtf8().constData() );
1951 const sipTypeDef *qvector_type = sipFindType(
"QVector<QgsPointXY>" );
1952 sipRes = sipConvertFromNewType(
new QVector< QgsPointXY >( sipCpp->randomPointsInPolygon( a0, a1 ) ), qvector_type, Py_None );
1967 int wkbSize( QgsAbstractGeometry::WkbFlags flags = QgsAbstractGeometry::WkbFlags() )
const;
1976 QByteArray asWkb( QgsAbstractGeometry::WkbFlags flags = QgsAbstractGeometry::WkbFlags() )
const;
1983 QString asWkt(
int precision = 17 )
const;
1986 SIP_PYOBJECT __repr__();
1989 if ( sipCpp->isNull() )
1990 str = QStringLiteral(
"<QgsGeometry: null>" );
1993 QString wkt = sipCpp->asWkt();
1994 if ( wkt.length() > 1000 )
1995 wkt = wkt.left( 1000 ) + QStringLiteral(
"..." );
1996 str = QStringLiteral(
"<QgsGeometry: %1>" ).arg( wkt );
1998 sipRes = PyUnicode_FromString(
str.toUtf8().constData() );
2005 QString asJson(
int precision = 17 )
const;
2040 QVector<
QgsGeometry > coerceToType(
Qgis::WkbType type,
double defaultZ = 0,
double defaultM = 0 ) const;
2054 QgsGeometry convertToType(
Qgis::GeometryType destType,
bool destMultipart = false ) const;
2083 if ( sipCpp->isNull() )
2085 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Null geometry cannot be converted to a point." ).toUtf8().constData() );
2093 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"%1 geometry cannot be converted to a point. Only Point types are permitted." ).arg(
QgsWkbTypes::displayString( geom->
wkbType() ) ).toUtf8().constData() );
2098 sipRes = sipConvertFromNewType(
new QgsPointXY( sipCpp->asPoint() ), sipType_QgsPointXY, Py_None );
2130 const
Qgis::WkbType type = sipCpp->wkbType();
2131 if ( sipCpp->isNull() )
2133 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Null geometry cannot be converted to a polyline." ).toUtf8().constData() );
2138 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"%1 geometry cannot be converted to a polyline. Only single line or curve types are permitted." ).arg(
QgsWkbTypes::displayString( type ) ).toUtf8().constData() );
2143 const sipTypeDef *qvector_type = sipFindType(
"QVector< QgsPointXY >" );
2144 sipRes = sipConvertFromNewType(
new QgsPolylineXY( sipCpp->asPolyline() ), qvector_type, Py_None );
2175 const
Qgis::WkbType type = sipCpp->wkbType();
2176 if ( sipCpp->isNull() )
2178 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Null geometry cannot be converted to a polygon." ).toUtf8().constData() );
2183 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"%1 geometry cannot be converted to a polygon. Only single polygon or curve polygon types are permitted." ).arg(
QgsWkbTypes::displayString( type ) ).toUtf8().constData() );
2188 const sipTypeDef *qvector_type = sipFindType(
"QVector<QVector<QgsPointXY>>" );
2189 sipRes = sipConvertFromNewType(
new QgsPolygonXY( sipCpp->asPolygon() ), qvector_type, Py_None );
2218 const
Qgis::WkbType type = sipCpp->wkbType();
2219 if ( sipCpp->isNull() )
2221 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Null geometry cannot be converted to a multipoint." ).toUtf8().constData() );
2226 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"%1 geometry cannot be converted to a multipoint. Only multipoint types are permitted." ).arg(
QgsWkbTypes::displayString( type ) ).toUtf8().constData() );
2231 const sipTypeDef *qvector_type = sipFindType(
"QVector< QgsPointXY >" );
2232 sipRes = sipConvertFromNewType(
new QgsPolylineXY( sipCpp->asMultiPoint() ), qvector_type, Py_None );
2263 const
Qgis::WkbType type = sipCpp->wkbType();
2264 if ( sipCpp->isNull() )
2266 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Null geometry cannot be converted to a multilinestring." ).toUtf8().constData() );
2271 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"%1 geometry cannot be converted to a multilinestring. Only multi linestring or curves are permitted." ).arg(
QgsWkbTypes::displayString( type ) ).toUtf8().constData() );
2276 const sipTypeDef *qvector_type = sipFindType(
"QVector<QVector<QgsPointXY>>" );
2277 sipRes = sipConvertFromNewType(
new QgsMultiPolylineXY( sipCpp->asMultiPolyline() ), qvector_type, Py_None );
2308 const
Qgis::WkbType type = sipCpp->wkbType();
2309 if ( sipCpp->isNull() )
2311 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Null geometry cannot be converted to a multipolygon." ).toUtf8().constData() );
2316 PyErr_SetString( PyExc_TypeError, QStringLiteral(
"%1 geometry cannot be converted to a multipolygon. Only multi polygon or curves are permitted." ).arg(
QgsWkbTypes::displayString( type ) ).toUtf8().constData() );
2321 const sipTypeDef *qvector_type = sipFindType(
"QVector<QVector<QVector<QgsPointXY>>>" );
2322 sipRes = sipConvertFromNewType(
new QgsMultiPolygonXY( sipCpp->asMultiPolygon() ), qvector_type, Py_None );
2331 QVector<QgsGeometry> asGeometryCollection()
const;
2360 bool deleteRing(
int ringNum,
int partNum = 0 );
2367 bool deletePart(
int partNum );
2377 bool convertToMultiType();
2394 bool convertToCurvedMultiType();
2405 bool convertToSingleType();
2416 bool convertGeometryCollectionToSubclass(
Qgis::GeometryType geomType );
2429 int avoidIntersections( const QList<
QgsVectorLayer *> &avoidIntersectionsLayers,
2497 : mMessage( QStringLiteral(
"none" ) )
2507 , mHasLocation( true ) {}
2512 QString what()
const;
2522 bool hasWhere()
const;
2525 SIP_PYOBJECT __repr__();
2527 QString
str = QStringLiteral(
"<QgsGeometry.Error: %1>" ).arg( sipCpp->what() );
2528 sipRes = PyUnicode_FromString(
str.toUtf8().data() );
2535 return other.mMessage == mMessage && other.mHasLocation == mHasLocation && other.mLocation == mLocation;
2541 bool mHasLocation =
false;
2552 void validateGeometry( QVector<QgsGeometry::Error> &errors
SIP_OUT,
Qgis::GeometryValidationEngine method = Qgis::GeometryValidationEngine::QgisInternal, Qgis::GeometryValidityFlags flags = Qgis::GeometryValidityFlags() )
const;
2583 static QgsGeometry polygonize(
const QVector<QgsGeometry> &geometries );
2600 bool requiresConversionToStraightSegments()
const;
2614 void draw( QPainter &p )
const;
2659 void filterVertices( const std::function<
bool( const
QgsPoint & ) > &filter )
SIP_SKIP;
2691 static
QgsGeometry fromQPolygonF( const QPolygonF &polygon );
2723 double epsilon = 4 * std::numeric_limits<double>::epsilon() );
2735 double epsilon = 4 * std::numeric_limits<double>::epsilon() );
2748 double epsilon = 4 * std::numeric_limits<double>::epsilon() );
2770 static bool compare( PyObject *obj1, PyObject *obj2,
double epsilon = 4 * std::numeric_limits<double>::epsilon() );
2778 if ( PyList_Check( a0 ) && PyList_Check( a1 ) &&
2779 PyList_GET_SIZE( a0 ) && PyList_GET_SIZE( a1 ) )
2781 PyObject *o0 = PyList_GetItem( a0, 0 );
2782 PyObject *o1 = PyList_GetItem( a1, 0 );
2786 if ( sipCanConvertToType( o0, sipType_QgsPointXY, SIP_NOT_NONE ) &&
2787 sipCanConvertToType( o1, sipType_QgsPointXY, SIP_NOT_NONE ) &&
2788 sipCanConvertToType( a0, sipType_QVector_0100QgsPointXY, SIP_NOT_NONE ) &&
2789 sipCanConvertToType( a1, sipType_QVector_0100QgsPointXY, SIP_NOT_NONE ) )
2793 p0 =
reinterpret_cast<QgsPolylineXY *
>( sipConvertToType( a0, sipType_QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state0, &sipIsErr ) );
2794 p1 =
reinterpret_cast<QgsPolylineXY *
>( sipConvertToType( a1, sipType_QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state1, &sipIsErr ) );
2797 sipReleaseType( p0, sipType_QVector_0100QgsPointXY, state0 );
2798 sipReleaseType( p1, sipType_QVector_0100QgsPointXY, state1 );
2805 else if ( PyList_Check( o0 ) && PyList_Check( o1 ) &&
2806 PyList_GET_SIZE( o0 ) && PyList_GET_SIZE( o1 ) )
2808 PyObject *oo0 = PyList_GetItem( o0, 0 );
2809 PyObject *oo1 = PyList_GetItem( o1, 0 );
2813 if ( sipCanConvertToType( oo0, sipType_QgsPointXY, SIP_NOT_NONE ) &&
2814 sipCanConvertToType( oo1, sipType_QgsPointXY, SIP_NOT_NONE ) &&
2815 sipCanConvertToType( a0, sipType_QVector_0600QVector_0100QgsPointXY, SIP_NOT_NONE ) &&
2816 sipCanConvertToType( a1, sipType_QVector_0600QVector_0100QgsPointXY, SIP_NOT_NONE ) )
2820 p0 =
reinterpret_cast<QgsPolygonXY *
>( sipConvertToType( a0, sipType_QVector_0600QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state0, &sipIsErr ) );
2821 p1 =
reinterpret_cast<QgsPolygonXY *
>( sipConvertToType( a1, sipType_QVector_0600QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state1, &sipIsErr ) );
2824 sipReleaseType( p0, sipType_QVector_0600QVector_0100QgsPointXY, state0 );
2825 sipReleaseType( p1, sipType_QVector_0600QVector_0100QgsPointXY, state1 );
2832 else if ( PyList_Check( oo0 ) && PyList_Check( oo1 ) &&
2833 PyList_GET_SIZE( oo0 ) && PyList_GET_SIZE( oo1 ) )
2835 PyObject *ooo0 = PyList_GetItem( oo0, 0 );
2836 PyObject *ooo1 = PyList_GetItem( oo1, 0 );
2840 if ( sipCanConvertToType( ooo0, sipType_QgsPointXY, SIP_NOT_NONE ) &&
2841 sipCanConvertToType( ooo1, sipType_QgsPointXY, SIP_NOT_NONE ) &&
2842 sipCanConvertToType( a0, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, SIP_NOT_NONE ) &&
2843 sipCanConvertToType( a1, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, SIP_NOT_NONE ) )
2847 p0 =
reinterpret_cast<QgsMultiPolygonXY *
>( sipConvertToType( a0, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state0, &sipIsErr ) );
2848 p1 =
reinterpret_cast<QgsMultiPolygonXY *
>( sipConvertToType( a1, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, 0, SIP_NOT_NONE, &state1, &sipIsErr ) );
2851 sipReleaseType( p0, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, state0 );
2852 sipReleaseType( p1, sipType_QVector_0600QVector_0600QVector_0100QgsPointXY, state1 );
2885 QgsGeometry smooth(
unsigned int iterations = 1,
double offset = 0.25,
2886 double minimumDistance = -1.0,
double maxAngle = 180.0 )
const;
2932 static void convertPointList(
const QVector<QgsPointXY> &input,
QgsPointSequence &output );
2939 static void convertPointList(
const QgsPointSequence &input, QVector<QgsPointXY> &output );
2942 operator QVariant()
const
2944 return QVariant::fromValue( *
this );
2952 mutable QString mLastError;
2964 void reset( std::unique_ptr< QgsAbstractGeometry > newGeometry );
2969 QgsGeometry convertToPoint(
bool destMultipart )
const;
2971 QgsGeometry convertToLine(
bool destMultipart )
const;
2973 QgsGeometry convertToPolygon(
bool destMultipart )
const;
2986 std::unique_ptr< QgsLineString > smoothLine(
const QgsLineString &line,
unsigned int iterations = 1,
double offset = 0.25,
2987 double minimumDistance = -1,
double maxAngle = 180.0 )
const;
3000 std::unique_ptr< QgsPolygon > smoothPolygon(
const QgsPolygon &polygon,
unsigned int iterations = 1,
double offset = 0.25,
3001 double minimumDistance = -1,
double maxAngle = 180.0 )
const;
The Qgis class provides global constants for use throughout the application.
GeometryOperationResult
Success or failure of a geometry operation.
GeometryValidationEngine
Available engines for validating geometries.
GeometryType
The geometry types are used to group Qgis::WkbType in a coarse way.
WkbType
The WKB type describes the number of dimensions a geometry has.
TransformDirection
Flags for raster layer temporal capabilities.
The part_iterator class provides STL-style iterator for const references to geometry parts.
The part_iterator class provides STL-style iterator for geometry parts.
The vertex_iterator class provides STL-style iterator for vertices.
Abstract base class for all geometries.
SegmentationToleranceType
Segmentation tolerance as maximum angle or maximum difference between approximation and circle.
@ MaximumAngle
Maximum angle between generating radii (lines from arc center to output vertices)
virtual const QgsAbstractGeometry * simplifiedTypeRef() const SIP_HOLDGIL
Returns a reference to the simplest lossless representation of this geometry, e.g.
Qgis::WkbType wkbType() const SIP_HOLDGIL
Returns the WKB type of the geometry.
Custom exception class for Coordinate Reference System related exceptions.
Abstract base class for curved geometry type.
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Java-style iterator for const traversal of parts of a geometry.
A geometry engine is a low-level representation of a QgsAbstractGeometry object, optimised for use wi...
Encapsulates parameters under which a geometry operation is performed.
double gridSize() const
Returns the grid size which will be used to snap vertices of a geometry.
void setGridSize(double size)
Sets the grid size which will be used to snap vertices of a geometry.
Java-style iterator for traversal of parts of a geometry.
Error(const QString &m, const QgsPointXY &p)
bool operator==(const QgsGeometry::Error &other) const
A geometry is the spatial representation of a feature.
QVector< QgsPointXY > randomPointsInPolygon(int count, const std::function< bool(const QgsPointXY &) > &acceptPoint, unsigned long seed=0, QgsFeedback *feedback=nullptr, int maxTriesPerPoint=0) const
Returns a list of count random points generated inside a (multi)polygon geometry (if acceptPoint is s...
QVector< QgsPointXY > randomPointsInPolygon(int count, unsigned long seed=0, QgsFeedback *feedback=nullptr) const
Returns a list of count random points generated inside a (multi)polygon geometry.
static bool compare(const QgsPolylineXY &p1, const QgsPolylineXY &p2, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compares two polylines for equality within a specified tolerance.
This class offers geometry processing methods.
Line string geometry type, with support for z-dimension and m-values.
Perform transforms between map coordinates and device coordinates.
Custom exception class which is raised when an operation is not supported.
A class to represent a 2D point.
Point geometry type, with support for z-dimension and m-values.
A rectangle specified with double values.
Represents a vector layer which manages a vector based data sets.
Java-style iterator for traversal of vertices of a geometry.
static Qgis::GeometryType geometryType(Qgis::WkbType type) SIP_HOLDGIL
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
static bool isMultiType(Qgis::WkbType type) SIP_HOLDGIL
Returns true if the WKB type is a multi type.
static QString displayString(Qgis::WkbType type) SIP_HOLDGIL
Returns a non-translated display string type for a WKB type, e.g., the geometry name used in WKT geom...
static Qgis::WkbType flatType(Qgis::WkbType type) SIP_HOLDGIL
Returns the flat type for a WKB type.
double ANALYSIS_EXPORT angle(QgsPoint *p1, QgsPoint *p2, QgsPoint *p3, QgsPoint *p4)
Calculates the angle between two segments (in 2 dimension, z-values are ignored)
CORE_EXPORT QgsMeshVertex centroid(const QgsMeshFace &face, const QVector< QgsMeshVertex > &vertices)
Returns the centroid of the face.
std::unique_ptr< GEOSGeometry, GeosDeleter > unique_ptr
Scoped GEOS pointer.
const double DEFAULT_SEGMENT_EPSILON
Default snapping tolerance for segments.
#define SIP_TYPEHINT(type)
#define SIP_THROW(name,...)
QVector< QgsPoint > QgsPointSequence
Q_DECLARE_METATYPE(QgsDatabaseQueryLogEntry)
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
QVector< QgsPolylineXY > QgsPolygonXY
Polygon: first item of the list is outer ring, inner rings (if any) start from second item.
CORE_EXPORT QDataStream & operator>>(QDataStream &in, QgsGeometry &geometry)
Reads a geometry from stream in into geometry. QGIS version compatibility is not guaranteed.
CORE_EXPORT QDataStream & operator<<(QDataStream &out, const QgsGeometry &geometry)
Writes the geometry to stream out. QGIS version compatibility is not guaranteed.
QVector< QgsPolylineXY > QgsMultiPolylineXY
A collection of QgsPolylines that share a common collection of attributes.
QVector< QgsPointXY > QgsMultiPointXY
A collection of QgsPoints that share a common collection of attributes.
QVector< QgsPointXY > QgsPolylineXY
Polyline as represented as a vector of two-dimensional points.
QVector< QgsPolygonXY > QgsMultiPolygonXY
A collection of QgsPolygons that share a common collection of attributes.
QgsPointSequence QgsPolyline
Polyline as represented as a vector of points.
Utility class for identifying a unique vertex within a geometry.