Skip to content

Commit 4bc98ae

Browse files
committed
remove spatial index building from InspectPlanFeatures tool
1 parent e5fed5c commit 4bc98ae

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

arho_feature_template/gui/tools/inspect_plan_features_tool.py

+17-14
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
from functools import partial
44
from typing import TYPE_CHECKING
55

6-
from qgis.core import QgsFeature, QgsFeatureRequest, QgsGeometry, QgsPointXY, QgsSpatialIndex, QgsVectorLayer
6+
from qgis.core import QgsFeature, QgsFeatureRequest, QgsPointXY, QgsRectangle, QgsSpatialIndex, QgsVectorLayer
77
from qgis.gui import QgsMapCanvas, QgsMapMouseEvent, QgsMapTool, QgsRubberBand
8-
from qgis.PyQt.QtCore import QPoint, QTimer, pyqtSignal
8+
from qgis.PyQt.QtCore import QPoint, Qt, QTimer, pyqtSignal
99
from qgis.PyQt.QtGui import QColor
1010
from qgis.PyQt.QtWidgets import QMenu
11+
from qgis.utils import OverrideCursor
1112

1213
if TYPE_CHECKING:
1314
from arho_feature_template.project.layers.plan_layers import PlanFeatureLayer
@@ -66,18 +67,20 @@ def canvasReleaseEvent(self, event: QgsMapMouseEvent): # noqa: N802
6667
def query_nearby_features(self, point: QgsPointXY) -> dict[QgsVectorLayer, list[QgsFeature]]:
6768
"""Query all feature layers for features near (within `CLICK_POS_TOLERANCE`) the clicked point."""
6869
results = {}
69-
for layer in self.layers:
70-
spatial_index = self.spatial_indexes.get(layer.id())
71-
if spatial_index is None:
72-
continue
73-
74-
# Buffer around the clicked point
75-
tolerance_geom = QgsGeometry.fromPointXY(point).buffer(self.CLICK_POS_TOLERANCE, 1)
76-
candidate_ids = spatial_index.intersects(tolerance_geom.boundingBox())
77-
request = QgsFeatureRequest().setFilterFids(candidate_ids)
78-
features = [feat for feat in layer.getFeatures(request) if feat.geometry().intersects(tolerance_geom)]
79-
if features:
80-
results[layer] = features
70+
tolerance_geom = QgsRectangle(
71+
point.x() - self.CLICK_POS_TOLERANCE,
72+
point.y() - self.CLICK_POS_TOLERANCE,
73+
point.x() + self.CLICK_POS_TOLERANCE,
74+
point.y() + self.CLICK_POS_TOLERANCE,
75+
)
76+
request = QgsFeatureRequest()
77+
request.setFilterRect(tolerance_geom)
78+
request.setFlags(QgsFeatureRequest.Flag.ExactIntersect)
79+
with OverrideCursor(Qt.WaitCursor):
80+
for layer in self.layers:
81+
features = list(layer.getFeatures(request))
82+
if features:
83+
results[layer] = features
8184

8285
return results
8386

0 commit comments

Comments
 (0)