Class: QgsPointLocator¶
Defines the interface for querying point locations.
This class offers:
query nearest vertices / edges to a point
query vertices / edges in rectangle
query areas covering a point
Works with one layer.
Note
This is an abstract class, with methods which must be implemented by a subclass.
The following methods must be implemented: acceptMatch()
Class Hierarchy¶
Base classes¶
- class qgis.core.QgsPointLocator[source]¶
Bases:
QObject- __init__(layer: QgsVectorLayer | None, destinationCrs: QgsCoordinateReferenceSystem = QgsCoordinateReferenceSystem(), transformContext: QgsCoordinateTransformContext = QgsCoordinateTransformContext(), extent: QgsRectangle | None = None)
Construct point locator for a
layer.If a valid
QgsCoordinateReferenceSystemis passed fordestinationCrsthen the locator will do the searches on data reprojected to the given CRS. For accurate reprojection it is important to set the correcttransformContextif adestinationCrsis specified. This is usually taken from the currentQgsProject.transformContext().If
extentis notNone, the locator will index only a subset of the layer which falls within that extent.- Parameters:
layer (Optional[QgsVectorLayer])
destinationCrs (
QgsCoordinateReferenceSystem= QgsCoordinateReferenceSystem())transformContext (
QgsCoordinateTransformContext= QgsCoordinateTransformContext())extent (Optional[QgsRectangle] = None)
- All = 31¶
- Area = 4¶
- Centroid = 8¶
- Edge = 2¶
- Invalid = 0¶
- LineEndpoint = 32¶
- class Match¶
Bases:
objectconstruct invalid match
QgsPointLocator.Match(t: QgsPointLocator.Type, vl: Optional[QgsVectorLayer], fid: int, dist: float, pt:
QgsPointXY, vertexIndex: int = 0, edgePoints: Optional[QgsPointXY] = None)QgsPointLocator.Match(a0: QgsPointLocator.Match)
- distance(self) float¶
for vertex / edge match units depending on what class returns it (geom.cache: layer units, map canvas snapper: dest crs units)
- Return type:
float
- edgePoints(self)¶
Only for a valid edge match - obtain endpoints of the edge
- featureId(self) int¶
The id of the feature to which the snapped geometry belongs.
- Return type:
int
- hasArea(self) bool¶
Returns
Trueif the Match is an area- Return type:
bool
- hasCentroid(self) bool¶
Returns
Trueif the Match is a centroid- Return type:
bool
- hasEdge(self) bool¶
Returns
Trueif the Match is an edge- Return type:
bool
- hasLineEndpoint(self) bool¶
Returns
Trueif the Match is a line endpoint (start or end vertex).Added in version 3.20.
- Return type:
bool
- hasMiddleSegment(self) bool¶
Returns
Trueif the Match is the middle of a segment- Return type:
bool
- hasVertex(self) bool¶
Returns
Trueif the Match is a vertex- Return type:
bool
- interpolatedPoint(self, destinationCrs: QgsCoordinateReferenceSystem = QgsCoordinateReferenceSystem()) QgsPoint¶
Convenient method to return a point on an edge with linear interpolation of the Z value. The parameter
destinationCrsdepends of where the instance of this Match is created (geom.cache: layer CRS, map canvas snapper: dest CRS)Added in version 3.10.
- Parameters:
destinationCrs (
QgsCoordinateReferenceSystem= QgsCoordinateReferenceSystem())- Return type:
- isValid(self) bool¶
- Return type:
bool
- layer(self) QgsVectorLayer | None¶
The vector layer where the snap occurred. Will be
Noneif the snap happened on an intersection.- Return type:
Optional[QgsVectorLayer]
- point(self) QgsPointXY¶
for vertex / edge match coords depending on what class returns it (geom.cache: layer coords, map canvas snapper: dest coords)
- Return type:
- type(self) QgsPointLocator.Type¶
- Return type:
- vertexIndex(self) int¶
for vertex / edge match (first vertex of the edge)
- Return type:
int
- class MatchFilter¶
Bases:
objectInterface that allows rejection of some matches in intersection queries (e.g. a match can only belong to a particular feature / match must not be a particular point). Implement the interface and pass its instance to
QgsPointLocatororQgsSnappingUtilsmethods.- acceptMatch(self, match: QgsPointLocator.Match) bool¶
- Parameters:
match (QgsPointLocator.Match)
- Return type:
bool
- MiddleOfSegment = 16¶
- class Type¶
Bases:
int
- class Types¶
- class Types(f: QgsPointLocator.Types | QgsPointLocator.Type)
- class Types(a0: QgsPointLocator.Types)
Bases:
object
- Vertex = 1¶
- cachedGeometryCount(self) int[source]¶
Returns how many geometries are cached in the index
- Return type:
int
- destinationCrs(self) QgsCoordinateReferenceSystem[source]¶
Gets destination CRS - may be an invalid
QgsCoordinateReferenceSystemif not doing OTF reprojection- Return type:
- edgesInRect(self, rect: QgsRectangle, filter: QgsPointLocator.MatchFilter | None = None, relaxed: bool = False) List[QgsPointLocator.Match][source]¶
Find edges within a specified rectangle Optional filter may discard unwanted matches. This method is either blocking or non blocking according to
relaxedparameter passededgesInRect(self, point:
QgsPointXY, tolerance: float, filter: Optional[QgsPointLocator.MatchFilter] = None, relaxed: bool = False) -> List[QgsPointLocator.Match] Override of edgesInRect that construct rectangle from a center point and tolerance This method is either blocking or non blocking according torelaxedparameter passed- Parameters:
rect (QgsRectangle)
filter (Optional[QgsPointLocator.MatchFilter] = None)
relaxed (bool = False)
- Return type:
- extent(self) QgsRectangle | None[source]¶
Gets extent of the area point locator covers - if
Nonethen it caches the whole layer- Return type:
Optional[QgsRectangle]
- init(self, maxFeaturesToIndex: int = -1, relaxed: bool = False) bool[source]¶
Prepare the index for queries. Does nothing if the index already exists. If the number of features is greater than the value of maxFeaturesToIndex, creation of index is stopped to make sure we do not run out of memory. If maxFeaturesToIndex is -1, no limits are used.
This method is either blocking or non blocking according to
relaxedparameter passed in the constructor. ifTrue, index building will be done in another thread andinit()method returns immediately.initFinished()signal will be emitted once the initialization is over.Returns
Falseif the creation of index is blocking and has been prematurely stopped due to the limit of features, otherwiseTrueSee also
- Parameters:
maxFeaturesToIndex (int = -1)
relaxed (bool = False)
- Return type:
bool
- signal initFinished[source]¶
pyqtSignal(*types, name: str = …, revision: int = …, arguments: Sequence = …) -> PYQT_SIGNAL
types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.
- isIndexing(self) bool[source]¶
Returns
Trueif the point locator is currently indexing the data. This method is useful if constructor parameterrelaxedisTrueSee also
- Return type:
bool
- layer(self) QgsVectorLayer | None[source]¶
Gets associated layer
- Return type:
Optional[QgsVectorLayer]
- nearestArea(self, point: QgsPointXY, tolerance: float, filter: QgsPointLocator.MatchFilter | None = None, relaxed: bool = False) QgsPointLocator.Match[source]¶
Find nearest area to the specified point - up to distance specified by tolerance Optional filter may discard unwanted matches. This will first perform a pointInPolygon and return first result. If no match is found and tolerance is not 0, it will return nearestEdge. This method is either blocking or non blocking according to
relaxedparameter passed- Parameters:
point (QgsPointXY)
tolerance (float)
filter (Optional[QgsPointLocator.MatchFilter] = None)
relaxed (bool = False)
- Return type:
- nearestCentroid(self, point: QgsPointXY, tolerance: float, filter: QgsPointLocator.MatchFilter | None = None, relaxed: bool = False) QgsPointLocator.Match[source]¶
Find nearest centroid to the specified point - up to distance specified by tolerance Optional filter may discard unwanted matches. This method is either blocking or non blocking according to
relaxedparameter passedAdded in version 3.12.
- Parameters:
point (QgsPointXY)
tolerance (float)
filter (Optional[QgsPointLocator.MatchFilter] = None)
relaxed (bool = False)
- Return type:
- nearestEdge(self, point: QgsPointXY, tolerance: float, filter: QgsPointLocator.MatchFilter | None = None, relaxed: bool = False) QgsPointLocator.Match[source]¶
Find nearest edge to the specified point - up to distance specified by tolerance Optional filter may discard unwanted matches. This method is either blocking or non blocking according to
relaxedparameter passed- Parameters:
point (QgsPointXY)
tolerance (float)
filter (Optional[QgsPointLocator.MatchFilter] = None)
relaxed (bool = False)
- Return type:
- nearestLineEndpoints(self, point: QgsPointXY, tolerance: float, filter: QgsPointLocator.MatchFilter | None = None, relaxed: bool = False) QgsPointLocator.Match[source]¶
Find nearest line endpoint (start or end vertex) to the specified point - up to distance specified by tolerance Optional filter may discard unwanted matches. This method is either blocking or non blocking according to
relaxedparameter passedAdded in version 3.20.
- Parameters:
point (QgsPointXY)
tolerance (float)
filter (Optional[QgsPointLocator.MatchFilter] = None)
relaxed (bool = False)
- Return type:
- nearestMiddleOfSegment(self, point: QgsPointXY, tolerance: float, filter: QgsPointLocator.MatchFilter | None = None, relaxed: bool = False) QgsPointLocator.Match[source]¶
Find nearest middle of segment to the specified point - up to distance specified by tolerance Optional filter may discard unwanted matches. This method is either blocking or non blocking according to
relaxedparameter passedAdded in version 3.12.
- Parameters:
point (QgsPointXY)
tolerance (float)
filter (Optional[QgsPointLocator.MatchFilter] = None)
relaxed (bool = False)
- Return type:
- nearestVertex(self, point: QgsPointXY, tolerance: float, filter: QgsPointLocator.MatchFilter | None = None, relaxed: bool = False) QgsPointLocator.Match[source]¶
Find nearest vertex to the specified point - up to distance specified by tolerance Optional filter may discard unwanted matches. This method is either blocking or non blocking according to
relaxedparameter passed- Parameters:
point (QgsPointXY)
tolerance (float)
filter (Optional[QgsPointLocator.MatchFilter] = None)
relaxed (bool = False)
- Return type:
- pointInPolygon(self, point: QgsPointXY, relaxed: bool = False, filter: QgsPointLocator.MatchFilter | None = None) List[QgsPointLocator.Match][source]¶
Find out if the
pointis in any polygons- Parameters:
point (QgsPointXY) – The point to check polygons against, in map coordinates
relaxed (bool = False) –
Trueif index build has to be non blockingfilter (Optional[QgsPointLocator.MatchFilter] = None) – since QGIS 3.36, Optional filter may discard unwanted matches.
Note
Parameters
filterandrelaxedare in reversed order compared to the rest of MatchList returning methods.- Return type:
- rebuildIndex(self, maxFeaturesToIndex: int = -1) bool[source]¶
- Parameters:
maxFeaturesToIndex (int = -1)
- Return type:
bool
- setExtent(self, extent: QgsRectangle | None)[source]¶
Configure extent - if not
None, it will index only that area- Parameters:
extent (Optional[QgsRectangle])
- setRenderContext(self, context: QgsRenderContext | None)[source]¶
Configure render context - if not
None, it will use to index only visible featureAdded in version 3.2.
- Parameters:
context (Optional[QgsRenderContext])
- verticesInRect(self, rect: QgsRectangle, filter: QgsPointLocator.MatchFilter | None = None, relaxed: bool = False) List[QgsPointLocator.Match][source]¶
Find vertices within a specified rectangle This method is either blocking or non blocking according to
relaxedparameter passed Optional filter may discard unwanted matches.Added in version 3.6.
verticesInRect(self, point:
QgsPointXY, tolerance: float, filter: Optional[QgsPointLocator.MatchFilter] = None, relaxed: bool = False) -> List[QgsPointLocator.Match] Override of verticesInRect that construct rectangle from a center point and tolerance This method is either blocking or non blocking according torelaxedparameter passedAdded in version 3.6.
- Parameters:
rect (QgsRectangle)
filter (Optional[QgsPointLocator.MatchFilter] = None)
relaxed (bool = False)
- Return type: