Zoom auf das Verfahrensgebiet ins Projekt-KBS umrechnen (Basis #99)
Nach dem Laden aus ALKIS oder Shape wurde mit layer.extent() im Layer-KBS gezoomt; bei anderem Projekt-KBS sprang die Karte an die falsche Stelle. Beide Stellen nutzen jetzt zoom_auf_layer aus sn_basis. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
- Bugfix: Nach dem Laden des Verfahrensgebiets (ALKIS oder Shape) sprang die Karte an die falsche Stelle, wenn ein anderes Projekt-KBS als EPSG:25833 eingestellt war. Der Zoom rechnet die Ausdehnung jetzt in das KBS der Kartenansicht um (`zoom_auf_layer` aus sn_basis, setzt sn_basis mit Basis #99 voraus) (Basis #99)
|
||||
- Neu: Grenzpunkte aus ALKIS werden nach dem Laden im ALKIS-Stil dargestellt (styles/alkis_grenzpunkte.qml), statt ungestylt zu bleiben (#53)
|
||||
- Intern: Tests von TestFlurstueckAlkis an die seit längerem geänderte Ladelogik angeglichen (Mocks zeigten noch auf die alte Ein-Query-/Zwei-Knopf-Variante), bbox-Dokumentation in flurstueck_alkis.py korrigiert (bbox wird nicht mehr ausgewertet) – keine Verhaltensänderung (Test-Audit #16)
|
||||
- Intern: Der Button "aus gewählten Gemarkungen laden" nutzt jetzt dieselbe Ladelogik wie "Flurstücke laden" (flurstueck_alkis) statt einer eigenen, parallelen Implementierung – konsolidiert drei bisher getrennte Code-Pfade zum Flurstücke-Laden auf einen (#47)
|
||||
|
||||
@@ -924,6 +924,68 @@ class TestHandleVerfShape(unittest.TestCase):
|
||||
self.assertIn(False, busy_states, "Button muss am Ende wieder freigegeben werden")
|
||||
|
||||
|
||||
class TestZoomImProjektKbs(unittest.TestCase):
|
||||
"""Zoom auf das neue Verfahrensgebiet rechnet in das KBS der Kartenansicht um (Basis #99)."""
|
||||
|
||||
def _tab(self):
|
||||
tab = TestWorkingTab._make_tab(TestWorkingTab())
|
||||
tab.setze_haken = lambda *_: None
|
||||
tab._on_verf_layer_changed = lambda *_: None
|
||||
return tab
|
||||
|
||||
def _projekt(self, mock_project_instance):
|
||||
proj = _DummyProject()
|
||||
proj.mapLayersByName = lambda _n: []
|
||||
proj.mapLayer = lambda _lid: None
|
||||
mock_project_instance.return_value = proj
|
||||
|
||||
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.zoom_auf_layer")
|
||||
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.success")
|
||||
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.apply_style")
|
||||
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.QgsProject.instance")
|
||||
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.verfahrensgebiet_alkis_komplett")
|
||||
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.iface")
|
||||
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.set_verfahrensgebiet_layer_id")
|
||||
def test_alkis_zoom_ueber_zoom_auf_layer(self, _set_id, mock_iface, mock_alkis, mock_projekt,
|
||||
_stil, _erfolg, mock_zoom):
|
||||
"""Prüft, dass nach dem Laden aus ALKIS über zoom_auf_layer auf das Verfahrensgebiet gezoomt wird und nicht mit der unumgerechneten Layer-Ausdehnung."""
|
||||
tab = self._tab()
|
||||
enriched = _DummyLayer(valid=True, layer_id="vg")
|
||||
mock_alkis.return_value = (enriched, _DummyLayer(layer_id="flst"), None, LoadStatus.FIRST)
|
||||
self._projekt(mock_projekt)
|
||||
canvas = _DummyCanvas()
|
||||
mock_iface.mapCanvas.return_value = canvas
|
||||
|
||||
tab.handle_verf_alkis()
|
||||
|
||||
mock_zoom.assert_called_once_with(enriched, canvas)
|
||||
self.assertIsNone(canvas.extent)
|
||||
|
||||
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.get_variable", return_value="VF-123")
|
||||
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.zoom_auf_layer")
|
||||
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.success")
|
||||
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.apply_style")
|
||||
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.QgsProject.instance")
|
||||
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.verfahrensgebiet_shape_komplett")
|
||||
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.iface")
|
||||
@patch("sn_verfahrensgebiet.ui.tabs.working_tab.set_verfahrensgebiet_layer_id")
|
||||
def test_shape_zoom_ueber_zoom_auf_layer(self, _set_id, mock_iface, mock_shape, mock_projekt,
|
||||
_stil, _erfolg, mock_zoom, _var):
|
||||
"""Prüft, dass nach dem Laden aus einem Shape über zoom_auf_layer auf das Verfahrensgebiet gezoomt wird und nicht mit der unumgerechneten Layer-Ausdehnung."""
|
||||
tab = self._tab()
|
||||
tab.btn_verf_shape = _DummyButton()
|
||||
enriched = _DummyLayer(valid=True, layer_id="shape_vg")
|
||||
mock_shape.return_value = (enriched, _DummyLayer(layer_id="flst"), None, LoadStatus.FIRST)
|
||||
self._projekt(mock_projekt)
|
||||
canvas = _DummyCanvas()
|
||||
mock_iface.mapCanvas.return_value = canvas
|
||||
|
||||
tab.handle_verf_shape()
|
||||
|
||||
mock_zoom.assert_called_once_with(enriched, canvas)
|
||||
self.assertIsNone(canvas.extent)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ Verwaltet die Verfahrensgebiet-Abgrenzung und ALKIS-Integration.
|
||||
from sn_basis.functions.qt_wrapper import QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QMessageBox
|
||||
from sn_basis.functions.qt_wrapper import Qt
|
||||
from sn_basis.functions import Qgis, QgsProject #QgsMessageLog
|
||||
from sn_basis.functions.qgisui_wrapper import QgsMapLayerComboBox
|
||||
from sn_basis.functions.qgisui_wrapper import QgsMapLayerComboBox, zoom_auf_layer
|
||||
from sn_basis.functions.qgiscore_wrapper import QgsMapLayerProxyModel
|
||||
from sn_basis.functions.verfahrensgebiet_manager import get_verfahrensgebiet_layer_id, set_verfahrensgebiet_layer_id
|
||||
from sn_basis.functions.dialog_wrapper import show_info_dialog, create_progress_dialog, ask_yes_no
|
||||
@@ -225,8 +225,8 @@ class WorkingTab(QWidget):
|
||||
if not project.mapLayer(enriched_layer.id()):
|
||||
project.addMapLayer(enriched_layer)
|
||||
apply_style(enriched_layer, "verfahrensgebiet.qml")
|
||||
iface.mapCanvas().setExtent(enriched_layer.extent())
|
||||
iface.mapCanvas().refresh()
|
||||
# Ausdehnung ins KBS der Kartenansicht umrechnen (Basis #99)
|
||||
zoom_auf_layer(enriched_layer, iface.mapCanvas())
|
||||
self.setze_haken(self.haken_verf, True)
|
||||
|
||||
self.verf_layer_combo.setLayer(enriched_layer)
|
||||
@@ -282,8 +282,8 @@ class WorkingTab(QWidget):
|
||||
if not project.mapLayer(enriched_layer.id()):
|
||||
project.addMapLayer(enriched_layer)
|
||||
apply_style(enriched_layer, "verfahrensgebiet.qml")
|
||||
iface.mapCanvas().setExtent(enriched_layer.extent())
|
||||
iface.mapCanvas().refresh()
|
||||
# Ausdehnung ins KBS der Kartenansicht umrechnen (Basis #99)
|
||||
zoom_auf_layer(enriched_layer, iface.mapCanvas())
|
||||
self.setze_haken(self.haken_verf, True)
|
||||
|
||||
self.verf_layer_combo.setLayer(enriched_layer)
|
||||
|
||||
Reference in New Issue
Block a user