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)
|
- 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: 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)
|
- 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")
|
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__":
|
if __name__ == "__main__":
|
||||||
unittest.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 QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QMessageBox
|
||||||
from sn_basis.functions.qt_wrapper import Qt
|
from sn_basis.functions.qt_wrapper import Qt
|
||||||
from sn_basis.functions import Qgis, QgsProject #QgsMessageLog
|
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.qgiscore_wrapper import QgsMapLayerProxyModel
|
||||||
from sn_basis.functions.verfahrensgebiet_manager import get_verfahrensgebiet_layer_id, set_verfahrensgebiet_layer_id
|
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
|
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()):
|
if not project.mapLayer(enriched_layer.id()):
|
||||||
project.addMapLayer(enriched_layer)
|
project.addMapLayer(enriched_layer)
|
||||||
apply_style(enriched_layer, "verfahrensgebiet.qml")
|
apply_style(enriched_layer, "verfahrensgebiet.qml")
|
||||||
iface.mapCanvas().setExtent(enriched_layer.extent())
|
# Ausdehnung ins KBS der Kartenansicht umrechnen (Basis #99)
|
||||||
iface.mapCanvas().refresh()
|
zoom_auf_layer(enriched_layer, iface.mapCanvas())
|
||||||
self.setze_haken(self.haken_verf, True)
|
self.setze_haken(self.haken_verf, True)
|
||||||
|
|
||||||
self.verf_layer_combo.setLayer(enriched_layer)
|
self.verf_layer_combo.setLayer(enriched_layer)
|
||||||
@@ -282,8 +282,8 @@ class WorkingTab(QWidget):
|
|||||||
if not project.mapLayer(enriched_layer.id()):
|
if not project.mapLayer(enriched_layer.id()):
|
||||||
project.addMapLayer(enriched_layer)
|
project.addMapLayer(enriched_layer)
|
||||||
apply_style(enriched_layer, "verfahrensgebiet.qml")
|
apply_style(enriched_layer, "verfahrensgebiet.qml")
|
||||||
iface.mapCanvas().setExtent(enriched_layer.extent())
|
# Ausdehnung ins KBS der Kartenansicht umrechnen (Basis #99)
|
||||||
iface.mapCanvas().refresh()
|
zoom_auf_layer(enriched_layer, iface.mapCanvas())
|
||||||
self.setze_haken(self.haken_verf, True)
|
self.setze_haken(self.haken_verf, True)
|
||||||
|
|
||||||
self.verf_layer_combo.setLayer(enriched_layer)
|
self.verf_layer_combo.setLayer(enriched_layer)
|
||||||
|
|||||||
Reference in New Issue
Block a user