16#ifndef QGSPOINTLOCATOR_H 
   17#define QGSPOINTLOCATOR_H 
   85  class IStorageManager;
 
  162      MiddleOfSegment = 1 << 4, 
 
  163      LineEndpoint = 1 << 5, 
 
  164      All = Vertex | Edge | Area | Centroid | MiddleOfSegment 
 
  167    Q_DECLARE_FLAGS( Types, Type )
 
  182    bool init( 
int maxFeaturesToIndex = -1, 
bool relaxed = 
false );
 
  185    bool hasIndex() 
const;
 
  198          , mVertexIndex( vertexIndex )
 
  202            mEdgePoints[0] = edgePoints[0];
 
  203            mEdgePoints[1] = edgePoints[1];
 
  209        bool isValid()
 const { 
return mType != Invalid; }
 
  213        bool hasEdge()
 const { 
return mType == Edge; }
 
  217        bool hasArea()
 const { 
return mType == Area; }
 
  257          pt1 = mEdgePoints[0];
 
  258          pt2 = mEdgePoints[1];
 
  274            const QgsGeometry geom = mLayer->getGeometry( mFid );
 
  280                snappedPoint = transform.
transform( snappedPoint );
 
  284                QgsDebugError( QStringLiteral( 
"transformation to layer coordinate failed" ) );
 
  299                point.
transform( transform, Qgis::TransformDirection::Reverse );
 
  303                QgsDebugError( QStringLiteral( 
"transformation to destination coordinate failed" ) );
 
  314          return mType == other.
mType &&
 
  315                 mDist == other.
mDist &&
 
  318                 mFid == other.
mFid &&
 
  332        int mVertexIndex = 0; 
 
  341    typedef QList<QgsPointLocator::Match> 
MatchList;
 
  462    void waitForIndexingFinished();
 
  474    bool rebuildIndex( 
int maxFeaturesToIndex = -1 );
 
  479    void onInitTaskFinished();
 
  483    void onAttributeValueChanged( 
QgsFeatureId fid, 
int idx, 
const QVariant &value );
 
  491    bool prepare( 
bool relaxed );
 
  494    std::unique_ptr< SpatialIndex::IStorageManager > mStorage;
 
  496    QHash<QgsFeatureId, QgsGeometry *> mGeoms;
 
  497    std::unique_ptr< SpatialIndex::ISpatialIndex > mRTree;
 
  500    bool mIsEmptyLayer = 
false;
 
  506    std::unique_ptr< QgsRectangle > mExtent;
 
  508    std::unique_ptr<QgsRenderContext> mContext;
 
  509    std::unique_ptr<QgsFeatureRenderer> mRenderer;
 
  510    std::unique_ptr<QgsVectorLayerFeatureSource> mSource;
 
  511    int mMaxFeaturesToIndex = -1;
 
  512    bool mIsIndexing = 
false;
 
  513    bool mIsDestroying = 
false;
 
  516    QPointer<QgsPointLocatorInitTask> mInitTask;
 
  525    friend class QgsPointLocatorInitTask;
 
  526    friend class TestQgsPointLocator;
 
This class represents a coordinate reference system (CRS).
 
Contains information about the context in which a coordinate transform is executed.
 
Custom exception class for Coordinate Reference System related exceptions.
 
static QgsPoint closestPoint(const QgsAbstractGeometry &geometry, const QgsPoint &point)
Returns the nearest point on a segment of a geometry for the specified point.
 
A geometry is the spatial representation of a feature.
 
QgsPoint vertexAt(int atVertex) const
Returns coordinates of a vertex.
 
bool isEmpty() const
Returns true if the geometry is empty (eg a linestring with no vertices, or a collection with no geom...
 
Line string geometry type, with support for z-dimension and m-values.
 
Helper class used when traversing the index with areas - builds a list of matches.
 
Helper class used when traversing the index looking for centroid - builds a list of matches.
 
Helper class used when traversing the index looking for edges - builds a list of matches.
 
Helper class used when traversing the index looking for middle segment - builds a list of matches.
 
Helper class used when traversing the index looking for centroid - builds a list of matches.
 
Helper class used when traversing the index looking for edges - builds a list of matches.
 
Helper class used when traversing the index looking for line endpoints (start or end vertex) - builds...
 
Helper class used when traversing the index looking for middle segment - builds a list of matches.
 
Helper class used when traversing the index looking for vertices - builds a list of matches.
 
Helper class used when traversing the index looking for vertices - builds a list of matches.
 
The class defines interface for querying point location:
 
int cachedGeometryCount() const
Returns how many geometries are cached in the index.
 
QgsVectorLayer * layer() const
Gets associated layer.
 
class QList< QgsPointLocator::Match > MatchList
 
bool isIndexing() const
Returns true if the point locator is currently indexing the data.
 
const QgsRectangle * extent() const
Gets extent of the area point locator covers - if nullptr then it caches the whole layer.
 
void initFinished(bool ok)
Emitted whenever index has been built and initialization is finished.
 
Type
The type of a snap result or the filter type for a snap request.
 
A class to represent a 2D point.
 
Point geometry type, with support for z-dimension and m-values.
 
void transform(const QgsCoordinateTransform &ct, Qgis::TransformDirection d=Qgis::TransformDirection::Forward, bool transformZ=false) override SIP_THROW(QgsCsException)
Transforms the geometry using a coordinate transform.
 
A rectangle specified with double values.
 
Contains information about the context of a rendering operation.
 
Partial snapshot of vector layer's state (only the members necessary for access to features)
 
Represents a vector layer which manages a vector based data sets.
 
QSet< QgsFeatureId > QgsFeatureIds
 
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
 
#define QgsDebugError(str)
 
Interface that allows rejection of some matches in intersection queries (e.g.
 
virtual bool acceptMatch(const QgsPointLocator::Match &match)=0
 
virtual ~MatchFilter()=default
 
QgsFeatureId featureId() const
The id of the feature to which the snapped geometry belongs.
 
bool hasCentroid() const
Returns true if the Match is a centroid.
 
QgsVectorLayer * layer() const
The vector layer where the snap occurred.
 
QgsPoint interpolatedPoint(const QgsCoordinateReferenceSystem &destinationCrs=QgsCoordinateReferenceSystem()) const
Convenient method to return a point on an edge with linear interpolation of the Z value.
 
double distance() const
for vertex / edge match units depending on what class returns it (geom.cache: layer units,...
 
QgsPointXY mMiddleOfSegment
 
QgsPointXY point() const
for vertex / edge match coords depending on what class returns it (geom.cache: layer coords,...
 
bool hasEdge() const
Returns true if the Match is an edge.
 
void edgePoints(QgsPointXY &pt1, QgsPointXY &pt2) const
Only for a valid edge match - obtain endpoints of the edge.
 
bool hasArea() const
Returns true if the Match is an area.
 
Match()=default
construct invalid match
 
Match(QgsPointLocator::Type t, QgsVectorLayer *vl, QgsFeatureId fid, double dist, const QgsPointXY &pt, int vertexIndex=0, QgsPointXY *edgePoints=nullptr)
 
QgsPointLocator::Type type() const
 
QgsPointXY mEdgePoints[2]
 
bool hasLineEndpoint() const
Returns true if the Match is a line endpoint (start or end vertex).
 
bool hasMiddleSegment() const
Returns true if the Match is the middle of a segment.
 
int vertexIndex() const
for vertex / edge match (first vertex of the edge)
 
bool hasVertex() const
Returns true if the Match is a vertex.
 
bool operator==(const QgsPointLocator::Match &other) const