QGIS API Documentation
3.26.3-Buenos Aires (65e4edfdad)
|
Go to the documentation of this file.
29 const QgsCurve *otherCurve = qgsgeometry_cast< const QgsCurve * >( &other );
33 return equals( *otherCurve );
56 if (
is3D() && closed )
60 closed &=
qgsDoubleNear( start.
z(), end.
z() ) || ( std::isnan( start.
z() ) && std::isnan( end.
z() ) );
82 points( sequence.back().back() );
109 return pointAt(
id.vertex, vertex,
id.type );
130 if ( vertex.
vertex == n - 1 )
142 if (
id.part != 0 ||
id.ring != 0 )
144 if (
id.vertex < 0 || id.vertex >=
numPoints() )
166 std::unique_ptr<QgsLineString> lineString(
curveToLine() );
171 QString kml = lineString->asKml(
precision );
221 int minCoordinateIndex = 0;
230 minCoordinateIndex = i;
235 scroll( minCoordinateIndex );
249 if ( flags == 0 && mHasCachedValidity )
252 error = mValidityFailureReason;
253 return error.isEmpty();
257 const bool res =
geos.isValid( &error, flags & Qgis::GeometryValidityFlag::AllowSelfTouchingHoles,
nullptr );
260 mValidityFailureReason = !res ? error : QString();
261 mHasCachedValidity =
true;
268 std::unique_ptr< QgsLineString > segmentized(
curveToLine() );
269 return segmentized->asQPolygonF();
281 return std::numeric_limits<double>::quiet_NaN();
296 mHasCachedValidity =
false;
297 mValidityFailureReason.clear();
310 const bool res =
pointAt( index, point, type );
317 const QVector<double> &srcX,
const QVector<double> &srcY,
const QVector<double> &srcZ,
const QVector<double> &srcM,
318 QVector<double> &outX, QVector<double> &outY, QVector<double> &outZ, QVector<double> &outM )
const
325 const bool hasZ =
is3D();
329 auto roundVertex = [hSpacing, vSpacing, dSpacing, mSpacing, hasZ, hasM, &srcX, &srcY, &srcZ, &srcM](
QgsPoint & out,
int i )
332 out.setX( std::round( srcX.at( i ) / hSpacing ) * hSpacing );
334 out.setX( srcX.at( i ) );
337 out.setY( std::round( srcY.at( i ) / vSpacing ) * vSpacing );
339 out.setY( srcY.at( i ) );
344 out.setZ( std::round( srcZ.at( i ) / dSpacing ) * dSpacing );
346 out.setZ( srcZ.at( i ) );
352 out.setM( std::round( srcM.at( i ) / mSpacing ) * mSpacing );
354 out.setM( srcM.at( i ) );
359 auto append = [hasZ, hasM, &outX, &outY, &outM, &outZ](
QgsPoint const & point )
361 outX.append( point.x() );
363 outY.append( point.y() );
366 outZ.append( point.z() );
369 outM.append( point.m() );
372 auto isPointEqual = [dSpacing, mSpacing, hasZ, hasM](
const QgsPoint & a,
const QgsPoint & b )
374 return ( a.x() == b.x() )
375 && ( a.y() == b.y() )
376 && ( !hasZ || dSpacing <= 0 || a.z() == b.z() )
377 && ( !hasM || mSpacing <= 0 || a.m() == b.m() );
386 roundVertex( last, 0 );
389 for (
int i = 1; i <
length; ++i )
391 roundVertex( current, i );
392 if ( !isPointEqual( current, last ) )
401 if ( outX.length() < 2 || (
isClosed() && outX.length() < 4 ) )
Abstract base class for curved geometry type.
vertex_iterator vertices_end() const
Returns STL-style iterator pointing to the imaginary vertex after the last vertex of the geometry.
bool nextVertex(QgsVertexId &id, QgsPoint &vertex) const override
Returns next vertex id and coordinates.
QVector< QgsRingSequence > QgsCoordinateSequence
virtual bool isRing() const SIP_HOLDGIL
Returns true if the curve is a ring.
virtual void clearCache() const
Clears any cached parameters associated with the geometry, e.g., bounding boxes.
virtual QgsPoint startPoint() const =0
Returns the starting point of the curve.
double distance(double x, double y) const SIP_HOLDGIL
Returns the Cartesian 2D distance between this point and a specified x, y coordinate.
virtual void scroll(int firstVertexIndex)=0
Scrolls the curve vertices so that they start with the vertex at the given index.
QPainterPath asQPainterPath() const override
Returns the geometry represented as a QPainterPath.
Point geometry type, with support for z-dimension and m-values.
bool operator==(const QgsAbstractGeometry &other) const override
bool addGeometry(QgsAbstractGeometry *g) override
Adds a geometry and takes ownership. Returns true in case of success.
Contains geos related utilities and functions.
int childCount() const override
Returns number of child geometries (for geometries with child geometries) or child points (for geomet...
virtual double length() const
Returns the planar, 2-dimensional length of the geometry.
Type
The WKB type describes the number of dimensions a geometry has.
void normalize() final SIP_HOLDGIL
Reorganizes the geometry into a normalized form (or "canonical" form).
SegmentationToleranceType
Segmentation tolerance as maximum angle or maximum difference between approximation and circle.
virtual int compareTo(const QgsAbstractGeometry *other) const
Comparator for sorting of geometry.
virtual void sumUpArea(double &sum) const =0
Sums up the area of the curve by iterating over the vertices (shoelace formula).
A rectangle specified with double values.
int partCount() const override
Returns count of parts contained in the geometry.
void clearCache() const override
Clears any cached parameters associated with the geometry, e.g., bounding boxes.
bool isMeasure() const SIP_HOLDGIL
Returns true if the geometry contains m values.
QString asKml(int precision=17) const override
Returns a KML representation of the geometry.
void adjacentVertices(QgsVertexId vertex, QgsVertexId &previousVertex, QgsVertexId &nextVertex) const override
Returns the vertices adjacent to a specified vertex within a geometry.
Qgis::AngularDirection orientation() const
Returns the curve's orientation, e.g.
QgsPoint childPoint(int index) const override
Returns point at index (for geometries without child geometries - i.e.
virtual void addToPainterPath(QPainterPath &path) const =0
Adds a curve to a painter path.
virtual bool pointAt(int node, QgsPoint &point, Qgis::VertexType &type) const =0
Returns the point and vertex id of a point within the curve.
virtual QgsPoint endPoint() const =0
Returns the end point of the curve.
int vertexNumberFromVertexId(QgsVertexId id) const override
Returns the vertex number corresponding to a vertex id.
virtual QPolygonF asQPolygonF() const
Returns a QPolygonF representing the points.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
vertex_iterator vertices_begin() const
Returns STL-style iterator pointing to the first vertex of the geometry.
virtual bool equals(const QgsCurve &other) const =0
Checks whether this curve exactly equals another curve.
Does vector analysis using the geos library and handles import, export, exception handling*.
virtual bool isClosed2D() const SIP_HOLDGIL
Returns true if the curve is closed.
@ CounterClockwise
Counter-clockwise direction.
static Type zmType(Type type, bool hasZ, bool hasM) SIP_HOLDGIL
Returns the modified input geometry type according to hasZ / hasM.
QgsPoint vertexAt(QgsVertexId id) const override
Returns the point corresponding to a specified vertex id.
bool isValid(QString &error, Qgis::GeometryValidityFlags flags=Qgis::GeometryValidityFlags()) const override
Checks validity of the geometry, and returns true if the geometry is valid.
QVector< QgsPointSequence > QgsRingSequence
bool snapToGridPrivate(double hSpacing, double vSpacing, double dSpacing, double mSpacing, const QVector< double > &srcX, const QVector< double > &srcY, const QVector< double > &srcZ, const QVector< double > &srcM, QVector< double > &outX, QVector< double > &outY, QVector< double > &outZ, QVector< double > &outM) const
Helper function for QgsCurve subclasses to snap to grids.
virtual bool isEmpty() const
Returns true if the geometry is empty.
QgsCoordinateSequence coordinateSequence() const override
Retrieves the sequence of geometries, rings and nodes.
Multi point geometry collection.
Abstract base class for all geometries.
bool is3D() const SIP_HOLDGIL
Returns true if the geometry is 3D and contains a z-value.
QgsCurve * clone() const override=0
Clones the geometry by performing a deep copy.
@ Clockwise
Clockwise direction.
VertexType
Types of vertex.
int vertexCount(int part=0, int ring=0) const override
Returns the number of vertices of which this geometry is built.
QVector< QgsPoint > QgsPointSequence
int ringCount(int part=0) const override
Returns the number of rings of which this geometry is built.
QgsCurve * toCurveType() const override
Returns the geometry converted to the more generic curve type.
QgsRectangle boundingBox() const override
Returns the minimal bounding box for the geometry.
Utility class for identifying a unique vertex within a geometry.
QgsAbstractGeometry * boundary() const override
Returns the closure of the combinatorial boundary of the geometry (ie the topological boundary of the...
double straightDistance2d() const
Returns the straight distance of the curve, i.e.
bool isEmpty() const override SIP_HOLDGIL
Returns true if the geometry is empty.
virtual void points(QgsPointSequence &pt) const =0
Returns a list of points within the curve.
virtual int numPoints() const =0
Returns the number of points in the curve.
QgsRectangle mBoundingBox
Cached bounding box.
QgsCurve * segmentize(double tolerance=M_PI_2/90, SegmentationToleranceType toleranceType=MaximumAngle) const override
Returns a geometry without curves.
virtual bool isClosed() const SIP_HOLDGIL
Returns true if the curve is closed.
void reserve(int size) SIP_HOLDGIL
Attempts to allocate memory for at least size geometries.
double sinuosity() const
Returns the curve sinuosity, which is the ratio of the curve length() to curve straightDistance2d().
virtual QgsLineString * curveToLine(double tolerance=M_PI_2/90, SegmentationToleranceType toleranceType=MaximumAngle) const =0
Returns a new line string geometry corresponding to a segmentized approximation of the curve.
bool operator!=(const QgsAbstractGeometry &other) const override
bool isNull() const
Test if the rectangle is null (all coordinates zero or after call to setMinimal()).
AngularDirection
Angular directions.
virtual QgsRectangle calculateBoundingBox() const
Default calculator for the minimal bounding box for the geometry.