Nur noch OGC: Aenderungen speichern in der Seitenleiste, GeoJSON-Weg entfernt
Erik, 08.09.2026: "in die GUI das Speichern via OGC einbauen, GeoJSON nicht mehr verwenden." - Seitenleiste hat jetzt zwei Bloecke: "Layer" (Auswahl, laden, Aenderungen speichern) und "Darstellung" (Stil, Vorlage-Haken). - Neuer Knopf "Aenderungen speichern" -> VlnKartenPlugin.run_save_edits(): schliesst die offenen Bearbeitungssitzungen ALLER geladenen OAPIF-Layer auf einmal; ohne offene Bearbeitung kommt ein Hinweis statt einer Aktion. Zurueckgeschrieben wird ohnehin je Feature (Part 4), der Knopf beendet nur die Sitzung. - Der GeoJSON-Weg ist raus: die vier Datensatz-Knoepfe, "Aktiven Layer hochladen", DATASETS, run_load_dataset, run_upload_active_layer, _confirm_replace_existing, vln_karten/layer_manager.py sowie KartenApiClient.load_layer_complete/save_feature_collection. - Stil-Hinweise angepasst: den Stil des eigenen Verfahrens darf jeder speichern, die Vorlage nur die Gruppe MODUL_KARTENSTIL (Server-PR #565). Geprueft headless mit QGIS 4.2 gegen die Live-API (TG Test 27998): ohne Bearbeitung Hinweis, mit Aenderung Sitzung geschlossen, API zaehlt +1, Feature sichtbar, danach wieder aufgeraeumt. Panel-Test deckt die neuen Knoepfe ab. metadata.txt 0.5.0. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -127,35 +127,6 @@ class KartenApiClient:
|
||||
# Karten-Layer (die konkreten Pfade stehen in plugin.DATASETS)
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
def load_layer_complete(self, layer_key, vkz, page_size=2000):
|
||||
"""Lädt ALLE Objekte eines Layers für eine VKZ aus KARTE_OBJEKT.
|
||||
|
||||
Nutzt wie das Web-GIS (0_map, db_p41) den Listen-Endpunkt
|
||||
/maps/<layer>?vkz=…, aber mit limit/offset-Paging, bis keine
|
||||
weitere Seite mehr kommt — so ist der Abruf auch bei mehr als
|
||||
2000 Objekten garantiert vollständig."""
|
||||
from urllib.parse import quote
|
||||
|
||||
features = []
|
||||
offset = 0
|
||||
while True:
|
||||
data = self._request(
|
||||
"GET",
|
||||
"/maps/%s?vkz=%s&limit=%d&offset=%d"
|
||||
% (quote(str(layer_key)), quote(str(vkz)), page_size, offset),
|
||||
)
|
||||
if not isinstance(data, dict) or data.get("type") != "FeatureCollection":
|
||||
raise ApiError(
|
||||
"Antwort von /maps/%s ist keine GeoJSON FeatureCollection."
|
||||
% layer_key
|
||||
)
|
||||
page = data.get("features", [])
|
||||
features.extend(page)
|
||||
if len(page) < page_size:
|
||||
break
|
||||
offset += page_size
|
||||
return {"type": "FeatureCollection", "features": features}
|
||||
|
||||
def load_feature_collection(self, path):
|
||||
"""Lädt einen Layer als GeoJSON FeatureCollection (dict)."""
|
||||
data = self._request("GET", path)
|
||||
@@ -171,15 +142,6 @@ class KartenApiClient:
|
||||
"Antwort von %s ist keine GeoJSON FeatureCollection." % path
|
||||
)
|
||||
|
||||
def save_feature_collection(self, path, feature_collection):
|
||||
"""Schreibt eine GeoJSON FeatureCollection zurück an die API
|
||||
(PUT ersetzt den kompletten Layer der jeweiligen VKZ)."""
|
||||
return self._request("PUT", path, payload=feature_collection)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Intern
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
def _request(self, method, path, payload=None, with_auth=True):
|
||||
if with_auth and not self.is_authenticated:
|
||||
raise AuthError("Nicht angemeldet — bitte zuerst einloggen.")
|
||||
|
||||
Reference in New Issue
Block a user