Schneller laden: Antworten vorwaermen, Gruppen auswaehlen

Der OAPIF-Provider fragt je Sammlung nacheinander Sammlung, Schema, Stil,
OPTIONS und die erste Seite ab — bei 27 Sammlungen dauert das Anlegen 20,5 s
(gemessen 08.09.2026, Berbisdorf).

- ogc_layers.vorwaermen(): holt Landing, OpenAPI, Conformance, Sammlung, Schema
  und Stil vorab und gleichzeitig ueber Qts Ereignisschleife (unter 1,5 s fuer
  84 Antworten). layer_hinzufuegen ruft es vor dem ersten Layer auf. Ergebnis
  14,2 s statt 20,5 s, und die Zeit schwankt deutlich weniger.
- Seitenleiste: drei Haken (Verfahren / Vorerhebung / Massnahmenblaetter) waehlen
  aus, was geladen wird. Nur Verfahren 11,1 s (21 Layer), nur Vorerhebung oder
  nur Massnahmenblaetter je 1,6 s (3 Layer).

Bewusst NICHT parallel: ein in einem Python-Thread gebauter OAPIF-Layer laesst
sich zwar in 0,9 s erzeugen, stuerzt aber beim ersten getFeatures() ab
(Segfault, gemessen) — der Provider gehoert dem Thread, der ihn gebaut hat.

tools/headless_panel_test.py prueft die neue Auswahl mit. metadata.txt 0.4.0.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
erik
2026-09-08 09:32:56 +02:00
co-authored by Claude Fable 5.1
parent b97f066b49
commit 1680b4ede3
6 changed files with 116 additions and 8 deletions
+21 -4
View File
@@ -108,9 +108,21 @@ class VlnPanel(QDockWidget):
kasten = QGroupBox("OGC API (empfohlen)")
lage = QVBoxLayout(kasten)
lage.setSpacing(6)
self.ogc_knopf = QPushButton("Alle Layer laden")
self.ogc_knopf.setToolTip("Verfahrenslayer, Vorerhebung und Maßnahmenblätter als "
"editierbare OAPIF-Layer; QGIS schreibt Änderungen direkt zurück")
# Jede Sammlung kostet beim Anlegen rund eine halbe Sekunde (der Provider fragt
# Sammlung, Schema, Stil, OPTIONS und die erste Seite ab). Wer nur einen Teil braucht,
# ist mit der Auswahl deutlich schneller: 27 Layer ~16 s, die Vorerhebung allein ~2 s.
lage.addWidget(_klein(QLabel("Was geladen wird:")))
self.gruppen_haken = {}
for schluessel, beschriftung in (("Verfahren", "Verfahren (Umring, Plan 41, KAS …)"),
("Vorerhebung", "Vorerhebung"),
("Maßnahmenblätter", "Maßnahmenblätter")):
haken = QCheckBox(beschriftung)
haken.setChecked(True)
lage.addWidget(haken)
self.gruppen_haken[schluessel] = haken
self.ogc_knopf = QPushButton("Layer laden")
self.ogc_knopf.setToolTip("Die angehakten Sammlungen als editierbare OAPIF-Layer; "
"QGIS schreibt Änderungen direkt zurück")
self.ogc_knopf.clicked.connect(lambda: self._ruf("load_ogc"))
self.stil_knopf = QPushButton("Stil des aktiven Layers speichern")
self.stil_knopf.setToolTip("Braucht die Gruppe MODUL_KARTENSTIL (Verbandsmitarbeiter "
@@ -160,7 +172,8 @@ class VlnPanel(QDockWidget):
self.login_knopf.setVisible(not angemeldet)
self.logout_knopf.setVisible(angemeldet)
for widget in (self.filter_feld, self.combo, self.ogc_knopf, self.stil_knopf,
self.vorlage_haken, self.upload_knopf, *self.datensatz_knoepfe):
self.vorlage_haken, self.upload_knopf, *self.gruppen_haken.values(),
*self.datensatz_knoepfe):
widget.setEnabled(angemeldet)
if not angemeldet:
self._stumm = True
@@ -190,6 +203,10 @@ class VlnPanel(QDockWidget):
def als_vorlage(self):
return self.vorlage_haken.isChecked()
def gewaehlte_gruppen(self):
"""Namen der angehakten Layer-Gruppen (wie in ``ogc_layers.GRUPPEN``)."""
return {name for name, haken in self.gruppen_haken.items() if haken.isChecked()}
def waehle_vkz(self, vkz):
"""Setzt die Auswahl ohne Rückruf (Wiederherstellen aus der Projektdatei)."""
self._stumm = True