Skip to content

Rework handling of panning to identified features#4591

Open
uclaros wants to merge 7 commits into
masterfrom
bugfix/better-jump-to
Open

Rework handling of panning to identified features#4591
uclaros wants to merge 7 commits into
masterfrom
bugfix/better-jump-to

Conversation

@uclaros

@uclaros uclaros commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Plan A

This PR is a rework on how we jump to geometries. It was initially just a way to mitigate a GEOS crash when identifying self-overlapping multipart geometries, but quickly evolved!

Plan B

If this is too much for a last minute change, we can avoid hitting the geos bug by slightly modifying the current approach: Perform bounding box intersections instead of geometry intersections.

diff --git a/app/inpututils.cpp b/app/inpututils.cpp
index b5573eb3..02a874e8 100644
--- a/app/inpututils.cpp
+++ b/app/inpututils.cpp
@@ -330,13 +330,12 @@ QPointF InputUtils::relevantGeometryCenterToScreenCoordinates( const QgsGeometry
 
   const QgsRectangle currentExtent = mapSettings->mapSettings().visibleExtent();
 
-  // Cut the geometry to current extent
-  const QgsGeometry currentExtentAsGeom = QgsGeometry::fromRect( currentExtent );
-  const QgsGeometry intersectedGeom = geom.intersection( currentExtentAsGeom );
+  // Cut the geometry extent to current extent
+  const QgsRectangle intersectedExtent = currentExtent.intersect( geom.boundingBox() );
 
-  if ( !intersectedGeom.isEmpty() )
+  if ( !intersectedExtent.isEmpty() )
   {
-    target = QgsPoint( intersectedGeom.boundingBox().center() );
+    target = QgsPoint( intersectedExtent.center() );
   }
   else
   {

This will change the existing behavior, eg identifying C shaped geometry that is partially visible will not recenter the map canvas to the center of the visible part of the geometry, but to the visible part of the geom bbox.

uclaros added 7 commits July 10, 2026 11:44
We will use it to jump to the highlighted feature once we know
the available area of the map that is not covered by the panel
- Use the renamed previewPanelHeight property instead of signal params
- Move all highlighting and form opening to a identifyFeature()
- Don't pan if whole feature is near visible map center
- Center feature to visible map if it fits
- Center clicked location to visible map if whole does not fit
- Add method to calculate the map extent required for a geometry to
  fit the visible part of the map canvas when covered by a drawer
- Use animated zoom when identifying features from a list and not on map
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant