{
  "format": "geolibre-language-pack",
  "formatVersion": 1,
  "scope": "whitebox",
  "locale": "de",
  "name": "Deutsches Whitebox-Sprachpaket",
  "updatedAt": "2026-09-25T16:57:55.121Z",
  "translations": {
    "processing": {
      "toolMeta": {
        "whitebox": {
          "build_object_hierarchy_multiscale": {
            "name": "Objekthierarchie multiskalig aufbauen",
            "description": "Hierarchisches Objektnetzwerk, das durch iterative Aggregation über mehrere Segmentierungsmaßstäbe aufgebaut wird, wobei feinere Segmente anhand spektraler Ähnlichkeit und räumlicher Nachbarschaft schrittweise zusammengeführt werden. Erstellt eine Baumstruktur, in der Blattknoten feinmaßstäbige Segmente und die Wurzel das gesamte Bild repräsentieren. Enthaltensein-Beziehungen kodieren Eltern-Kind-Objekthierarchien (Teil-Ganzes) und ermöglichen Multiresolutionsanalysen sowie maßstabsadaptive Objektabfragen über die Hierarchieebenen hinweg. Hauptmerkmale: mehrskalige Segmentierungshierarchie; verfolgt Teil-Ganzes-Beziehungen; unterstützt verschachtelte Objektabfragen; ermöglicht maßstabsadaptive Analysen; speichereffiziente hierarchische Darstellung; erleichtert kaskadierte Klassifikation. Anwendungsfälle: hierarchische Landbedeckungskartierung; Extraktion von Gebäudekomplexen aus Komponenten; Erkennung landwirtschaftlicher Felder; Analyse von Vegetationsschichten; Abgrenzung städtischer Quartiere; Feuchtgebietskartierung mit Klassifikation von Teilkomponenten. Interpretation der Ausgabe: Die Ausgabe ist eine hierarchische Objektdatenbank, die eine maßstabsabhängige Struktur kodiert. Objekte werden in bestimmten Maßstäben abgefragt; Zwischenmaßstäbe zeigen Übergangsmaßstäbe, die Detail und Generalisierung abwägen. Eltern-Kind-Beziehungen zeigen die kompositorische Struktur. Statistische Verteilungen je Maßstabsebene charakterisieren Größen- und Formeigenschaften der Objekte auf jeder Hierarchieebene und ermöglichen die Wahl einer maßstabsoptimalen Klassifikationsstrategie.",
            "params": {
              "coarse_segments": {
                "label": "Grobe Segmente",
                "description": "Raster der groben Segmente."
              },
              "fine_segments": {
                "label": "Feine Segmente",
                "description": "Raster der feinen Segmente."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Hierarchie-CSV."
              }
            }
          },
          "classify_objects_ensemble_pro": {
            "name": "Objekte mit Ensemble klassifizieren (Pro)",
            "description": "Führt eine Objektklassifikationskonfiguration im Ensemble-Stil aus, die auf höhere Stabilität über heterogene Szenen hinweg abgestimmt ist.",
            "params": {
              "features": {
                "label": "Objekte",
                "description": "Eingabe-CSV mit Objektmerkmalen (muss segment_id und numerische Merkmalsspalten enthalten)."
              },
              "training": {
                "label": "Training",
                "description": "Trainings-CSV mit den Spalten segment_id und Klassenlabel."
              },
              "segment_id_field": {
                "label": "Segment-ID-Feld",
                "description": "Name des Segment-ID-Felds (Standard segment_id)."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Klassenlabelfeld in der Trainings-CSV (Standard class)."
              },
              "n_trees": {
                "label": "Anzahl Bäume",
                "description": "Anzahl der Bäume (Standard 200)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Vorhersage-CSV."
              }
            }
          },
          "classify_objects_random_forest": {
            "name": "Objekte mit Random Forest klassifizieren",
            "description": "Trainiert einen Ensemble-Random-Forest-Klassifikator an beschrifteten Segment-Trainingsstichproben mit spektralen, morphologischen und Texturmerkmalen als Prädiktoren. Erstellt mehrere Entscheidungsbäume durch Bootstrap-Stichproben und Merkmalsrandomisierung und aggregiert die Vorhersagen anschließend per Mehrheitsentscheid. Die Klassifikation arbeitet mit Merkmalsvektoren je Segment und weist Objektklassenlabels probabilistisch anhand des Ensemble-Konsenses zu, was eine robuste Mehrklassen-Objektkategorisierung aus OBIA-Merkmalen ermöglicht. Zu den Hauptmerkmalen gehören Ensemble-Lernen, das mehrere Entscheidungsbäume für eine robuste Klassifikation kombiniert, die Verarbeitung hochdimensionaler Merkmalsräume, wie sie für multispektrale OBIA typisch sind, Konfidenz- und Wahrscheinlichkeitsschätzungen der Klassifikation, eine Rangfolge der Merkmalswichtigkeit zur Identifikation trennscharfer Eigenschaften, die natürliche Behandlung nichtlinearer Merkmalsinteraktionen sowie Robustheit gegenüber Merkmalsrauschen und Redundanz. Die Anwendungsfälle reichen von der Mehrklassen-Landbedeckungsklassifikation aus OBIA-Segmenten (städtisch, landwirtschaftlich, Wald, Wasser) über die überwachte Klassifikation auf Objektebene, verfeinert durch Auswahl von Trainingsstichproben, die Klassifikation von Veränderungen über zeitliche Segmentierungssequenzen und die hierarchische Klassifikation (grobe Habitattypen, verfeinert zu feinen Kategorien) bis zur Integration manueller Trainingsstichproben aus der visuellen Interpretation. Das ausgegebene vorhergesagte Klassenlabel bezeichnet den primären Objekttyp; die Konfidenzwahrscheinlichkeit gibt die Klassifikationssicherheit an; eine geringe Konfidenz deutet auf mehrdeutige Zwischenobjekte hin; die Merkmalswichtigkeit zeigt, welche spektralen/morphologischen Eigenschaften die Klassifikationsentscheidungen bestimmen; die Klassifikationskarte stellt die Verteilung der Objekttypen direkt dar; Verwechslungen zwischen ähnlichen Klassen geben Hinweise zur Verfeinerung des Trainings; die probabilistische Ausgabe ermöglicht die Quantifizierung der Unsicherheit.",
            "params": {
              "features": {
                "label": "Objekte",
                "description": "Eingabe-CSV mit Objektmerkmalen (muss segment_id und numerische Merkmalsspalten enthalten)."
              },
              "training": {
                "label": "Training",
                "description": "Trainings-CSV mit den Spalten segment_id und Klassenlabel."
              },
              "segment_id_field": {
                "label": "Segment-ID-Feld",
                "description": "Name des Segment-ID-Felds (Standard segment_id)."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Klassenlabelfeld in der Trainings-CSV (Standard class)."
              },
              "n_trees": {
                "label": "Anzahl Bäume",
                "description": "Anzahl der Bäume (Standard 200)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Vorhersage-CSV."
              }
            }
          },
          "classify_objects_rules_basic": {
            "name": "Objekte nach Regeln klassifizieren (einfach)",
            "description": "Wendet eine transparente regelbasierte Objektklassifikation anhand einer CSV-Datei mit Regeln aus Merkmal, Operator und Schwellenwert an. Vollständig interpretierbare Entscheidungslogik für Arbeitsabläufe von Fachexperten und die Einhaltung regulatorischer Vorgaben.",
            "params": {
              "features": {
                "label": "Objekte",
                "description": "Eingabe-CSV mit Objektmerkmalen."
              },
              "rules": {
                "label": "Regeln",
                "description": "Regel-CSV mit den Spalten: feature, op, value, class, [priority]."
              },
              "default_class": {
                "label": "Standardklasse",
                "description": "Rückfallklasse, wenn keine Regel zutrifft."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Vorhersage-CSV."
              }
            }
          },
          "classify_objects_rules_hierarchical": {
            "name": "Objekte nach hierarchischen Regeln klassifizieren",
            "description": "Wendet eine hierarchische regelbasierte Objektklassifikation an; verwendet derzeit geordnete Regeln mit deterministischem Rückfallverhalten.",
            "params": {
              "features": {
                "label": "Objekte",
                "description": "Eingabe-CSV mit Objektmerkmalen."
              },
              "rules": {
                "label": "Regeln",
                "description": "Regel-CSV mit den Spalten: feature, op, value, class, [priority]."
              },
              "default_class": {
                "label": "Standardklasse",
                "description": "Rückfallklasse, wenn keine Regel zutrifft."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Vorhersage-CSV."
              }
            }
          },
          "classify_objects_svm": {
            "name": "Objekte mit SVM klassifizieren",
            "description": "Klassifiziert Objekte mit einem SVM-artigen Arbeitsablauf (umgesetzt über die robusten Standardeinstellungen des Objektklassifikations-Backends).",
            "params": {
              "features": {
                "label": "Objekte",
                "description": "Eingabe-CSV mit Objektmerkmalen (muss segment_id und numerische Merkmalsspalten enthalten)."
              },
              "training": {
                "label": "Training",
                "description": "Trainings-CSV mit den Spalten segment_id und Klassenlabel."
              },
              "segment_id_field": {
                "label": "Segment-ID-Feld",
                "description": "Name des Segment-ID-Felds (Standard segment_id)."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Klassenlabelfeld in der Trainings-CSV (Standard class)."
              },
              "n_trees": {
                "label": "Anzahl Bäume",
                "description": "Anzahl der Bäume (Standard 200)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Vorhersage-CSV."
              }
            }
          },
          "evaluate_object_classification_accuracy": {
            "name": "Genauigkeit der Objektklassifikation bewerten",
            "description": "Berechnet Kennzahlen der Klassifikationsgenauigkeit, indem vorhergesagte Objektlabels mit Referenz-Ground-Truth- oder Validierungslabels verglichen werden. Erstellt eine Konfusionsmatrix, die Muster der Übereinstimmung und Nichtübereinstimmung je Klasse dokumentiert, und berechnet die Gesamtgenauigkeit (Anteil korrekter Vorhersagen), die Herstellergenauigkeit je Klasse (Erkennungsrate), die Nutzergenauigkeit (Zuverlässigkeit), den F1-Wert (harmonisches Mittel), die Kappa-Statistik (zufallskorrigierte Übereinstimmung) sowie eine klassenspezifische Fehleranalyse zur Identifikation systematischer Fehlklassifikationsmuster. Zu den Hauptmerkmalen gehören eine umfassende Genauigkeitsbewertung über alle Klassen, Leistungskennzahlen je Klasse für klassenspezifische Diagnosen, eine Konfusionsmatrix, die systematische Fehlklassifikationsmuster aufdeckt, statistische Signifikanzprüfung über den Kappa-Koeffizienten, die natürliche Behandlung unausgewogener Klassenverteilungen sowie die Identifikation unzureichender Trainingsdaten. Anwendungsfälle sind die Validierung von Klassifikationsmodellen und die Quantifizierung ihrer Leistung, der Vergleich konkurrierender Klassifikationsansätze und Parameter, die Identifikation problematischer Objektklassen, die zusätzliches Training erfordern, die Bewertung der Eignung einer Klassifikation für operative Anwendungen, genauigkeitsbasierte Modellauswahl und Hyperparameter-Optimierung, Qualitätssicherung in automatisierten Kartierungsabläufen sowie die Berichterstattung standardisierter Genauigkeitskennzahlen für Peer-Reviews. Die ausgegebene Gesamtgenauigkeit steht für die Klassifikationszuverlässigkeit über alle Objekte; die Herstellergenauigkeit gibt die Vollständigkeit der Erkennung je Klasse an; die Nutzergenauigkeit gibt die Zuverlässigkeit der Vorhersage an; ein hoher Kappa-Wert (>0.8) zeigt eine starke, über den Zufall hinausgehende Übereinstimmung; die Konfusionsmatrix zeigt, welche Klassen miteinander verwechselt werden; eine dominante Diagonale weist auf eine starke Klassentrennung hin; Einträge außerhalb der Diagonale lokalisieren die Quellen der Fehlklassifikation; klassenspezifische Kennzahlen leiten gezielte Verbesserungen des Trainings an.",
            "params": {
              "predictions": {
                "label": "Vorhersagen",
                "description": "Vorhersage-CSV mit segment_id und predicted_class."
              },
              "reference": {
                "label": "Referenz",
                "description": "Referenz-CSV mit segment_id und class."
              },
              "segment_id_field": {
                "label": "Segment-ID-Feld",
                "description": "Name des Segment-ID-Felds (Standard segment_id)."
              },
              "predicted_field": {
                "label": "Vorhersagefeld",
                "description": "Feld der vorhergesagten Klasse (Standard predicted_class)."
              },
              "reference_field": {
                "label": "Referenzfeld",
                "description": "Feld der Referenzklasse (Standard class)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des JSON-Berichts."
              }
            }
          },
          "evaluate_segmentation_quality_pro": {
            "name": "Segmentierungsqualität bewerten (Pro)",
            "description": "Berechnet Diagnosen der Segmentierungsqualität, einschließlich Statistiken zur Objektanzahl und zur Überlappung dominanter Labels.",
            "params": {
              "segments": {
                "label": "Segmente",
                "description": "Eingaberaster mit Segmentlabels."
              },
              "reference": {
                "label": "Referenz",
                "description": "Optionales Referenzlabelraster für überlappungsbasierte Diagnosen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des JSON-Berichts."
              }
            }
          },
          "image_segmentation": {
            "name": "Bildsegmentierung",
            "description": "Segmentiert mehrbandige Rasterstapel mittels saatpunktbasiertem Regionenwachstum in zusammenhängende homogene Regionen.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern (eines je Band)."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Distanzschwellenwert für das Regionenwachstum im standardisierten Merkmalsraum (Standard 0.5)."
              },
              "steps": {
                "label": "Schritte",
                "description": "Anzahl der Seed-Prioritätsbänder (Standard 10)."
              },
              "min_area": {
                "label": "Mindestfläche",
                "description": "Optionale Mindestfläche einer Region für die Bereinigung nach dem Zusammenführen (Standard 4)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "image_slider": {
            "name": "Bildregler",
            "description": "Image Slider ist ein interaktives Visualisierungswerkzeug, das über verschiebbare horizontale oder vertikale Überlagerungstrenner einen direkten pixelgenauen Vergleich zwischen koregistrierten Rasterdatensätzen ermöglicht. Algorithmus: hält zwei ausgerichtete Rasterdatensätze im Speicher, rendert eine kombinierte Ansicht mit einstellbarer Trennerposition, die die Sichtbarkeit der Layer steuert; die Benutzerinteraktion passt den Trenner dynamisch an und erzeugt so einen Split-Screen-Effekt. Unterstützt sowohl horizontale als auch vertikale Teilungsausrichtungen. Hauptmerkmale: interaktiver Echtzeitvergleich, Visualisierung in voller Auflösung, intuitive Benutzeroberfläche, die keine analytischen Kenntnisse erfordert, funktioniert mit multispektralen und indizierten Rastern, unterstützt große Datensätze durch effizientes Rendering. Fähigkeiten: Visualisierung von Veränderungen, Vorher-Nachher-Vergleich, multitemporale Analyse, Bewertung der radiometrischen Normalisierung, visuelle Prüfung der Klassifikationsgenauigkeit. Anwendungsfälle: Erkennung von Bildveränderungen zwischen Zeitpunkten, Vergleich von Klassifikationsergebnissen mit Referenzdaten, Bewertung der Wirksamkeit der Vorverarbeitung, visuelle Veränderungserkennung in Zeitreihenanalysen. Anwendungen: Schadensbewertung in der Katastrophenhilfe, Überwachung der Zersiedelung, Erkennung von Waldstörungen, Überwachung landwirtschaftlicher Veränderungen, Qualitätskontrolle von Bildverarbeitungsergebnissen. Interpretation der Ausgabe: Visuelle Unterschiede zeigen Ausmaß und Ort der Veränderung; scharfe Kanten weisen auf deutliche Veränderungen hin; allmähliche Übergänge deuten auf Registrierungsungenauigkeiten oder zeitliche Abstufungen hin; systematische Unterschiede über das gesamte Bild zeigen systematische Verarbeitungsartefakte.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Pfad des linken Bildrasters oder typisiertes Rasterobjekt."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Pfad des rechten Bildrasters oder typisiertes Rasterobjekt."
              },
              "label1": {
                "label": "Beschriftung 1",
                "description": "Optionale Beschriftung für das linke Bild."
              },
              "left_palette": {
                "label": "Linke Palette",
                "description": "Palette für das linke Nicht-RGB-Bild (Standard grey)."
              },
              "left_reverse_palette": {
                "label": "Linke Palette umkehren",
                "description": "Linke Palette umkehren."
              },
              "label2": {
                "label": "Beschriftung 2",
                "description": "Optionale Beschriftung für das rechte Bild."
              },
              "right_palette": {
                "label": "Rechte Palette",
                "description": "Palette für das rechte Nicht-RGB-Bild (Standard grey)."
              },
              "right_reverse_palette": {
                "label": "Rechte Palette umkehren",
                "description": "Rechte Palette umkehren."
              },
              "height": {
                "label": "Höhe",
                "description": "Anzeigehöhe in Pixeln (Standard 600)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der HTML-Datei."
              }
            }
          },
          "image_stack_profile": {
            "name": "Profil eines Bildstapels",
            "description": "Extrahiert Profile je Punkt über einen geordneten Rasterstapel und schreibt optional einen HTML-Bericht.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Liste der Eingaberaster als Array von Pfaden oder als durch Komma/Semikolon getrennte Zeichenkette."
              },
              "points": {
                "label": "Punkte",
                "description": "Pfad des Punktvektors (oder typisiertes Vektorobjekt) mit den Stichprobenorten."
              },
              "output_html": {
                "label": "HTML-Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts."
              }
            }
          },
          "obia_audit_report_pro": {
            "name": "OBIA-Auditbericht (Pro)",
            "description": "Erstellt einen Prüfbericht für OBIA-Workflow-Artefakte mit Metadaten zu Dateiexistenz, Größe und Zeitstempel.",
            "params": {
              "artifacts": {
                "label": "Artefakte",
                "description": "Array der zu prüfenden Artefaktpfade."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Prüfberichts (JSON)."
              }
            }
          },
          "obia_batch_orchestrator_pro": {
            "name": "OBIA-Stapelorchestrator (Pro)",
            "description": "Führt mehrere OBIA-Pipeline-Aufträge in einer Anfrage aus und gibt einen konsolidierten Auftragsbericht zurück.",
            "params": {
              "jobs": {
                "label": "Aufträge",
                "description": "Array von Job-Objekten mit inputs, training, output_prefix und optionalem segment_method."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des JSON-Berichts."
              }
            }
          },
          "obia_pipeline_basic": {
            "name": "OBIA-Pipeline (einfach)",
            "description": "Führt einen vollständigen durchgängigen OBIA-Arbeitsablauf in einem einzigen Vorgang aus: Segmentierung (SLIC/Graph), Zusammenführung kleiner Regionen, Extraktion spektraler Merkmale und Formmerkmale sowie Random-Forest-Klassifikation.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern für Segmentierung/Merkmale."
              },
              "training": {
                "label": "Training",
                "description": "Trainings-CSV mit den Spalten segment_id und class."
              },
              "output_prefix": {
                "label": "Ausgabepräfix",
                "description": "Pfadpräfix für erzeugte Artefakte."
              },
              "segment_method": {
                "label": "Segmentierungsmethode",
                "description": "Segmentierungsmethode: slic oder graph (Standard slic)."
              },
              "min_size": {
                "label": "Mindestgröße",
                "description": "Minimale Segmentgröße für die Zusammenführungsbereinigung (Standard 10)."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Name des Trainingsklassenfelds (Standard class)."
              }
            }
          },
          "object_class_probability_maps": {
            "name": "Klassenwahrscheinlichkeitskarten für Objekte",
            "description": "Wandelt Vorhersagen in Wahrscheinlichkeitskarten je Klasse um und ermöglicht so eine rasterbasierte Visualisierung der Unsicherheit und konfidenzbasiertes Filtern. Unterstützt nachgelagerte Konfidenzschwellen und Mehrfachlabel-Szenarien.",
            "params": {
              "predictions": {
                "label": "Vorhersagen",
                "description": "Vorhersage-CSV mit segment_id und predicted_class."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Wahrscheinlichkeits-CSV."
              }
            }
          },
          "object_features_context_neighbors": {
            "name": "Objektmerkmale: Nachbarschaftskontext",
            "description": "Berechnet räumliche Kontextmerkmale: Anzahl angrenzender Objekte, Längen gemeinsamer Grenzen und Isolationskennzahlen. Ermöglicht eine nachbarschaftsbewusste Klassifikation, die Objektbeziehungen in der Landschaft erfasst.",
            "params": {
              "segments": {
                "label": "Segmente",
                "description": "Eingaberaster mit Segmentlabels."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der CSV-Datei."
              }
            }
          },
          "object_features_shape_basic": {
            "name": "Objektmerkmale: Form (einfach)",
            "description": "Berechnet geometrische und morphologische Formdeskriptoren für jedes Segment, darunter Fläche (Pixelanzahl), Umfang (Grenzlänge), Kompaktheit (umfangsnormierte Kreisförmigkeit), Elongation (Verhältnis von Länge zu Breite), Formfaktor (normierte Formregelmäßigkeit) und Solidität (Effizienz der konvexen Hülle). Formdeskriptoren erfassen strukturelle Eigenschaften unabhängig vom spektralen Inhalt und ermöglichen die Klassifikation der Objektgeometrie sowie die Erkennung morphologischer Muster. Zu den Hauptmerkmalen gehören umfassende Formkennzahlen zu Fläche, Umfang, Regelmäßigkeit und Elongation, recheneffiziente Algorithmen zur Grenzverfolgung, rotations- und translationsinvariante Kennzahlen, Anwendbarkeit über verschiedene Maßstabsbereiche sowie die Fähigkeit zur morphologischen Objektklassifikation (z. B. langgestreckte Straßen gegenüber kompakten Gebäuden). Die Anwendungsfälle umfassen die Klassifikation von Gebäudegrundrissen und die Analyse städtischer Strukturen, die Extraktion linearer Objekte (Straßen, Flüsse, Grenzen), die Charakterisierung von Vegetationsflächen und Fragmentierungsanalysen, Qualitätskontrolle durch formbasiertes Filtern, hierarchische Objekterkennung, die Form- und Spektraleigenschaften kombiniert, sowie die Quantifizierung der Landschaftsstruktur im ökologischen Monitoring. Die ausgegebene Fläche quantifiziert die Segmentgröße in Pixeln; der Umfang beschreibt die Komplexität der Grenze; eine Kompaktheit nahe 1.0 weist auf kreisförmige/regelmäßige Formen hin, niedrigere Werte auf unregelmäßige/langgestreckte Objekte; eine Elongation >1 weist auf lineare Objekte hin, nahe 1 auf kompakte Objekte; der Formfaktor kombiniert mehrere Formeigenschaften für eine integrierte Formklassifikation; Formkennzahlen ermöglichen morphologisches Filtern zur Isolierung bestimmter Objekttypen.",
            "params": {
              "segments": {
                "label": "Segmente",
                "description": "Eingaberaster mit Segmentlabels."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der CSV-Datei."
              }
            }
          },
          "object_features_spectral_basic": {
            "name": "Objektmerkmale: spektral (einfach)",
            "description": "Berechnet umfassende univariate statistische Zusammenfassungen der spektralen Reflexionswerte innerhalb jedes Segments über alle Bildbänder. Die Berechnungen je Segment umfassen die mittlere Reflexion, die Standardabweichung (Homogenität), minimale und maximale Reflexionsgrenzen, Quantilwerte für eine robuste Schätzung sowie bandweise Statistiken, die eine multispektrale Texturquantifizierung und die Charakterisierung spektraler Profile ermöglichen, die für OBIA-Klassifikationsabläufe grundlegend sind. Zu den Hauptmerkmalen gehören die Erzeugung bandweiser Spektralstatistiken für multispektrale und hyperspektrale Bilder, robuste statistische Maße für zentrale Tendenz und Streuung, die Identifikation spektraler Anomalien und Ausreißer innerhalb von Segmenten, eine effiziente Raster-zu-Vektor-Zusammenfassung sowie eine Ausgabe, die direkt in Machine-Learning-Klassifikationspipelines einfließt. Die Anwendungsfälle reichen von der Merkmalsextraktion für die objektbasierte Klassifikation mit spektralen Kennzahlen über die Identifikation von Landbedeckungstypen durch Analyse spektraler Signaturen, die Veränderungserkennung durch Vergleich spektraler Statistiken über zeitliche Sequenzen, die Bewertung der Datenqualität und Ausreißererkennung sowie das Umweltmonitoring durch spektrale Zeitreihenanalyse bis zu Anwendungen der Präzisionslandwirtschaft, die eine normierte Charakterisierung der spektralen Antwort erfordern. Die ausgegebenen Mittelwerte stehen für die typische spektrale Antwort des Segmentmaterials; die Standardabweichung quantifiziert die interne Heterogenität (niedrig = homogene Oberfläche, hoch = gemischte Materialien oder Schatten); Min-/Max-Grenzen kennzeichnen spektrale Extreme innerhalb der Segmente; spektrale Profile ermöglichen den Vergleich mit Referenzsignaturen; die Statistiken bilden die Grundlage für Klassifikationsmerkmalsvektoren; die bandweise Analyse zeigt spektrale Indizes und die Fähigkeit zur Materialunterscheidung.",
            "params": {
              "segments": {
                "label": "Segmente",
                "description": "Eingaberaster mit Segmentlabels."
              },
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern für spektrale Merkmale."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der CSV-Datei."
              }
            }
          },
          "object_features_texture_glcm_basic": {
            "name": "Objektmerkmale: GLCM-Textur (einfach)",
            "description": "Extrahiert Textureigenschaften mittels Grauwertübergangsmatrix-Analyse (GLCM), berechnet aus den Intensitätsverteilungen je Band innerhalb jedes Segments. Die GLCM quantifiziert das räumliche gemeinsame Auftreten von Tonwertstufen und erzeugt Deskriptoren wie Kontrast (lokale Variation), Homogenität (räumliche Regelmäßigkeit), Energie (Ordnung), Entropie (Unordnung) und Unähnlichkeitskennzahlen, die Texturmuster unabhängig von der spektralen Gesamthelligkeit erfassen. Zu den Hauptmerkmalen gehören GLCM-basierte Texturkennzahlen, die lokale räumliche Muster innerhalb von Segmenten erfassen, eine mehrrichtungsbezogene Analyse (horizontal, vertikal, diagonal) für eine orientierungsunabhängige Texturcharakterisierung, die Anwendbarkeit auf alle Bildbänder für einen Textur-Fingerabdruck, die Unterscheidung texturierter von glatten Oberflächen sowie eine rechentechnisch handhabbare Analyse auf Segmentebene. Anwendungsfälle sind die Klassifikation von Materialien anhand von Oberflächenrauheit und Textur (Asphalt gegenüber Beton, Unterscheidung von Kulturarten), die Charakterisierung von Waldstruktur und -dichte über die Kronendachtextur, die Interpretation von SAR-Bildern und die Texturanalyse städtischer Strukturen, die Unterscheidung intakter von geschädigten Oberflächen, die Bewertung der Pflanzengesundheit über Texturkennzahlen des Kronendachs sowie die Erkennung von Wolken und Schatten über Texturanomalien. Ein hoher ausgegebener Kontrast weist auf raue/variable Textur hin, ein niedriger auf glatte Oberflächen; hohe Homogenität weist auf regelmäßige räumliche Muster hin, niedrige auf chaotische Textur; hohe Energie weist auf geordnete Textur hin, niedrige auf zufälliges Rauschen; die Entropie quantifiziert die Unordnung der Textur; die Unähnlichkeit erfasst die Unregelmäßigkeit räumlicher Muster; Texturprofile ermöglichen eine materialspezifische Klassifikation; die Kombination mit spektralen Merkmalen verbessert die Unterscheidung von Objekttypen.",
            "params": {
              "segments": {
                "label": "Segmente",
                "description": "Eingaberaster mit Segmentlabels."
              },
              "input": {
                "label": "Eingabe",
                "description": "Einzelband-Intensitätsraster für die Texturanalyse."
              },
              "levels": {
                "label": "Ebenen",
                "description": "Quantisierungsstufen für die GLCM (Standard 16)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der CSV-Datei."
              }
            }
          },
          "object_features_topology_relations": {
            "name": "Objektmerkmale: topologische Beziehungen",
            "description": "Berechnet Merkmale der Graphtopologie: Objektgrad (Anzahl der Nachbarn), Stärke des dominanten Nachbarn und Artikulationskennzeichen. Erfasst die strukturelle Position im Objektnetzwerk für die hierarchische Klassifikation.",
            "params": {
              "segments": {
                "label": "Segmente",
                "description": "Eingaberaster mit Segmentlabels."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der CSV-Datei."
              }
            }
          },
          "object_uncertainty_diagnostics_pro": {
            "name": "Unsicherheitsdiagnose für Objekte (Pro)",
            "description": "Berechnet aggregierte Unsicherheitsdiagnosen aus den Wahrscheinlichkeitsausgaben der Objekte.",
            "params": {
              "probabilities": {
                "label": "Wahrscheinlichkeiten",
                "description": "Eingabe-CSV mit Wahrscheinlichkeiten, mit den Spalten probability und uncertainty."
              },
              "low_conf_threshold": {
                "label": "Schwellenwert für geringe Konfidenz",
                "description": "Schwellenwert für geringe Konfidenz der Wahrscheinlichkeit (Standard 0.7)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Diagnose-JSON."
              }
            }
          },
          "objects_boundary_refinement_pro": {
            "name": "Verfeinerung von Objektgrenzen (Pro)",
            "description": "Verfeinert Objektgrenzen durch iterative Bereinigung kleiner Regionen mit nachbarschaftsbewusster Zusammenführung.",
            "params": {
              "segments": {
                "label": "Segmente",
                "description": "Eingaberaster mit Segmentlabels."
              },
              "iterations": {
                "label": "Iterationen",
                "description": "Verfeinerungsiterationen (Standard 2)."
              },
              "min_size": {
                "label": "Mindestgröße",
                "description": "Schwellenwert der minimalen Objektgröße (Standard 6)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des verfeinerten Rasters."
              }
            }
          },
          "objects_enforce_min_mapping_unit": {
            "name": "Mindestkartierungseinheit auf Objekte anwenden",
            "description": "Setzt eine minimale Kartiereinheit durch, indem zu kleine Objektsegmente zusammengeführt werden.",
            "params": {
              "segments": {
                "label": "Segmente",
                "description": "Eingaberaster mit Segmentlabels."
              },
              "min_size": {
                "label": "Mindestgröße",
                "description": "Minimale Segmentgröße in Zellen (Standard 5)."
              },
              "method": {
                "label": "Methode",
                "description": "Zusammenführungsmethode: longest, largest, nearest (Standard longest)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "polygons_to_segments": {
            "name": "Polygone zu Segmenten",
            "description": "Rastert bearbeitete Polygone zurück in ein Segmentlabel-Raster und behält dabei Objekt-IDs oder Attributwerte bei. Ermöglicht iterative OBIA-Arbeitsabläufe, die automatische Segmentierung mit manueller Verfeinerung kombinieren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-Polygonvektors."
              },
              "base": {
                "label": "Basis",
                "description": "Basisraster, das das Ausgabegitter definiert."
              },
              "field": {
                "label": "Feld",
                "description": "Optionales numerisches Feld zum Einbrennen (Standard FID)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Segmentrasters."
              }
            }
          },
          "propagate_labels_across_hierarchy": {
            "name": "Labels über die Hierarchie propagieren",
            "description": "Überträgt Klassenlabels der groben Ebene über Hierarchiezuordnungen auf untergeordnete Objekte der feinen Ebene. Ermöglicht eine effiziente Beschriftung verschachtelter Hierarchien und vererbungsbasierte Verfeinerungsabläufe.",
            "params": {
              "hierarchy": {
                "label": "Hierarchie",
                "description": "Hierarchie-CSV mit fine_segment_id und coarse_segment_id."
              },
              "parent_labels": {
                "label": "Übergeordnete Beschriftungen",
                "description": "CSV der übergeordneten Labels mit coarse_segment_id und class."
              },
              "child_labels": {
                "label": "Untergeordnete Beschriftungen",
                "description": "Optionale CSV der untergeordneten Labels mit fine_segment_id und class."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der CSV mit propagierten Labels."
              }
            }
          },
          "segment_graph_felzenszwalb": {
            "name": "Graphsegmentierung nach Felzenszwalb",
            "description": "Die graphbasierte Segmentierung nach Felzenszwalb behandelt das Bild als gewichteten ungerichteten Graphen, in dem Pixel die Knoten sind und Kanten benachbarte Pixel verbinden, deren Gewichte die spektrale Unähnlichkeit darstellen. Segmente werden iterativ zusammengeführt, indem die Kantengewichte innerhalb von Komponenten mit dynamischen Schwellenwerten verglichen werden; Kanten mit Gewichten unterhalb des Schwellenwerts werden zusammengeführt, wodurch Segmente mit lokal homogenen spektralen Eigenschaften entstehen. Dieser hierarchische Ansatz erzeugt wahrnehmungsbezogen sinnvolle Segmentierungen, die auf lokale Kontrastunterschiede und natürliche Farb-/Texturdiskontinuitäten reagieren. Hauptmerkmale: graphbasierte hierarchische Segmentierung; effiziente Rechenkomplexität von O(n log n); empfindlich für lokale Kontrastunterschiede; erzeugt wahrnehmungsbezogen sinnvolle Segmente; unterstützt multispektrale/hyperspektrale Daten; erzeugt Regionen variabler Größe, die natürliche Grenzen bewahren. Anwendungsfälle: Segmentierung multispektraler Bilder; Kartierung natürlicher Lebensräume; Extraktion städtischer Objekte; Abgrenzung von Baumkronendächern; Vorverarbeitung für die Veränderungserkennung; Segmentierung hyperspektraler Daten. Interpretation der Ausgabe: Die Ausgabe ist ein Label-Raster; jedem Pixel wird eine Segment-ID zugewiesen. Die Segmentgröße verhält sich umgekehrt zum lokalen spektralen Kontrast; kontrastreiche Grenzen erzeugen kleinere, zahlreiche Segmente; gleichförmige Regionen werden zu größeren Segmenten zusammengeführt. Über die Empfindlichkeit gegenüber dem k-Parameter (Schwellenwertskala) lassen sich gröbere oder feinere Segmentierungen erzeugen. Die Segmentgrenzen entsprechen natürlichen spektralen Diskontinuitäten.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "k": {
                "label": "K",
                "description": "Skalenparameter der Segmentierung (Standard 500.0)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Optionaler Glättungshinweis (Standard 0.8)."
              },
              "min_area": {
                "label": "Mindestfläche",
                "description": "Mindestfläche für die Bereinigung nach dem Zusammenführen (Standard 20)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Segmentrasters."
              }
            }
          },
          "segment_multiresolution_hierarchical": {
            "name": "Hierarchische Multiresolutionssegmentierung",
            "description": "Erzeugt mehrskalige hierarchische Segmentierungen (grob und fein) mit expliziten Eltern-Kind-Zuordnungen. Ermöglicht maßstabsabhängige Merkmalsextraktion und mehrstufige Klassifikationsabläufe.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "coarse_k": {
                "label": "Grobes K",
                "description": "Grober Skalenparameter (Standard 800)."
              },
              "fine_k": {
                "label": "Feines K",
                "description": "Feiner Skalenparameter (Standard 250)."
              },
              "output_prefix": {
                "label": "Ausgabepräfix",
                "description": "Ausgabepräfix für erzeugte Produkte."
              }
            }
          },
          "segment_scale_parameter_optimizer": {
            "name": "Optimierer für den Segmentierungs-Skalenparameter",
            "description": "Durchsucht mögliche Parameter des Segmentierungsmaßstabs, um den optimalen Maßstab zu ermitteln, der einer Zielanzahl von Objekten entspricht. Die automatische Maßstabswahl macht manuelles Abstimmen überflüssig und sorgt für eine gleichbleibende Segmentierungsqualität.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "candidate_scales": {
                "label": "Kandidatenskalen",
                "description": "Liste der Kandidatenwerte für die Skala (k)."
              },
              "target_objects": {
                "label": "Zielobjekte",
                "description": "Gewünschte Objektanzahl. Standard ist sqrt(total_cells)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Optimiererberichts (JSON)."
              }
            }
          },
          "segment_slic_superpixels": {
            "name": "SLIC-Superpixel-Segmentierung",
            "description": "SLIC (Simple Linear Iterative Clustering) führt ein iteratives Pixel-Clustering im 5D-Merkmalsraum aus räumlichen Koordinaten und Farb-/Spektralwerten durch, wobei die Superpixel gegen lokale Homogenität konvergieren. Der Algorithmus initialisiert ein regelmäßiges Gitter von Clusterzentren, weist Pixel den nächstgelegenen Zentren zu und aktualisiert die Zentren iterativ bei verkleinerten Suchbereichen. So entstehen kompakte, regelmäßig geformte Superpixel mit minimalen Grenzverletzungen im Vergleich zu Wasserscheiden- oder Mean-Shift-Alternativen und einer besseren Anlehnung an natürliche Kanten. Hauptmerkmale: erzeugt gleichmäßige, kompakte Superpixel; recheneffizient mit linearer Zeitkomplexität; ein vom Benutzer einstellbarer Kompaktheitsparameter wägt räumliche Regelmäßigkeit gegen spektrale Kohärenz ab; minimales Überschreiten von Grenzen; unterstützt multispektrale Bilder. Anwendungsfälle: Vorverarbeitung für die objektbasierte Klassifikation; hierarchische Regionenanalyse; Segmentierung von SAR- und optischen Bildern; Stadtkartierung; Abgrenzung von Vegetation; Identifikation von Landnutzungsgrenzen. Interpretation der Ausgabe: Die Ausgabe ist ein Label-Raster, dessen Pixelwerte die zugewiesenen Superpixel-IDs darstellen. Die Superpixelgrenzen folgen dominanten Kanten und Farbübergängen. Kleinere Superpixel (höhere Granularität) erfassen feinere Details, erhöhen aber die Rechenlast; größere Superpixel (geringere Granularität) fassen ähnliche Regionen zusammen und verbessern die Effizienz. Die Grenzgenauigkeit hängt von der Abstimmung des Kompaktheitsparameters und der Trennung der multispektralen Bänder ab.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "region_size": {
                "label": "Regionsgröße",
                "description": "Zielgröße der Superpixel in Pixeln (Standard 20)."
              },
              "compactness": {
                "label": "Kompaktheit",
                "description": "Kompaktheitssteuerung (Standard 10.0)."
              },
              "min_area": {
                "label": "Mindestfläche",
                "description": "Mindestfläche für die Bereinigungszusammenführung (Standard abgeleitet aus region_size)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Segmentrasters."
              }
            }
          },
          "segment_watershed_markers": {
            "name": "Wasserscheidensegmentierung mit Markern",
            "description": "Markergesteuerte, wasserscheidenähnliche Segmentierung, die Objekte um identifizierte Marker-Saatregionen trennt. Legt den Schwerpunkt auf die Erhaltung von Grenzen und steuert zugleich die Segmentgröße für hierarchische OBIA-Arbeitsabläufe.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "gradient_weight": {
                "label": "Gradientengewichtung",
                "description": "Steuerung der Kantenbetonung (Standard 1.0)."
              },
              "min_area": {
                "label": "Mindestfläche",
                "description": "Minimale Segmentgröße (Standard 12)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Segmentrasters."
              }
            }
          },
          "segments_merge_small_regions": {
            "name": "Kleine Segmentregionen zusammenführen",
            "description": "Die Segmentzusammenführung realisiert eine hierarchische Konsolidierung durch Analyse der räumlichen Nachbarschaft und benutzerdefinierte Zusammenführungskriterien. Jedes zu kleine Segment wird anhand von Größenschwellen, spektralen Ähnlichkeitsmaßen oder eigenen morphologischen Kriterien mit den Nachbarregionen verglichen; Kandidatensegmente werden schrittweise in aufnehmende Nachbarn eingegliedert, gemäß Prioritätswarteschlangen nach Zusammenführungskosten, wobei die Konnektivität der Segmente erhalten bleibt und Topologieverletzungen vermieden werden. Zu den Hauptmerkmalen gehören die nachträgliche Regularisierung übersegmentierter Bilder, vom Benutzer einstellbare Zusammenführungskriterien (Mindestgröße, spektraler Ähnlichkeitsschwellenwert, morphologische Eigenschaften), die Wahrung der Integrität der Segmentgrenzen beim Zusammenführen, die Erzeugung kompakter, vereinfachter Segmentkarten sowie eine hierarchische Verfeinerung ohne vollständige Neusegmentierung. Anwendungsfälle sind die Bereinigung übersegmentierter OBIA-Ergebnisse zur Verringerung von Fragmentierung und Rauschen, die Vereinfachung von Segmenten für eine stabilere Klassifikation, die Beseitigung störender kleiner Segmente aus der Erstsegmentierung, die Vereinheitlichung von Segmenteigenschaften für eine gleichförmige nachgelagerte Merkmalsextraktion sowie die qualitätssichernde Verfeinerung mehrskaliger Segmentierungshierarchien. Die Ausgabe weist eine geringere Segmentanzahl auf, die die Konsolidierung widerspiegelt; zusammengeführte Segmente übernehmen die spektralen Statistiken der aufgenommenen Komponenten; Grenzen werden glatter und weniger komplex; zusammengeführte Regionen behalten ihre räumliche Integrität, weisen aber eine leicht erhöhte interne spektrale Heterogenität auf; die Ausgabe ist für die nachgelagerte Klassifikation und die Stabilität der Merkmale optimiert.",
            "params": {
              "segments": {
                "label": "Segmente",
                "description": "Eingaberaster mit Segmentlabels."
              },
              "min_size": {
                "label": "Mindestgröße",
                "description": "Minimale Segmentgröße in Zellen (Standard 5)."
              },
              "method": {
                "label": "Methode",
                "description": "Zusammenführungsmethode: longest, largest, nearest (Standard longest)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "segments_split_low_cohesion": {
            "name": "Segmente mit geringer Kohäsion teilen",
            "description": "Segmentiert bestehende Objekte mit geringer Kohäsion mit feineren Maßstabseinstellungen neu, um die spektrale Homogenität zu verbessern. Adaptive Verfeinerung problematischer Bereiche, ohne gut ausgebildete Objekte zu beeinflussen.",
            "params": {
              "segments": {
                "label": "Segmente",
                "description": "Vorhandenes Segmentraster."
              },
              "inputs": {
                "label": "Eingaben",
                "description": "Array der Eingaberaster für die Neusegmentierung."
              },
              "split_scale": {
                "label": "Aufteilungsskala",
                "description": "Feinerer Skalenparameter für die Teilung (Standard 120)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "segments_to_polygons": {
            "name": "Segmente zu Polygonen",
            "description": "Wandelt Raster-Segmentlabels in Vektorpolygone für interaktive Bearbeitung, Qualitätskontrolle und GIS-Integration um. Ermöglicht einen nahtlosen Übergang zwischen Raster- und Vektordarstellungen in OBIA.",
            "params": {
              "segments": {
                "label": "Segmente",
                "description": "Eingabe-Segmentraster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Polygonvektors."
              }
            }
          },
          "evaluate_training_sites": {
            "name": "Trainingsgebiete bewerten",
            "description": "Bewertet die Klassentrennbarkeit in mehrbandigen Trainingspolygonen und schreibt einen HTML-Bericht mit Verteilungsstatistiken je Band.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern (eines je Spektralband), als Pfade oder als getrennte Zeichenkette."
              },
              "training_data": {
                "label": "Trainingsdaten",
                "description": "Pfad zu den Polygon-Trainingsdaten."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Name des Klassenfelds in den Attributen von training_data."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der HTML-Datei."
              }
            }
          },
          "fuzzy_knn_classification": {
            "name": "Unscharfe KNN-Klassifikation",
            "description": "Führt eine unscharfe k-Nächste-Nachbarn-Klassifikation durch und gibt die Konfidenz der Klassenzugehörigkeit aus.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Trainingsdaten",
                "description": "Pfad der Punkt-/Polygon-Vektortrainingsdaten."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Klassenfeld in den Attributen von training_data."
              },
              "scaling": {
                "label": "Skalierung",
                "description": "Skalierungsmodus der Merkmale: none (Standard), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Anzahl der Nachbarn (Standard 5)."
              },
              "m": {
                "label": "M",
                "description": "Fuzzy-Exponentenparameter (> 1; Standard 2.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des klassifizierten Rasters."
              },
              "probability_output": {
                "label": "Wahrscheinlichkeitsausgabe",
                "description": "Optionaler Pfad des Zugehörigkeitswahrscheinlichkeitsrasters."
              }
            }
          },
          "generalize_classified_raster": {
            "name": "Klassifiziertes Raster generalisieren",
            "description": "Generalize Classified Raster vereinfacht Klassifikationskarten, indem kleine isolierte Flächen durch iterative Modalwertfilterung entfernt und fragmentierte Komponenten aus einem oder mehreren Pixeln in räumlich dominante Nachbarklassen eingegliedert werden. Algorithmus: wendet einen morphologischen Modalwertfilter an, der die dominante Klasse innerhalb gleitender Fenster bewahrt, entfernt oder konsolidiert Pixel, die aus ihrem räumlichen Kontext isoliert sind, verfeinert die Klassifikation iterativ durch Analyse zusammenhängender Komponenten und gliedert kleinere Klassen in benachbarte dominante Klassen ein. Eine einstellbare Fenstergröße und Mindestflächengröße steuern die Stärke der Generalisierung. Hauptmerkmale: verringert die Fragmentierung der Klassifikation, verbessert die räumliche Kohärenz, beseitigt durch Rauschen verursachte isolierte Flächen, erhält Klassengrenzen durch selektives Filtern, recheneffiziente Verarbeitung zusammenhängender Komponenten. Fähigkeiten: variable Generalisierungsstärke, Erhalt großer zusammenhängender Flächen, Anwendung auf indizierte oder kategoriale Daten. Anwendungsfälle: Verfeinerung nach der Klassifikation zur Beseitigung von Salz-und-Pfeffer-Effekten, Konsolidierung fragmentierter Klassifikationsergebnisse, Aufbereitung finaler Klassifikationsprodukte, Generalisierung auf eine bestimmte minimale Kartiereinheit. Anwendungen: Fertigstellung von Landbedeckungskarten, Beseitigung fehlerhafter Einzelpixel-Klassifikationen, Verbesserung der räumlichen Kontinuität der Klassifikation. Interpretation der Ausgabe: Eine geringere Klassenfragmentierung zeigt eine wirksame Entfleckung an; erhaltene Grenzen zeigen geeignete Generalisierungsparameter; eine übermäßige Generalisierung deutet auf zu große Fensterparameter hin; eine verbesserte räumliche Kohärenz legt nahe, dass das Klassifikationsrauschen hauptsächlich aus Einzelpixel-Artefakten bestand.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des klassifizierten Eingaberasters oder typisiertes Rasterobjekt."
              },
              "min_size": {
                "label": "Mindestgröße",
                "description": "Minimale Objektgröße in Zellen; kleinere Flecken werden neu zugewiesen (Standard 5)."
              },
              "method": {
                "label": "Methode",
                "description": "Generalisierungsmethode: 'longest' (Standard), 'largest' oder 'nearest'."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "generalize_with_similarity": {
            "name": "Nach Ähnlichkeit generalisieren",
            "description": "Generalisiert kleine Flächen in einem klassifizierten Raster, indem sie mit der spektral ähnlichsten Nachbarfläche zusammengeführt werden.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des klassifizierten Eingaberasters."
              },
              "similarity": {
                "label": "Ähnlichkeit",
                "description": "Array von Ähnlichkeitsrastern zur Berechnung der Ähnlichkeit zum Objektzentrum."
              },
              "min_size": {
                "label": "Mindestgröße",
                "description": "Minimale Objektgröße in Pixeln; kleinere Objekte werden zusammengeführt (Standard 5)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "k_means_clustering": {
            "name": "K-Means-Clustering",
            "description": "K-Means-Clustering führt eine unüberwachte spektrale Klassifikation durch, indem Pixel iterativ in K spektrale Cluster unterteilt werden; dabei wird die Varianz innerhalb der Cluster minimiert, und natürliche spektrale Gruppierungen in multispektralen Bildern werden ohne Trainingsstichproben oder vorab festgelegte Klassendefinitionen gefunden. Der Algorithmus initialisiert K zufällige Clusterzentren, weist Pixel iterativ den nächstgelegenen Zentren zu und berechnet die Zentren als Clustermittelwerte neu, bis Konvergenz erreicht ist; ausgegeben werden die endgültigen Clusterzuweisungen und Zentren. K-Means ist recheneffizient, auf große multispektrale Stapel skalierbar und findet datengetriebene spektrale Muster, die für explorative Analysen und die Identifikation natürlicher Klassen nützlich sind. Zu den Hauptmerkmalen gehören eine vom Benutzer festgelegte Clusteranzahl K, die flexible Abwägungen zwischen spektralem Detail und Interpretierbarkeit der Ausgabe ermöglicht, Konvergenzkriterien mit einstellbaren Iterationsgrenzen und Schwellenwerten für die Zentrumsverschiebung, eine optionale Steuerung des Zufallsstartwerts für reproduzierbares Clustering bei Tests und Validierung sowie eine effiziente Parallelisierung für große Bilder. Die Anwendungen reichen von der unüberwachten Landbedeckungsklassifikation zur Ermittlung natürlicher spektraler Klassen über die Anomalieerkennung zur Identifikation spektral ungewöhnlicher Pixel und die Bildsegmentierung für eine anschließende überwachte Klassifikation bis zur explorativen Spektralanalyse, die dominante spektrale Muster aufdeckt. Die K-Means-Ausgabe kennzeichnet natürliche spektrale Gruppierungen. Ausgegeben werden ein Raster der Clusterzugehörigkeit mit Ganzzahlen von 0 bis K-1, eine Datei der Clusterzentren mit dem mittleren Spektrum je Cluster sowie optional die Varianz innerhalb der Cluster zur Quantifizierung der Kompaktheit; bei der Visualisierung werden die Clusterklassen über Echtfarbkompositen gelegt, was räumliche Muster und die Kontinuität der Cluster sichtbar macht.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Liste der Eingaberaster als Array von Pfaden oder als durch Komma/Semikolon getrennte Zeichenkette."
              },
              "classes": {
                "label": "Klassen",
                "description": "Anzahl der Zielklassen (k)."
              },
              "max_iterations": {
                "label": "Maximale Iterationen",
                "description": "Maximale Iterationsanzahl (Standard 10)."
              },
              "class_change": {
                "label": "Klassenänderung",
                "description": "Abbruch, wenn der Prozentsatz geänderter gültiger Zellen unter diesen Schwellenwert fällt (Standard 2.0)."
              },
              "initialize": {
                "label": "Initialisieren",
                "description": "Initialisierungsstrategie der Schwerpunkte: 'diagonal' (Standard) oder 'random'."
              },
              "min_class_size": {
                "label": "Minimale Klassengröße",
                "description": "Minimale Klassengröße bei der Aktualisierung der Schwerpunkte (Standard 10)."
              },
              "out_html": {
                "label": "HTML-Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Klassenrasters. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "knn_classification": {
            "name": "KNN-Klassifikation",
            "description": "Die k-Nächste-Nachbarn-Klassifikation weist Pixel Klassen anhand eines Mehrheitsentscheids unter den K nächsten Trainingsstichproben im Spektralraum zu und ermöglicht so eine flexible nichtlineare Klassifikation ohne explizites Modelltraining. KNN berechnet Distanzen (euklidisch, spektraler Winkel oder Mahalanobis) von jedem Bildpixel zu allen Trainingsstichproben, ermittelt die K nächsten Trainingsstichproben, wendet einen gewichteten oder ungewichteten Mehrheitsentscheid zur Bestimmung der Klasse an und gibt das Klassenlabel sowie optional einen Konfidenzwert zurück. KNN glänzt bei begrenzten Trainingsdaten, stark nichtlinearen Klassengrenzen und heterogenen spektralen Klassenverteilungen, bei denen parametrische Modelle Schwierigkeiten haben. Zu den Hauptmerkmalen gehören wählbare Distanzmaße (euklidisch, spektraler Winkel, Mahalanobis) für unterschiedliche spektrale Eigenschaften und Korrelationsstrukturen, vom Benutzer festgelegte K-Werte für Abwägungen zwischen Genauigkeit und Komplexität, gewichtete Abstimmungsoptionen, die nahe Stichproben stärker berücksichtigen, sowie optionale Konfidenzschwellen, mit denen mehrdeutige Klassifikationen verworfen werden können. Anwendungen sind die hochgenaue Klassifikation in der Fernerkundung mit im Feld erhobenen Trainingsstichproben, die Klassifikation bei kleinen Stichproben mit begrenzter Ground Truth, die Klassifikation schwierigen Geländes mit stark variablen spektralen Signaturen sowie eine konfidenzbewusste Klassifikation, die Grenzfallentscheidungen verwirft. Die KNN-Klassifikation liefert mit flexiblen Trainingsdaten hochgenaue Ergebnisse. Die Ausgabe umfasst ein Klassenlabel-Raster mit ganzzahligen Klassen-IDs entsprechend den Labels der Trainingsstichproben, ein optionales Konfidenzraster mit Abstimmungsanteilen oder distanzgewichteten Konfidenzwerten sowie eine Klassifikationsgenauigkeit, die bei optimaler Wahl von K und ausreichenden Trainingsstichproben andere Methoden übertreffen kann.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Trainingsdaten",
                "description": "Pfad der Punkt-/Polygon-Vektortrainingsdaten."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Klassenfeld in den Attributen von training_data."
              },
              "scaling": {
                "label": "Skalierung",
                "description": "Skalierungsmodus der Merkmale: none (Standard), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Anzahl der Nachbarn (Standard 5)."
              },
              "clip": {
                "label": "Zuschneiden",
                "description": "Wenn wahr, werden fehlklassifizierte Trainingsstichproben durch einen Leave-one-out-Vordurchlauf entfernt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "knn_regression": {
            "name": "KNN-Regression",
            "description": "Führt eine überwachte k-Nächste-Nachbarn-Regression auf mehrbandigen Eingaberastern durch.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Trainingsdaten",
                "description": "Pfad der Punkt-Vektortrainingsdaten."
              },
              "field": {
                "label": "Feld",
                "description": "Numerisches Zielfeld in den Attributen von training_data."
              },
              "scaling": {
                "label": "Skalierung",
                "description": "Skalierungsmodus der Merkmale: none (Standard), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Anzahl der Nachbarn (Standard 5)."
              },
              "distance_weighted": {
                "label": "Distanzgewichtet",
                "description": "Wenn wahr, wird eine inverse distanzgewichtete Mittelung verwendet."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "logistic_regression": {
            "name": "Logistische Regression",
            "description": "Führt eine überwachte Klassifikation mittels logistischer Regression auf mehrbandigen Eingaberastern durch.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Trainingsdaten",
                "description": "Pfad der Punkt-/Polygon-Vektortrainingsdaten."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Klassenfeld in den Attributen von training_data."
              },
              "scaling": {
                "label": "Skalierung",
                "description": "Skalierungsmodus der Merkmale: none (Standard), normalize, standardize."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Gewicht der L2-Regularisierung (Standard 0.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "min_dist_classification": {
            "name": "Minimum-Distance-Klassifikation",
            "description": "Führt eine überwachte Minimum-Distance-Klassifikation auf multispektralen Rastern mit Polygon-Trainingsdaten durch.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern (eines je Spektralband), als Pfade oder als getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Trainingsdaten",
                "description": "Pfad zu einer Polygon-Vektordatei mit Trainingsflächen."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Name des Attributfelds in den Trainingsdaten, das die Klassenkennung enthält."
              },
              "dist_threshold": {
                "label": "Distanzschwellenwert",
                "description": "Optionaler z-Wert-Schwellenwert; Pixel, die weiter als dieser vom nächsten Klassenmittelwert entfernt sind, bleiben unklassifiziert. Standard: kein Schwellenwert (alle klassifizieren)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "modified_k_means_clustering": {
            "name": "Modifiziertes K-Means-Clustering",
            "description": "Modifiziertes K-Means-Clustering erweitert das Standard-K-Means um spektrale Vorverarbeitung, eine automatische adaptive Wahl von K und verbesserte Konvergenzkriterien für eine robustere und genauere unüberwachte multispektrale Klassifikation. Der Algorithmus wendet eine optionale Vorverarbeitung an, darunter eine spektrale Standardisierung zur Beseitigung von Skaleneffekten, eine Hauptkomponententransformation, die dominante Varianzrichtungen hervorhebt, und eine Rauschfilterung, die störende spektrale Variationen entfernt. Die adaptive Wahl von K nutzt Ellbogenmethoden oder Silhouettenanalysen, um die optimale Clusteranzahl automatisch zu ermitteln, statt sie manuell angeben zu müssen. Zu den Hauptmerkmalen gehören eine spektrale Vorverarbeitung, die die Skalenempfindlichkeit verringert und dominante spektrale Variationsrichtungen hervorhebt, eine automatische Wahl von K zur objektiven Ermittlung optimaler Clusteranzahlen, verbesserte Konvergenzkriterien einschließlich Schwellenwerten für die relative Zentrumsverschiebung und Ähnlichkeitsmaßen auf Basis spektraler Winkel sowie eine optionale Nachbearbeitung, die ähnliche Cluster zusammenführt oder diffuse Cluster aufteilt. Anwendungen sind eine verbesserte explorative Landbedeckungsklassifikation mit automatischer Behandlung spektraler Skalen, eine robuste Anomalieerkennung, die durch Vorverarbeitung Signal von Rauschen trennt, eine adaptive Bildsegmentierung, die geeignete Detailstufen automatisch findet, sowie die Integration mehrerer Sensoren durch Normierung unterschiedlicher spektraler Sensorskalen. Die Ausgabe des modifizierten K-Means zeigt robuste natürliche spektrale Klassen. Ausgegeben werden ein optimiertes Raster der Clusterzugehörigkeit mit automatisch bestimmter Klassenanzahl, Clusterzentren mit dokumentierten Vorverarbeitungstransformationen sowie Diagnosestatistiken zur Quantifizierung von Clusterqualität, Trennung und Konvergenz; Empfehlungen der adaptiven Wahl von K helfen bei der Abwägung zwischen Interpretierbarkeit und Detail.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Liste der Eingaberaster als Array von Pfaden oder als durch Komma/Semikolon getrennte Zeichenkette."
              },
              "start_clusters": {
                "label": "Startcluster",
                "description": "Anfängliche Clusteranzahl vor dem Zusammenführen (Standard 1000)."
              },
              "merge_dist": {
                "label": "Zusammenführungsdistanz",
                "description": "Distanzschwellenwert für das Zusammenführen von Clustern (euklidisch)."
              },
              "max_iterations": {
                "label": "Maximale Iterationen",
                "description": "Maximale Iterationsanzahl (Standard 10)."
              },
              "class_change": {
                "label": "Klassenänderung",
                "description": "Abbruch, wenn der Prozentsatz geänderter gültiger Zellen unter diesen Schwellenwert fällt (Standard 2.0)."
              },
              "out_html": {
                "label": "HTML-Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Klassenrasters. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "nnd_classification": {
            "name": "NND-Klassifikation",
            "description": "Führt eine Klassifikation nach nächster normierter Distanz mit optionaler Ausreißerverwerfung durch.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Trainingsdaten",
                "description": "Pfad der Punkt-/Polygon-Vektortrainingsdaten."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Klassenfeld in den Attributen von training_data."
              },
              "scaling": {
                "label": "Skalierung",
                "description": "Skalierungsmodus der Merkmale: none (Standard), normalize, standardize."
              },
              "z_threshold": {
                "label": "Z-Schwellenwert",
                "description": "Maximal akzeptierter z-Wert der normierten Distanz, bevor ein Ausreißer markiert wird (Standard 1.96)."
              },
              "outlier_is_zero": {
                "label": "Ausreißer ist null",
                "description": "Wenn wahr, erhalten Ausreißer den Klassenwert 0; andernfalls NoData."
              },
              "k": {
                "label": "K",
                "description": "Nachbarschaftsgröße für die Schätzung der Klassendistanz (Standard 25)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "otsu_thresholding": {
            "name": "Otsu-Schwellenwertbildung",
            "description": "Die Otsu-Schwellenwertbildung ist ein automatisches Bildsegmentierungsverfahren, das den optimalen globalen Schwellenwert durch Maximierung der Zwischenklassenvarianz in Histogrammen der Pixelintensität bestimmt. Algorithmus: untersucht das Histogramm eines Graustufen- oder Einzelbandbilds, testet iterativ alle möglichen Schwellenwerte, berechnet für jeden Schwellenwert die Varianz zwischen den Klassen und wählt den Wert, der die Varianztrennung zwischen Vordergrund- und Hintergrundklasse maximiert. Nichtparametrisch, erfordert keine manuelle Angabe eines Schwellenwerts. Hauptmerkmale: vollautomatische Bestimmung des Schwellenwerts, robust gegenüber Beleuchtungsschwankungen, der histogrammbasierte Ansatz erlaubt eine schnelle Berechnung, keine externen Parameter, liefert einen einzigen globalen Schwellenwert. Fähigkeiten: binäre Segmentierung, Optimierung für unimodale und bimodale Histogramme, verarbeitet Bilder mit geringem Dynamikumfang oder hohem Kontrast. Anwendungsfälle: automatische Bildsegmentierung ohne Benutzereingriff, Binarisierung von Dokumenten, Extraktion von Gewässerflächen, Wolkenerkennung in Satellitenbildern, Eis-/Schneekartierung. Anwendungen: Vorverarbeitung für die Veränderungserkennung, einfache Landbedeckungsklassifikation, Erzeugung von Wassermasken, vorläufige Segmentierung vor einer weitergehenden Klassifikation. Interpretation der Ausgabe: Pixel unterhalb des Schwellenwerts werden der einen Klasse zugeordnet, Pixel darüber der anderen; die Bimodalität des Histogramms zeigt die Qualität der Trennung an; schlecht getrennte Histogramme deuten darauf hin, dass sich die Daten nicht für eine binäre Klassifikation eignen; statistische Maße wie die Zwischenklassenvarianz und die Gleichförmigkeit geben die Qualität der Segmentierung an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "parallelepiped_classification": {
            "name": "Quaderklassifikation",
            "description": "Führt eine überwachte Quaderklassifikation auf multispektralen Rastern mit Polygon-Trainingsdaten durch.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern (eines je Spektralband), als Pfade oder als getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Trainingsdaten",
                "description": "Pfad zu einer Polygon-Vektordatei mit Trainingsflächen."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Name des Attributfelds in den Trainingsdaten, das die Klassenkennung enthält."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "random_forest_classification": {
            "name": "Random-Forest-Klassifikation",
            "description": "Die Random-Forest-Klassifikation vergibt Labels über ein Ensemble von Entscheidungsbäumen, die auf Bootstrap-Stichproben mit zufälligen Merkmalsteilmengen trainiert werden. Jeder Baum wächst unabhängig und ohne Beschneidung und erfasst komplexe nichtlineare Beziehungen und Wechselwirkungen zwischen Merkmalen. Die Klassifikation aggregiert die Stimmen über typischerweise 100-1000 Bäume; die endgültige Klasse ergibt sich per Mehrheitsentscheid. Bootstrap-Training und zufällige Merkmalsauswahl verringern die Überanpassung und erfassen zugleich hochdimensionale Muster. Die Merkmalswichtigkeit lässt sich aus Änderungen des Out-of-Bag-Fehlers berechnen und zeigt die diagnostischen Spektralbänder oder abgeleiteten Merkmale, die für die Klassifikation am relevantesten sind. Zu den Hauptmerkmalen gehören eine Rangfolge der Variablenwichtigkeit zur Identifikation zentraler Klassifikationsmerkmale, eine Klassifikationskonfidenz je Pixel aus dem Stimmenkonsens der Ensemble-Bäume, die automatische Verarbeitung hochdimensionaler Hyperspektraldaten, Robustheit gegenüber spektralen Ausreißern und Rauschen sowie parallelisierbares Training und parallelisierbare Vorhersage. Das Werkzeug verarbeitet Mehrklassenprobleme mit unausgewogenen Trainingsdaten effizient. Anwendungen sind die Landbedeckungsklassifikation aus multispektralen und hyperspektralen Daten, die Veränderungserkennung durch Identifikation spektraler Übergänge zwischen Karten, die Klassifikation von Kulturarten aus multitemporalen Satellitenbildern, die Klassifikation städtischer Materialien zur Unterscheidung von Gebäudetypen und Oberflächen sowie die Anomalieerkennung zur Identifikation spektraler Ausreißer. Random Forests erreichen in Fernerkundungsanwendungen mit relativ geringen Trainingsdaten durchweg eine hohe Genauigkeit. Interpretation der Ausgabe: Die Stimmenzahlen liefern die Klassifikationskonfidenz; einstimmige oder deutliche Mehrheiten (>80%) weisen auf sichere Klassifikationen hin, während knappe Abstände auf Mehrdeutigkeit durch Mischpixel hindeuten. Rangfolgen der Merkmalswichtigkeit kennzeichnen die Spektralbänder oder abgeleiteten Indizes mit der größten diagnostischen Aussagekraft für die Klassifikation. Der Out-of-Bag-Fehler schätzt die Generalisierungsleistung ohne zurückgehaltene Validierungsdaten. Merkmalsinteraktionen sind implizit; eine hohe Genauigkeit bestimmter Bandkombinationen deutet auf nichtlineare spektrale Beziehungen hin.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Trainingsdaten",
                "description": "Pfad der Punkt-/Polygon-Vektortrainingsdaten."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Klassenfeld in den Attributen von training_data."
              },
              "scaling": {
                "label": "Skalierung",
                "description": "Skalierungsmodus der Merkmale: none (Standard), normalize, standardize."
              },
              "n_trees": {
                "label": "Anzahl Bäume",
                "description": "Anzahl der Bäume im Forest (Standard 200)."
              },
              "min_samples_leaf": {
                "label": "Minimale Stichproben pro Blatt",
                "description": "Minimale Anzahl an Stichproben an einem Blattknoten (Standard 1)."
              },
              "min_samples_split": {
                "label": "Minimale Stichproben pro Aufteilung",
                "description": "Minimale Anzahl an Stichproben zum Teilen eines inneren Knotens (Standard 2)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "random_forest_regression": {
            "name": "Random-Forest-Regression",
            "description": "Führt eine überwachte Random-Forest-Regression auf mehrbandigen Eingaberastern durch.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Trainingsdaten",
                "description": "Pfad der Punkt-Vektortrainingsdaten."
              },
              "field": {
                "label": "Feld",
                "description": "Numerisches Zielfeld in den Attributen von training_data."
              },
              "scaling": {
                "label": "Skalierung",
                "description": "Skalierungsmodus der Merkmale: none (Standard), normalize, standardize."
              },
              "n_trees": {
                "label": "Anzahl Bäume",
                "description": "Anzahl der Bäume im Forest (Standard 200)."
              },
              "min_samples_leaf": {
                "label": "Minimale Stichproben pro Blatt",
                "description": "Minimale Anzahl an Stichproben an einem Blattknoten (Standard 1)."
              },
              "min_samples_split": {
                "label": "Minimale Stichproben pro Aufteilung",
                "description": "Minimale Anzahl an Stichproben zum Teilen eines inneren Knotens (Standard 2)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "svm_classification": {
            "name": "SVM-Klassifikation",
            "description": "Die Klassifikation mit Support Vector Machines (SVM) wendet Machine-Learning-Algorithmen der Support Vector Machine auf multispektrale Fernerkundungsdaten an und trennt Trainingsklassen durch optimale Platzierung einer Hyperebene im hochdimensionalen spektralen Merkmalsraum. Algorithmus: transformiert spektrale Merkmalsvektoren über Kernelfunktionen (linear, RBF, polynomial) in einen hochdimensionalen Raum, ermittelt die Hyperebene mit maximalem Rand, die die Trainingsklassen trennt, und klassifiziert neue Pixel entsprechend ihrer Lage zur Hyperebene; Toleranzparameter und Kernelwahl steuern die Generalisierung. Bewältigt nichtlineare Klassentrennung wirkungsvoll. Hauptmerkmale: robust gegenüber hochdimensionalen Spektraldaten, hervorragende Generalisierung bei begrenzten Trainingsstichproben, die Flexibilität der Kernel eignet sich für vielfältige spektrale Verteilungen, liefert Wahrscheinlichkeits-/Konfidenzschätzungen. Fähigkeiten: Mehrklassenklassifikation, Soft-Margin-Toleranz, automatischer Ausgleich der Klassengewichte. Anwendungsfälle: detaillierte Landklassifikation mit spärlichen Trainingsdaten, Integration spektral-räumlicher Merkmale, Veränderungserkennung, Präzisionslandwirtschaft, Stadtkartierung. Anwendungen: Klassifikation hyperspektraler Bilder, Kartierung komplexer Ökosysteme, Abgrenzung von Kulturarten, Klassifikation von Infrastruktur. Interpretation der Ausgabe: Die Klassenzugehörigkeit gibt die vorhergesagte Kategorie an, wobei die räumliche Kohärenz die Qualität der Klassifikation zeigt; Wahrscheinlichkeitsschätzungen quantifizieren die Konfidenz auf Pixelebene; Muster der Fehlklassifikation deuten auf Mängel der Trainingsdaten oder Probleme durch spektrale Überlappung hin.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Trainingsdaten",
                "description": "Pfad der Punkt-/Polygon-Vektortrainingsdaten."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Klassenfeld in den Attributen von training_data."
              },
              "scaling": {
                "label": "Skalierung",
                "description": "Skalierungsmodus der Merkmale: none (Standard), normalize, standardize."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Kerneltyp: linear (Standard) oder rbf."
              },
              "c": {
                "label": "C",
                "description": "SVM-Regularisierungsparameter (Standard 1.0)."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Gamma des RBF-Kernels; Standard ist 1 / number_of_features."
              },
              "epoch": {
                "label": "Epoche",
                "description": "Anzahl der Trainingsepochen (Standard 2)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "svm_regression": {
            "name": "SVM-Regression",
            "description": "Führt eine überwachte Support-Vector-Machine-Regression auf mehrbandigen Eingaberastern durch.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Trainingsdaten",
                "description": "Pfad der Punkt-Vektortrainingsdaten."
              },
              "field": {
                "label": "Feld",
                "description": "Numerisches Zielfeld in den Attributen von training_data."
              },
              "scaling": {
                "label": "Skalierung",
                "description": "Skalierungsmodus der Merkmale: none (Standard), normalize, standardize."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Kerneltyp: linear (Standard) oder rbf."
              },
              "c": {
                "label": "C",
                "description": "SVM-Regularisierungsparameter (Standard 1.0)."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Gamma des RBF-Kernels; Standard ist 1 / number_of_features."
              },
              "eps": {
                "label": "Eps",
                "description": "Breite des epsilon-insensitiven Verlusts (Standard 0.1)."
              },
              "tol": {
                "label": "Tol",
                "description": "Toleranz des Optimierers (Standard 1e-3)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "change_vector_analysis": {
            "name": "Änderungsvektoranalyse",
            "description": "Führt eine Change-Vector-Analyse auf multispektralen Datensätzen zweier Zeitpunkte durch und gibt Raster für Betrag und Richtung zurück.",
            "params": {
              "date1": {
                "label": "Datum 1",
                "description": "Rasterliste des früheren Datums als Array von Pfaden oder als durch Komma/Semikolon getrennte Zeichenkette."
              },
              "date2": {
                "label": "Datum 2",
                "description": "Rasterliste des späteren Datums als Array von Pfaden oder als durch Komma/Semikolon getrennte Zeichenkette."
              },
              "magnitude_output": {
                "label": "Betragsausgabe",
                "description": "Optionaler Ausgabepfad für das Raster der Vektorbeträge."
              },
              "direction_output": {
                "label": "Richtungsausgabe",
                "description": "Optionaler Ausgabepfad für das Raster der Richtungscodes."
              }
            }
          },
          "image_difference_change_detection": {
            "name": "Änderungserkennung über Bilddifferenz",
            "description": "Die Veränderungserkennung per Bilddifferenz identifiziert Veränderungen der Landbedeckung, indem pixelweise multispektrale Differenzen zwischen koregistrierten multitemporalen Satellitenaufnahmen berechnet werden, und hebt Bereiche hervor, in denen sich die spektralen Signaturen so stark verändert haben, dass sie die statistische Hintergrundvariation übersteigen. Der Algorithmus koregistriert die Bilder auf ein gemeinsames Pixelgitter, berechnet Differenzen in ausgewählten Bändern oder Vegetationsindizes (z. B. NDVI-Differenz), wendet eine statistische Schwellenwertbildung anhand der mittleren absoluten Differenz und von Konfidenzintervallen an, um Veränderung von Rauschen zu unterscheiden, und gibt binäre Veränderungsmasken oder kontinuierliche Raster des Differenzbetrags aus. Die Bilddifferenzbildung ist rechnerisch einfach, gut interpretierbar und wirksam bei der Erkennung größerer Veränderungen der Vegetation, der städtischen Entwicklung oder von Gewässern. Zu den Hauptmerkmalen gehören eine flexible Bandauswahl für eine gezielte Veränderungserkennung in bestimmten Spektralbereichen, eine statistische Schwellenwertbildung mit automatischen oder manuellen Konfidenzniveaus, eine optionale Vorverarbeitung (Normierung, Indexberechnung) zur Verbesserung des Signal-Rausch-Verhältnisses der Veränderung sowie eine schnelle Verarbeitung für großflächige Veränderungserkennung. Anwendungen sind die Kartierung von Entwaldung und die Überwachung von Waldverlusten, die Verfolgung der Stadtausdehnung aus multispektralen Satellitenzeitreihen, die Hochwasserkartierung vor und nach einem Ereignis aus SAR- oder optischen Daten sowie die Erkennung landwirtschaftlicher Veränderungen zur Verfolgung von Kulturwechseln. Die Ausgabe der Bilddifferenz hebt Veränderungsbereiche hervor. Sie umfasst ein Veränderungsmasken-Raster (binär Veränderung/keine Veränderung) mit einstellbaren Schwellenwerten, ein kontinuierliches Raster des Differenzbetrags zur Quantifizierung der Veränderungsintensität sowie ein optionales Raster der Veränderungsklassen zur Unterscheidung der Veränderungsart (Zunahme, Abnahme); eine zeitliche Aggregation ermöglicht die Verfolgung von Veränderungen über mehrjährige Zeiträume.",
            "params": {
              "t1_inputs": {
                "label": "T1-Eingaben",
                "description": "Array der Rasterpfade von Datum 1."
              },
              "t2_inputs": {
                "label": "T2-Eingaben",
                "description": "Array der Rasterpfade von Datum 2; muss in Länge und Reihenfolge t1_inputs entsprechen."
              },
              "mode": {
                "label": "Modus",
                "description": "Differenzmodus: magnitude (Standard) oder signed."
              },
              "threshold_sigma": {
                "label": "Schwellenwert-Sigma",
                "description": "Optionaler Sigma-Schwellenwert zur Erzeugung einer binären Veränderungsmaske."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS auf t1_inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters für das Differenzbild."
              },
              "output_absolute": {
                "label": "Absolutwert ausgeben",
                "description": "Optionaler Ausgabepfad des Rasters für die absolute vorzeichenbehaftete Differenz (|mean(t2-t1)|)."
              },
              "output_signed": {
                "label": "Vorzeichenbehaftet ausgeben",
                "description": "Optionaler Ausgabepfad des Rasters für die vorzeichenbehaftete Differenz mean(t2-t1)."
              },
              "output_mask": {
                "label": "Maske ausgeben",
                "description": "Optionaler Ausgabepfad des Rasters für die schwellenwertbasierte binäre Veränderungsmaske."
              }
            }
          },
          "pca_based_change_detection": {
            "name": "PCA-basierte Änderungserkennung",
            "description": "Die Veränderungserkennung per Hauptkomponentenanalyse identifiziert Veränderungen der Landbedeckung, indem Hauptkomponenten aus multitemporal gestapelten Spektraldaten berechnet werden, wobei frühe Komponenten zeitübergreifend gemeinsame Muster erfassen und spätere Komponenten zeitliche Veränderungen isolieren. Der Algorithmus stapelt multitemporale multispektrale Daten (koregistriert auf ein gemeinsames Gitter), berechnet eine PCA, die in unkorrelierte orthogonale spektral-zeitliche Komponenten transformiert, interpretiert spätere PCs als veränderungssensitiv und wendet zur Veränderungserkennung eine statistische Schwellenwertbildung auf die PC-Ladungen/-Werte an. Die PCA-basierte Erkennung ist besonders stark, wenn Veränderungssignale spektral subtil sind, da die PCA die Varianz maximiert und zeitlich konsistente spektrale Muster (frühe PCs) von zeitlicher Variation (spätere PCs) trennt. Zu den Hauptmerkmalen gehören die Fusion von Daten mehrerer Zeitpunkte mit variabler Bildanzahl und Koregistrierungsanforderungen, eine automatische Varianzmaximierung, die wichtige spektral-zeitliche Muster hervorhebt, multivariate Statistiken, die die Unterscheidung von Veränderungen gegenüber univariater Differenzbildung verbessern, sowie eine optionale räumliche Filterung zur Verringerung des Pixelrauschens. Anwendungen sind die Erkennung subtilen Vegetationsstresses, bevor er visuell erkennbar ist, die multispektrale Erkennung städtischer Veränderungen zur Verfolgung der Entwicklung über Jahrzehnte, die Bewertung der Auswirkungen von Naturkatastrophen durch schnelle Schadenskartierung sowie das Umweltmonitoring zur Erkennung von Zustandsübergängen in Ökosystemen. Die Ausgabe der PCA-basierten Erkennung unterscheidet zeitliche Muster. Sie umfasst Hauptkomponentenbilder mit interpretierbaren spektral-zeitlichen Ladungen, ein aus den Werten späterer Komponenten abgeleitetes Raster der Veränderungswahrscheinlichkeit sowie eine optionale Veränderungsklassifikation zur Unterscheidung der Veränderungsarten; die räumlichen Muster der PCs ermöglichen eine visuelle Mustererkennung als Ergänzung zur statistischen Erkennung.",
            "params": {
              "t1_inputs": {
                "label": "T1-Eingaben",
                "description": "Array der Rasterpfade von Datum 1."
              },
              "t2_inputs": {
                "label": "T2-Eingaben",
                "description": "Array der Rasterpfade von Datum 2; muss in Länge und Reihenfolge t1_inputs entsprechen."
              },
              "component": {
                "label": "Komponente",
                "description": "1-basierter Index der auszugebenden Hauptkomponente (Standard 1)."
              },
              "standardized": {
                "label": "Standardisiert",
                "description": "Wenn wahr, wird eine PCA auf Basis der Korrelationsmatrix über die Änderungsvektoren verwendet (Standard falsch)."
              },
              "threshold_sigma": {
                "label": "Schwellenwert-Sigma",
                "description": "Optionaler Sigma-Schwellenwert auf den absoluten PC-Wert für die binäre Maskenausgabe."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS auf t1_inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters für den absoluten Wert der gewählten PC."
              },
              "output_mask": {
                "label": "Maske ausgeben",
                "description": "Optionaler Ausgabepfad des Rasters für die schwellenwertbasierte binäre Maske (0/1)."
              },
              "output_report": {
                "label": "Bericht ausgeben",
                "description": "Optionaler Ausgabepfad des JSON-Berichts für Eigenwerte, erklärte Varianz und Komponentenladungen."
              }
            }
          },
          "post_classification_change": {
            "name": "Änderung nach der Klassifikation",
            "description": "Die Veränderungserkennung nach der Klassifikation quantifiziert Übergänge der Landbedeckung/Landnutzung (LULC) durch direkten Vergleich unabhängig klassifizierter Karten aus verschiedenen Zeiträumen. Pixelweise Klassenvergleiche identifizieren Übergänge mit „Von“- und „Nach“-Klassen. Kreuztabellen (Konfusionsmatrizen) quantifizieren die Übergangshäufigkeiten und zeigen die dominanten Veränderungspfade. Das Verfahren erfordert konsistente Klassifikationsschemata über alle Zeitpunkte; die Genauigkeit hängt von der Klassifikationsqualität in jedem Zeitschritt ab. Hauptmerkmale: direkte Kartierung von Klasse-zu-Klasse-Übergängen; Unabhängigkeit der einzelnen Klassifikationen; ermöglicht heterogene Sensorkombinationen; quantifiziert Übergangshäufigkeiten; identifiziert Veränderungsschwerpunkte. Anwendungsfälle: Überwachung der Entwaldung; Kartierung des Stadtwachstums; Verfolgung der landwirtschaftlichen Landnutzung; Erkennung von Feuchtgebietsverlusten; Bewertung der Lebensraumfragmentierung. Interpretation der Ausgabe: Übergangsmatrizen zeigen auf der Diagonalen die Werte ohne Veränderung und außerhalb der Diagonalen die Übergangshäufigkeiten. Veränderungskarten heben veränderte Pixel hervor; eine übergangskodierte Ausgabe kodiert sowohl Quell- als auch Zielklasse und ermöglicht so die Interpretation. Eine hohe Genauigkeit erfordert hochwertige Klassifikationen; Klassifikationsfehler zu einem der beiden Zeitpunkte pflanzen sich als Fehler der Veränderungserkennung fort. Die Aggregation der Übergänge zeigt dominante Muster (z. B. Wald→Landwirtschaft, Grünland→Siedlung). Subpixel-Übergänge lassen sich mit dem Verfahren nach der Klassifikation nicht erkennen; feinmaßstäbige Veränderungen können übersehen werden.",
            "params": {
              "t1_classified": {
                "label": "T1 klassifiziert",
                "description": "Pfad des klassifizierten Rasters von Datum 1."
              },
              "t2_classified": {
                "label": "T2 klassifiziert",
                "description": "Pfad des klassifizierten Rasters von Datum 2."
              },
              "transition_scale": {
                "label": "Übergangsskala",
                "description": "Skalierungsfaktor der Übergangscodierung (Standard 1000): code = class1 * scale + class2."
              },
              "t1_class_remap": {
                "label": "T1-Klassenzuordnung",
                "description": "Optionale Umcodierungstabelle für die Klassen von Datum 1 als Objekt {\"old\": new, ...}."
              },
              "t2_class_remap": {
                "label": "T2-Klassenzuordnung",
                "description": "Optionale Umcodierungstabelle für die Klassen von Datum 2 als Objekt {\"old\": new, ...}."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), wird t2_classified bei Bedarf in das KBS von t1_classified umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des übergangscodierten Rasters."
              }
            }
          },
          "write_function_memory_insertion": {
            "name": "Write-Function-Memory-Insertion",
            "description": "Erstellt ein gepacktes RGB-Komposit zur Visualisierung von Veränderungen aus zwei oder drei Einzelband-Zeitpunkten.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Einzelbandraster des ersten Datums."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Einzelbandraster des zweiten Datums."
              },
              "input3": {
                "label": "Eingabe 3",
                "description": "Optionales Einzelbandraster des dritten Datums; wenn ausgelassen, wird input2 für den Blaukanal verwendet."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "brdf_normalization": {
            "name": "BRDF-Normalisierung",
            "description": "BRDF-Normierung einer einzelnen Szene mit C-Korrektur oder Minnaert-Ansatz unter Verwendung der Neigungs-/Expositionsgeometrie eines DEM.",
            "params": {
              "input_raster": {
                "label": "Eingaberaster",
                "description": "Zu normalisierendes Eingabe-Reflektanzraster (Einzelband oder Multiband-Stapel)."
              },
              "input_dem": {
                "label": "Eingabe-DEM",
                "description": "Mit der Eingabe koregistriertes DEM-Raster (gleiches Gitter oder wird passend resampelt)."
              },
              "solar_zenith_deg": {
                "label": "Sonnenzenit (Grad)",
                "description": "Sonnenzenitwinkel in Grad zum Aufnahmezeitpunkt."
              },
              "solar_azimuth_deg": {
                "label": "Sonnenazimut (Grad)",
                "description": "Sonnenazimutwinkel in Grad (im Uhrzeigersinn von Norden) zum Aufnahmezeitpunkt."
              },
              "method": {
                "label": "Methode",
                "description": "Korrekturmethode: c_correction (Standard) oder minnaert."
              },
              "minnaert_k": {
                "label": "Minnaert-K",
                "description": "Minnaert-Koeffizient k in [0,1] (Standard 0.5). Nur bei method=minnaert verwendet."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Vertikale Überhöhung für die Berechnung von DEM-Neigung/-Exposition (Standard 1.0)."
              },
              "output_prefix": {
                "label": "Ausgabepräfix",
                "description": "Präfix für Ausgabedateien (Standard brdf_normalized)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des normalisierten Rasters (überschreibt output_prefix im Einzelausgabemodus)."
              }
            }
          },
          "correct_vignetting": {
            "name": "Vignettierung korrigieren",
            "description": "Die Korrektur der Objektivvignettierung entfernt radiometrische Artefakte, die durch die optischen Eigenschaften des Objektivs abseits der optischen Achse entstehen, wenn die Bildränder weniger Licht erhalten als die Bildmitte und dadurch künstliche Helligkeitsgradienten unabhängig von Variationen der Oberflächenreflexion auftreten. Die Vignettierungskorrektur wendet räumlich variierende multiplikative Faktoren an, die aus auf die Sensoreigenschaften kalibrierten Vignettierungsprofilmodellen (Gauß- oder cos⁴-Gesetz-Formulierungen) berechnet werden, und stellt so eine gleichmäßige radiometrische Antwort über das gesamte Bildfeld wieder her. Dieser Vorverarbeitungsschritt ist in der multispektralen und hyperspektralen Fernerkundung entscheidend, wo Vignettierung die Spektralanalyse verfälschen und systematische Fehler in Klassifikations- und Veränderungserkennungsabläufe einbringen würde. Zu den Hauptmerkmalen gehören die automatische Schätzung des Vignettierungsprofils aus Bildstatistiken oder vom Benutzer angegebenen Kalibrierungsparametern, räumlich variierende Korrekturfaktoren, die je Pixel ohne Interpolationsartefakte angewendet werden, eine optionale Maskierung überkorrigierter Randpixel, um eine Verstärkung verrauschter Ränder zu verhindern, sowie eine bandspezifische Korrektur für eine je Spektralband unterschiedliche Vignettierung. Anwendungen sind die Vorverarbeitung für spektrale Klassifikationsalgorithmen, die auf radiometrische Konsistenz angewiesen sind, die Vorbereitung von Mosaiken, bei denen Vignettierungsgrenzen sichtbare Diskontinuitäten verursachen, ein genauer radiometrischer Vergleich innerhalb des Bildrahmens sowie hyperspektrale Analysen, die eine gleichmäßige Beleuchtungsantwort erfordern. Vignettierungskorrigierte Bilder zeigen eine gleichmäßige Helligkeit über das Bildfeld. Die Ausgabe weist keine Randabdunkelung mehr auf und hat eine gleichmäßige radiometrische Antwort von der Bildmitte bis zu den Rändern; stark korrigierte Randpixel können erhöhtes Rauschen zeigen; korrigierte Bilder lassen sich ohne radiometrische Artefakte nahtlos in multispektrale Analyseabläufe integrieren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Rasterbild."
              },
              "pp": {
                "label": "Hauptpunkt",
                "description": "Pfad des Punktvektors (oder typisiertes Vektorobjekt) mit dem Bildhauptpunkt."
              },
              "focal_length": {
                "label": "Brennweite",
                "description": "Brennweite der Kamera in mm (Standard 304.8)."
              },
              "image_width": {
                "label": "Bildbreite",
                "description": "Abstand zwischen linkem und rechtem Bildrand in mm (Standard 228.6)."
              },
              "n": {
                "label": "N",
                "description": "Exponent n des Kosinusmodells (Standard 4.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "dark_object_subtraction": {
            "name": "Dunkelobjektsubtraktion",
            "description": "Dark Object Subtraction (DOS) ist eine einfache, aber wirksame Heuristik zur Entfernung von atmosphärischem Dunst, die weder meteorologische Zusatzdaten noch komplexe Strahlungstransfermodelle erfordert. Das Verfahren nutzt das Prinzip, dass eine Reflexion von null ein Reflexionssignal von null erzeugen sollte (unter Vernachlässigung der Rayleigh-Streuung); jedes Signal, das von optisch schwarzen Oberflächen (tiefes Wasser, dichter Waldschatten, städtischer Asphalt) beobachtet wird, wird der atmosphärischen Pfadstrahldichte durch Aerosolstreuung zugeschrieben. Dieses Werkzeug ermittelt die minimale Digitalzahl jedes Bands im gesamten Bild, interpretiert sie als atmosphärischen Dunst und subtrahiert sie als bandweise konstanten Versatz von allen Pixeln; ausgefeiltere Varianten (DOS2, DOS3, DOS4) berücksichtigen die Rayleigh-Streuung und eine variable aerosoloptische Dicke mithilfe von Vegetationsindizes oder der Clusterung dunkler Pixel. Zu den wichtigsten Fähigkeiten gehören eine Histogrammanalyse zur Isolierung dunkler Objekte und zur Unterscheidung szenenabhängigen Dunstes von echter Nullreflexion, eine optionale Maskierung bekannter stark reflektierender Objekte (Siedlungen, Schnee, Wolken), die die Identifikation dunkler Objekte verzerren würden, eine bandspezifische Dunstkorrektur sowie eine schnelle Berechnung, die sich für Echtzeit- oder großflächige Verarbeitung eignet. Anwendungsfälle sind schnelle Reflexionsabschätzungen, das Monitoring von Vegetation und Wasserqualität, bei dem die absolute Kalibrierung weniger wichtig ist als relative Veränderungen, die schnelle Kartierung in der Katastrophenhilfe sowie ältere Archivdaten, für die keine genauen Aerosolinformationen verfügbar sind. Die Eingabe umfasst Reflexion am oberen Rand der Atmosphäre oder kalibrierte Strahldichte, optionale Landbedeckungsmasken zum Ausschluss heller Objekte sowie Szenenmetadaten. Die Ausgabe besteht aus dunstkorrigierter Reflexion, bandweisen Schätzungen der atmosphärischen Pfadstrahldichte sowie Qualitätskennzeichen, die die Zuverlässigkeit der Identifikation dunkler Objekte angeben (z. B. wenige dunkle Pixel, von Siedlungen dominierte Szene). Obwohl DOS im Vergleich zu Strahlungstransfermodellen grob ist, bleibt es für multitemporale Analysen und die globale Kartierung praktikabel, wenn ausgefeilte atmosphärische Daten nicht verfügbar sind.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Eingabe-Rasterstapel (ein oder mehrere Raster)."
              },
              "percentile": {
                "label": "Perzentil",
                "description": "Dunkelobjekt-Perzentil je Band (Standard 1.0)."
              },
              "clamp_non_negative": {
                "label": "Auf nicht-negativ begrenzen",
                "description": "Wenn wahr, werden korrigierte Werte unter null auf null begrenzt (Standard wahr)."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Eingaben bei abweichendem KBS auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              },
              "output_diagnostic_offsets": {
                "label": "Diagnose-Offsets ausgeben",
                "description": "Optionaler Ausgabepfad des Rasters für die Diagnose der Dunkelobjekt-Offsets je Band."
              }
            }
          },
          "dn_to_toa_reflectance": {
            "name": "DN zu TOA-Reflexion",
            "description": "Die Umrechnung von Digitalzahlen in Reflexion am oberen Rand der Atmosphäre wandelt rohe Sensor-Digitalzahlen in physikalisch aussagekräftige spektrale Reflexionswerte um, indem bandweise radiometrische Kalibrierungskoeffizienten aus den Satellitenmetadaten angewendet werden. Die Umrechnung wendet eine radiometrische Neuskalierung, eine Korrektur der extraterrestrischen spektralen Sonneneinstrahlung, eine Kompensation des Sonnenzenitwinkels und optional eine Normierung des Erde-Sonne-Abstands an, um Reflexionswerte zu erhalten, die über Sensoren, Aufnahmezeitpunkte und geografische Standorte hinweg direkt vergleichbar sind. Die Reflexion am oberen Rand der Atmosphäre gibt den Anteil der einfallenden Sonnenenergie an, der von Zielen an der Erdoberfläche zum Sensor reflektiert wird, bevor atmosphärische Effekte berücksichtigt werden, und dient als Grundlage für quantitative Fernerkundungsanalysen. Zu den Hauptmerkmalen gehören die Anwendung bandweiser Kalibrierungskoeffizienten mit vollständigem Einlesen der Metadaten aus Standard-Satellitenprodukten, die automatische Berechnung der Sonnengeometrie aus Aufnahmezeitstempel und Standort, eine optionale Korrektur des Erde-Sonne-Abstands für saisonale Schwankungen sowie eine flexible Unterstützung mehrerer Sensortypen mit standardisierten Koeffizientenformaten. Die Anwendungen reichen von der quantitativen Veränderungserkennung mit konsistenten physikalischen Einheiten über den absoluten radiometrischen Vergleich multitemporaler Aufnahmen und verschiedener Sensoren und die Berechnung spektraler Vegetationsindizes, die eine genaue Reflexion erfordern, bis zur sensorübergreifenden Validierung bei der Arbeit mit Satellitenkonstellationen. TOA-Reflexion ermöglicht strenge Analyseabläufe und wissenschaftlich belastbare Ergebnisse. Die ausgegebenen Reflexionswerte liegen im Bereich 0-1 (manchmal als 0-10000 für ganzzahlige Genauigkeit ausgedrückt) und stellen dimensionslose Anteile dar; die Metadaten enthalten die verwendeten Kalibrierungskoeffizienten und die Parameter der Sensorgeometrie; negative Werte weisen auf Datenqualitätsprobleme hin, die vor der Analyse eine Maskierung erfordern.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Eingabe-DN-Rasterstapel (ein oder mehrere Raster)."
              },
              "reflectance_mult": {
                "label": "Reflektanz-Multiplikator",
                "description": "Multiplikative(r) Koeffizient(en) je Band, entweder Skalar oder Array in der Größe von inputs."
              },
              "reflectance_add": {
                "label": "Reflektanz-Offset",
                "description": "Additive(r) Koeffizient(en) je Band, entweder Skalar oder Array in der Größe von inputs (Standard 0)."
              },
              "sensor_bundle_root": {
                "label": "Sensor-Bundle-Wurzelverzeichnis",
                "description": "Optionales Landsat-/Sentinel-2-Bundle-Stammverzeichnis zur automatischen Ableitung der Koeffizienten, wenn keine expliziten Koeffizienten angegeben sind."
              },
              "sun_elevation_deg": {
                "label": "Sonnenhöhe (Grad)",
                "description": "Optionaler Sonnenhöhenwinkel in Grad für die Kosinuskorrektur. Wird, falls verfügbar, automatisch aus den Bundle-Metadaten abgeleitet."
              },
              "apply_solar_correction": {
                "label": "Sonnenkorrektur anwenden",
                "description": "Wenn wahr (Standard), wird durch sin(sun_elevation) dividiert."
              },
              "clamp_unit_interval": {
                "label": "Auf Einheitsintervall begrenzen",
                "description": "Wenn wahr (Standard), werden die Ausgaben auf [0, 1] begrenzt."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Eingaben bei abweichendem KBS auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "terrain_corrected_optical_analytics": {
            "name": "Geländekorrigierte optische Analytik",
            "description": "Topografische C-Korrektur multispektraler optischer Bänder mithilfe eines koregistrierten DEM. Gibt einen Stapel der Oberflächenreflexion, den Korrekturfaktor, eine Wolken-/Schattenmaske und die Qualitätskonfidenz aus.",
            "params": {
              "input_dem": {
                "label": "Eingabe-DEM",
                "description": "Mit den optischen Bändern koregistriertes DEM-Raster."
              },
              "bundle_root": {
                "label": "Bundle-Wurzelverzeichnis",
                "description": "Optionales Stammverzeichnis des optischen Sensor-Bundles (derzeit Sentinel-2 SAFE, Landsat oder DIMAP SPOT/Pleiades) zur automatischen Auflösung der benötigten Bänder, der QA (falls verfügbar) und der Solarmetadaten, wenn explizite Eingaben fehlen."
              },
              "input_red": {
                "label": "Eingabe Rot",
                "description": "Raster des roten Bands (optional, wenn bundle_root angegeben ist)."
              },
              "input_nir": {
                "label": "Eingabe NIR",
                "description": "Raster des NIR-Bands (optional, wenn bundle_root angegeben ist)."
              },
              "input_green": {
                "label": "Eingabe Grün",
                "description": "Raster des grünen Bands (optional)."
              },
              "input_blue": {
                "label": "Eingabe Blau",
                "description": "Raster des blauen Bands (optional). Wird automatisch aus den Bundle-Metadaten aufgelöst, wenn bundle_root angegeben ist."
              },
              "solar_mode": {
                "label": "Sonnenmodus",
                "description": "Modus zur Bestimmung der Sonnenwinkel: auto, manual, metadata, datetime_location."
              },
              "solar_zenith_deg": {
                "label": "Sonnenzenit (Grad)",
                "description": "Sonnenzenitwinkel in Grad (im manuellen Modus erforderlich)."
              },
              "solar_azimuth_deg": {
                "label": "Sonnenazimut (Grad)",
                "description": "Sonnenazimut in Grad (im Uhrzeigersinn von Norden, im manuellen Modus erforderlich)."
              },
              "acquisition_datetime_utc": {
                "label": "Aufnahmezeitpunkt (UTC)",
                "description": "Aufnahmezeitstempel in RFC3339 UTC für den Modus datetime_location."
              },
              "latitude": {
                "label": "Breitengrad",
                "description": "Optionale geografische Breite für den Modus datetime_location."
              },
              "longitude": {
                "label": "Längengrad",
                "description": "Optionale geografische Länge für den Modus datetime_location."
              },
              "profile": {
                "label": "Profil",
                "description": "Verarbeitungsprofil: conservative, balanced, fast."
              },
              "cloud_threshold": {
                "label": "Wolkenschwellenwert",
                "description": "Optionaler Wolkenschwellenwert in Einheiten des Quellbands. Wird bei Auslassung automatisch abgeleitet."
              },
              "shadow_threshold": {
                "label": "Schattenschwellenwert",
                "description": "Optionaler Wolkenschatten-Schwellenwert in Einheiten des Quellbands. Wird bei Auslassung automatisch abgeleitet."
              },
              "qa_mask": {
                "label": "QA-Maske",
                "description": "Optionaler Pfad des QA-Maskenrasters."
              },
              "qa_mask_format": {
                "label": "QA-Maskenformat",
                "description": "Codierung der QA-Maske: auto, landsat_qa_pixel, sentinel2_scl, sentinel2_qa60, binary."
              },
              "mask_strategy": {
                "label": "Maskierungsstrategie",
                "description": "Maskierungsstrategie: auto, qa_only, heuristic_only, qa_plus_heuristic."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Vertikale Überhöhung für Neigung/Exposition."
              },
              "output_prefix": {
                "label": "Ausgabepräfix",
                "description": "Präfix für alle Ausgabeartefakte."
              }
            }
          },
          "land_surface_temperature_single_channel": {
            "name": "Landoberflächentemperatur (Einkanal)",
            "description": "Die Ableitung der Landoberflächentemperatur aus einem einzelnen thermischen Infrarotkanal schätzt die radiative Oberflächentemperatur durch Inversion der Strahlungstransfergleichung. Die Digitalzahlen des Sensors werden mit sensorspezifischen Kalibrierungskoeffizienten in spektrale Strahldichte umgerechnet; die Strahldichte wird über die Planck-Funktion mit bandspezifischen thermischen Konstanten in Helligkeitstemperatur invertiert; die Helligkeitstemperatur wird über empirische Emissivitätskorrekturen in die physikalische LST umgerechnet. Die Emissivität wird aus Vegetationsindizes abgeleitet oder direkt angegeben und korrigiert materialabhängige Variationen der thermischen Emissivität. Hauptmerkmale: benötigt ein einzelnes Thermalband; einfache radiometrische Verarbeitung; schnelle Berechnung; keine Mehrkanalanforderung; Schätzung der Emissivität über Vegetationsindizes; direkte Ausgabe der physikalischen Temperatur. Anwendungsfälle: Kartierung städtischer Wärmeinseln; Überwachung von Trockenstress; Erkennung geothermischer Erscheinungen; Verfolgung thermischer Signaturen von Waldbränden; landwirtschaftliches Wassermanagement. Interpretation der Ausgabe: Die Ausgabe ist die radiative Oberflächentemperatur in Kelvin (oder in Celsius, falls umgerechnet). Die Einkanalableitung kann die Effekte des atmosphärischen Wasserdampfs nicht vollständig entfernen; die verbleibende atmosphärische Verzerrung beträgt typischerweise 2-5 K. Emissivitätsfehler pflanzen sich direkt fort: ein Emissivitätsfehler von ±0.05 ≈ ±1-2 K Temperaturfehler. Die vegetationsbasierte Emissivität variiert mit dem NDVI; offener Boden weist eine geringere Emissivität auf als Vegetation. LST-Zeitreihen zeigen Erwärmungs-/Abkühlungstrends; LST-Anomalien > Hintergrund ± 5K weisen auf thermische Erscheinungen hin.",
            "params": {
              "thermal_input": {
                "label": "Thermal-Eingabe",
                "description": "Pfad des Thermalrasters (standardmäßig DN, oder Helligkeitstemperatur bei input_is_brightness_temp=true)."
              },
              "input_is_brightness_temp": {
                "label": "Eingabe ist Helligkeitstemperatur",
                "description": "Wenn wahr, ist thermal_input bereits die Helligkeitstemperatur in Kelvin (Standard falsch)."
              },
              "emissivity_input": {
                "label": "Emissionsgrad-Eingabe",
                "description": "Optionaler Pfad des auf thermal_input ausgerichteten Emissionsgradrasters."
              },
              "emissivity_constant": {
                "label": "Emissionsgrad-Konstante",
                "description": "Rückfall-Emissionsgrad, wenn emissivity_input nicht angegeben ist (Standard 0.98)."
              },
              "sensor_bundle_root": {
                "label": "Sensor-Bundle-Wurzelverzeichnis",
                "description": "Optionales Landsat-Bundle-Stammverzeichnis zur Ableitung der thermischen Strahldichte und der Planck-Konstanten."
              },
              "thermal_band_number": {
                "label": "Thermalbandnummer",
                "description": "Nummer des Thermalbands für die Metadatensuche (Standard 10)."
              },
              "radiance_mult": {
                "label": "Strahldichte-Multiplikator",
                "description": "Multiplikativer Faktor der thermischen Strahldichte für die Umrechnung DN->Strahldichte."
              },
              "radiance_add": {
                "label": "Strahldichte-Offset",
                "description": "Additiver Faktor der thermischen Strahldichte für die Umrechnung DN->Strahldichte."
              },
              "k1_constant": {
                "label": "K1-Konstante",
                "description": "Thermische Planck-Konstante K1."
              },
              "k2_constant": {
                "label": "K2-Konstante",
                "description": "Thermische Planck-Konstante K2."
              },
              "wavelength_um": {
                "label": "Wellenlänge (µm)",
                "description": "Effektive thermische Wellenlänge in Mikrometern (Standard abgeleitet aus thermal_band_number)."
              },
              "output_units": {
                "label": "Ausgabeeinheiten",
                "description": "Ausgabeeinheiten: celsius (Standard) oder kelvin."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), wird emissivity_input bei Bedarf in das KBS von thermal_input umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "land_surface_temperature_split_window": {
            "name": "Landoberflächentemperatur (Split-Window)",
            "description": "Die Split-Window-Ableitung der LST nutzt zwei thermische Infrarotbänder, um Oberflächentemperatur und Emissivität gleichzeitig durch Inversion der Strahlungstransfergleichung zu schätzen. Die unterschiedliche atmosphärische Absorption zwischen zwei Bändern (typischerweise im Bereich 10-12 μm) ermöglicht eine Korrektur des atmosphärischen Wasserdampfs, die die Genauigkeit gegenüber Einkanalverfahren verbessert. Die Helligkeitstemperaturen beider Bänder werden mit einer auf dem Vegetationsanteil basierenden Emissivitätsparametrisierung oder mit vom Benutzer bereitgestellten Emissivitätsgittern invertiert. Hauptmerkmale: erfordert zwei Thermalbänder; atmosphärische Korrektur über differentielle Absorption; gleichzeitige Ableitung von Temperatur und Emissivität; veröffentlichte Algorithmen für Standardsensoren; bessere atmosphärische Kompensation als Einkanalverfahren. Anwendungsfälle: Kartierung städtischer Wärmeinseln; Erkennung landwirtschaftlicher Dürre; Erkennung geothermischer Erscheinungen; Studien zur Wechselwirkung zwischen Land und Atmosphäre; Erkennung vulkanischer/thermischer Anomalien. Interpretation der Ausgabe: Die Ausgabe ist die radiative Oberflächentemperatur mit verbesserter atmosphärischer Korrektur. Die Split-Window-Ableitung verringert die Verzerrung durch atmosphärischen Wasserdampf auf <1-2 K, verglichen mit Fehlern von 2-5 K beim Einkanalverfahren. Der Zielkonflikt zwischen Temperatur und Emissivität bleibt bestehen: Bereiche mit hohem Vegetationsindex weisen eine geringe Emissivität auf und erfordern eine sorgfältige Interpretation. Heterogene Oberflächen (gemischte Vegetation/Boden) zeigen Zwischenwerte. Die zeitliche Konsistenz verbessert die Zuverlässigkeit der Veränderungserkennung; LST-Trends > ±3K weisen auf deutliche thermische Veränderungen hin.",
            "params": {
              "thermal1_input": {
                "label": "Thermal-Eingabe 1",
                "description": "Pfad des ersten Thermalrasters (z. B. Landsat B10)."
              },
              "thermal2_input": {
                "label": "Thermal-Eingabe 2",
                "description": "Pfad des zweiten Thermalrasters (z. B. Landsat B11)."
              },
              "input_is_brightness_temp": {
                "label": "Eingabe ist Helligkeitstemperatur",
                "description": "Wenn wahr, sind die Thermaleingaben bereits Helligkeitstemperaturen in Kelvin (Standard falsch)."
              },
              "emissivity_mean_input": {
                "label": "Eingabe mittlerer Emissionsgrad",
                "description": "Optionaler Pfad des Rasters des mittleren Emissionsgrads."
              },
              "emissivity_delta_input": {
                "label": "Eingabe Emissionsgrad-Differenz",
                "description": "Optionaler Pfad des Rasters der Emissionsgraddifferenz (epsilon1 - epsilon2)."
              },
              "emissivity_mean_constant": {
                "label": "Konstante mittlerer Emissionsgrad",
                "description": "Rückfallkonstante des mittleren Emissionsgrads, wenn emissivity_mean_input fehlt (Standard 0.98)."
              },
              "emissivity_delta_constant": {
                "label": "Konstante Emissionsgrad-Differenz",
                "description": "Rückfallkonstante der Emissionsgraddifferenz, wenn emissivity_delta_input fehlt (Standard 0.0)."
              },
              "sensor_bundle_root": {
                "label": "Sensor-Bundle-Wurzelverzeichnis",
                "description": "Optionales Landsat-Bundle-Stammverzeichnis zur Ableitung der thermischen Strahldichte und der Planck-Konstanten."
              },
              "thermal_band1_number": {
                "label": "Thermalband-1-Nummer",
                "description": "Bandnummer für die Metadatensuche von thermal1_input (Standard 10)."
              },
              "thermal_band2_number": {
                "label": "Thermalband-2-Nummer",
                "description": "Bandnummer für die Metadatensuche von thermal2_input (Standard 11)."
              },
              "radiance1_mult": {
                "label": "Strahldichte-1-Multiplikator",
                "description": "Multiplikativer Strahldichtefaktor für Band 1."
              },
              "radiance1_add": {
                "label": "Strahldichte-1-Offset",
                "description": "Additiver Strahldichtefaktor für Band 1."
              },
              "k1_1": {
                "label": "K1 1",
                "description": "Planck-Konstante K1 für Band 1."
              },
              "k2_1": {
                "label": "K2 1",
                "description": "Planck-Konstante K2 für Band 1."
              },
              "radiance2_mult": {
                "label": "Strahldichte-2-Multiplikator",
                "description": "Multiplikativer Strahldichtefaktor für Band 2."
              },
              "radiance2_add": {
                "label": "Strahldichte-2-Offset",
                "description": "Additiver Strahldichtefaktor für Band 2."
              },
              "k1_2": {
                "label": "K1 2",
                "description": "Planck-Konstante K1 für Band 2."
              },
              "k2_2": {
                "label": "K2 2",
                "description": "Planck-Konstante K2 für Band 2."
              },
              "coeff_a0": {
                "label": "Koeffizient A0",
                "description": "Split-Window-Koeffizient a0 (Standard 0.0)."
              },
              "coeff_a1": {
                "label": "Koeffizient A1",
                "description": "Split-Window-Koeffizient a1 für den T1-Term (Standard 1.0)."
              },
              "coeff_a2": {
                "label": "Koeffizient A2",
                "description": "Split-Window-Koeffizient a2 für den (T1-T2)-Term (Standard 0.0)."
              },
              "coeff_a3": {
                "label": "Koeffizient A3",
                "description": "Split-Window-Koeffizient a3 für den (T1-T2)^2-Term (Standard 0.0)."
              },
              "coeff_a4": {
                "label": "Koeffizient A4",
                "description": "Split-Window-Koeffizient a4 für den (1-emissivity_mean)-Term (Standard 0.0)."
              },
              "coeff_a5": {
                "label": "Koeffizient A5",
                "description": "Split-Window-Koeffizient a5 für den emissivity_delta-Term (Standard 0.0)."
              },
              "output_units": {
                "label": "Ausgabeeinheiten",
                "description": "Ausgabeeinheiten: celsius (Standard) oder kelvin."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden ergänzende Raster bei Bedarf in das KBS von thermal1_input umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "ndvi_based_emissivity": {
            "name": "NDVI-basierte Emissivität",
            "description": "Die NDVI-basierte Schätzung der Landoberflächenemissivität leitet die thermische Breitbandemissivität aus dem aus dem NDVI berechneten Vegetationsanteil ab und ermöglicht so thermische Strahlungstransferkorrekturen für die Ableitung der Landoberflächentemperatur aus thermischen Infrarot-Satellitendaten. Der Algorithmus berechnet den NDVI aus der Rot- und Nahinfrarotreflexion, transformiert den NDVI in den Vegetationsanteil und wendet dann empirische Beziehungen zwischen Vegetationsanteil und Emissivität an, die durch Feldmessungen und simulierten Strahlungstransfer validiert wurden. Vegetation beeinflusst die thermische Emissivität erheblich; mehr Vegetation erhöht die Emissivität auf etwa 0.99, während die Emissivität offenen Bodens je nach Bodenzusammensetzung und Oberflächenrauheit etwa 0.90-0.98 beträgt. Zu den Hauptmerkmalen gehören die automatische Berechnung des Vegetationsanteils aus dem NDVI ohne Feldkalibrierung, standardisierte empirische Beziehungen, die auf der physikalischen Strahlungstransfertheorie beruhen, eine optionale Sensitivitätsanalyse zur Untersuchung von Emissivitätsschwankungen sowie die direkte Kompatibilität mit thermischen Infrarot-Satellitendaten. Anwendungen sind die Ableitung der Landoberflächentemperatur aus thermischen Satellitendaten, die genaue Emissivitätskorrekturen erfordern (Landsat, MODIS, Sentinel-3), die Analyse städtischer Wärmeinseln mit Korrektur variabler Vegetation, die thermische Modellierung in wasserwirtschaftlichen und landwirtschaftlichen Anwendungen sowie Klimaanwendungen, die konsistente globale thermische Datensätze erfordern. Die NDVI-basierte Emissivität ermöglicht eine genaue thermische Korrektur. Ausgegeben werden ein Emissivitätsraster (0-1) für die thermische Strahlungstransferkorrektur, der Vegetationsanteil als Zwischenprodukt zur Interpretation sowie Metadaten, die die empirischen Beziehungen und die angenommenen Boden-/Oberflächeneigenschaften dokumentieren; die Emissivitätswerte geben Aufschluss über die Unsicherheit der thermischen Korrektur und die Eignung für bestimmte Anwendungen.",
            "params": {
              "red_input": {
                "label": "Rot-Eingabe",
                "description": "Pfad des Rot-Band-Rasters."
              },
              "nir_input": {
                "label": "NIR-Eingabe",
                "description": "Pfad des NIR-Band-Rasters."
              },
              "ndvi_soil": {
                "label": "NDVI Boden",
                "description": "NDVI-Schwellenwert für den Anteil offenen Bodens (Standard 0.2)."
              },
              "ndvi_vegetation": {
                "label": "NDVI Vegetation",
                "description": "NDVI-Schwellenwert für den Anteil vollständiger Vegetation (Standard 0.5)."
              },
              "emissivity_soil": {
                "label": "Emissionsgrad Boden",
                "description": "Angenommener Emissionsgrad des Bodens (Standard 0.97)."
              },
              "emissivity_vegetation": {
                "label": "Emissionsgrad Vegetation",
                "description": "Angenommener Emissionsgrad der Vegetation (Standard 0.99)."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), wird nir_input bei Bedarf in das KBS von red_input umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "continuum_removal": {
            "name": "Kontinuumsentfernung",
            "description": "Die Kontinuumsentfernung normiert multispektrale Spektren, indem die obere konvexe Hülle (das Kontinuum), die das Spektrum umhüllt, geschätzt und jedes Band durch den entsprechenden Kontinuumswert geteilt wird. Entfernt die allgemeine spektrale Steigung und Helligkeitsschwankungen und ermöglicht so eine verbesserte Darstellung von Absorptionsmerkmalen (Banden, Tiefen). Absorptionstiefen und -positionen werden standardisiert, was die Identifikation von Mineralen/Materialien über Spektralbibliotheken ermöglicht. Die Kontinuumslinie wird über einen Algorithmus der konvexen Hülle berechnet, der lokale Maxima über den Spektralbereich verbindet. Hauptmerkmale: entfernt das spektrale Kontinuum; hebt Absorptionsmerkmale hervor; normiert Helligkeitsschwankungen; ermöglicht den Abgleich mit Spektralbibliotheken; standardisiert die spektrale Form. Anwendungsfälle: Mineralidentifikation; Materialklassifikation; spektrale Vegetationsanalyse; Erkennung spektraler Anomalien; Kartierung von Absorptionsmerkmalen. Interpretation der Ausgabe: Kontinuumsbereinigte Spektren weisen Absorptionsmerkmale (Werte <1.0) auf, die materialspezifische Banden anzeigen. Absorptionstiefen geben die Stärke des Merkmals an; flache Merkmale (<0.2) weisen auf Nebenbestandteile hin; tiefe Merkmale (>0.5) auf dominante Absorptionen. Die Lage der Merkmale im Wellenlängenraum ermöglicht die Materialidentifikation über Referenzbibliotheken. Flache kontinuumsbereinigte Spektren (nahe 1.0) weisen auf spektral neutrale Materialien hin.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Eingabe-Rasterstapel (ein Raster je Band)."
              },
              "wavelengths": {
                "label": "Wellenlängen",
                "description": "Optionales streng steigendes Wellenlängen-Array passend zur Länge von inputs."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Multiband-Rasters."
              }
            }
          },
          "linear_spectral_unmixing": {
            "name": "Lineare spektrale Entmischung",
            "description": "Die lineare spektrale Entmischung zerlegt den multispektralen Vektor jedes Pixels in eine nichtnegative Linearkombination von Endmember-Spektren, die reine Materialsignaturen darstellen. Eine nichtnegative Kleinste-Quadrate-Optimierung löst min ||y - Ax||² unter der Nebenbedingung x ≥ 0, wobei y das Pixelspektrum ist, A die Endmember-Signaturen enthält und x die Abundanzanteile darstellt. Eine Summe-gleich-eins-Bedingung wird erzwungen, damit die Abundanzwerte physikalische Anteile darstellen. Endmember werden aus Trainingsdaten oder Bibliotheksdatenbanken abgeleitet oder über Algorithmen zur Endmember-Extraktion gewonnen. Hauptmerkmale: Schätzung von Materialien auf Subpixelebene; physikalische Interpretation der Abundanzanteile; unterstützt mehrere Endmember; Ausgabe auf gültige Bereiche [0,1] beschränkt; ermöglicht die Erkennung von Materialveränderungen. Anwendungsfälle: Kartierung der Abundanz von Landbedeckungen; Schätzung der Mineralzusammensetzung; Inventur städtischer Materialien; Anteile von Vegetation/Boden/versiegelter Fläche; Klassifikation auf Basis von Spektralbibliotheken. Interpretation der Ausgabe: Die ausgegebenen Abundanzkarten zeigen Materialanteile je Pixel, die sich zu 1.0 summieren. Abundanzen <0.1 weisen auf Nebenbestandteile hin; Abundanzen >0.7 auf dominante Materialien. Der Restfehler zeigt die Qualität der Entmischung an; geringe Residuen deuten auf eine gute spektrale Anpassung hin; hohe Residuen auf nicht passende Endmember oder komplexe Pixel.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Eingabe-Rasterstapel (ein Raster je Band)."
              },
              "endmembers": {
                "label": "Endmember",
                "description": "Endmember-Signaturen als Array von Objekten {name, values} oder numerischen Arrays."
              },
              "sum_to_one": {
                "label": "Summe gleich eins",
                "description": "Wenn wahr (Standard), werden nicht-negative Anteile auf die Summe eins normiert."
              },
              "iterations": {
                "label": "Iterationen",
                "description": "Iterationsanzahl des projizierten Gradienten (Standard 80)."
              },
              "step_size": {
                "label": "Schrittweite",
                "description": "Schrittweite des projizierten Gradienten (Standard 0.05)."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Multiband-Anteilsrasters."
              },
              "output_residual": {
                "label": "Residuum ausgeben",
                "description": "Optionaler Ausgabepfad des Rasters des Residuen-RMS."
              }
            }
          },
          "minimum_noise_fraction": {
            "name": "Minimum Noise Fraction",
            "description": "Die Minimum Noise Fraction transformiert hyperspektrale Daten in einem zweistufigen Verfahren: Schätzung der Rauschkovarianz, gefolgt von Rauschweißung und Hauptkomponentenanalyse. Die Rauschweißung dekorreliert das Rauschen über die Bänder; die PCA im geweißten Raum ermittelt signaldominierte Richtungen. Die Ausgabekomponenten sind nach dem Signal-Rausch-Verhältnis geordnet, wobei frühe Komponenten das Signal und spätere Komponenten das Rauschen darstellen. Ermöglicht eine Rauschminderung durch Abschneiden von Komponenten ohne die Artefakte herkömmlicher Glättung. Hauptmerkmale: trennt Signal von Rauschen; konzentriert das Rauschen in späten Komponenten; die Komponentenauswahl ermöglicht Rauschfilterung; bewahrt die spektrale Treue; ermöglicht Dimensionsreduktion. Anwendungsfälle: Entrauschen hyperspektraler Bilder; Dimensionsreduktion für die Klassifikation; Signalverstärkung; Charakterisierung des Rauschens; Bewertung der Bildqualität. Interpretation der Ausgabe: Die ersten 1-3 MNF-Komponenten enthalten typischerweise 70-90% des Signals; spätere Komponenten werden zunehmend verrauschter. Das Abschneiden von Komponenten (Beibehalten der ersten N Komponenten) entfernt Rauschen und bewahrt zugleich die wesentliche spektrale Information. MNF-Komponentenbilder ermöglichen eine visuelle Bewertung des Rauschens; die Standardabweichung der späten Komponenten gibt das Rauschniveau an.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Eingabe-Rasterstapel (ein Raster je Band)."
              },
              "num_components": {
                "label": "Anzahl Komponenten",
                "description": "Anzahl der MNF-Ausgabekomponenten (Standard: alle Bänder)."
              },
              "noise_mode": {
                "label": "Rauschmodus",
                "description": "Modus des Rauschschätzers: 'difference_x' (Standard) oder 'difference_y'."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Multiband-Rasters der MNF-Komponenten."
              },
              "output_inverse": {
                "label": "Inverse ausgeben",
                "description": "Optionaler Pfad des aus den beibehaltenen MNF-Komponenten rekonstruierten Multiband-Rasters."
              }
            }
          },
          "spectral_angle_mapper": {
            "name": "Spectral Angle Mapper",
            "description": "Spectral Angle Mapping klassifiziert Pixel, indem spektrale Winkel zwischen dem Spektrum jedes Pixels und Referenzspektren einer Bibliothek berechnet und die Pixel dem Bibliotheksspektrum mit dem kleinsten Winkel zugewiesen werden, was der größten spektralen Ähnlichkeit unabhängig von der Beleuchtungsintensität entspricht. SAM behandelt jedes Pixel- und Referenzspektrum als Vektor im N-dimensionalen Spektralraum und berechnet die Winkel zwischen den Vektoren über Skalarprodukte und Arkuskosinus-Transformationen. Diese auf spektralen Winkeln beruhende Klassifikation ist invariant gegenüber Beleuchtungs- und Topografieeffekten, die die Gesamthelligkeit skalieren, aber die spektrale Form erhalten, und ist daher robust in komplexem Gelände und bei wechselnden Aufnahmebedingungen. Zu den Hauptmerkmalen gehören eine automatische Festlegung des Schwellenwerts für den spektralen Winkel, die eine probabilistische Klassifikationskonfidenz ermöglicht, der Import von Referenzbibliotheken mit vom Benutzer bereitgestellten spektralen Signaturen aus Feldproben oder Spektralbibliotheken, Beleuchtungsinvarianz, die wechselnde Lichtverhältnisse bewältigt und dabei die spektrale Unterscheidung bewahrt, sowie eine schnelle Berechnung, die die Echtzeitklassifikation großer Bilder ermöglicht. Häufige Anwendungen sind die Materialidentifikation und geologische Kartierung mit USGS-Spektralbibliotheken, die Klassifikation von Vegetationsarten durch Kombination multispektraler Satellitendaten mit im Feld erhobenen Spektren, die Mineralprospektion in hyperspektralen Befliegungen sowie die Genauigkeitsbewertung durch Vergleich von Bildspektren mit am Boden erhobenen Referenzsignaturen. Die SAM-Ausgabe ermöglicht eine sichere Materialidentifikation anhand spektraler Formsignaturen. Die Klassifikationsausgabe ist ein Einzelbandbild mit ganzzahligen Klassenlabels entsprechend den Bibliothekseinträgen; ein Konfidenzraster zeichnet optional die minimalen spektralen Winkel für jedes Pixel auf und ermöglicht so eine schwellenwertbasierte Filterung; die Ausgabe ermöglicht eine direkte Materialidentifikation und konfidenzbasiertes Filtern.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Eingabe-Rasterstapel (ein Raster je Band)."
              },
              "endmembers": {
                "label": "Endmember",
                "description": "Endmember-Signaturen als Array von Objekten {name, values} oder numerischen Arrays."
              },
              "threshold_angle_deg": {
                "label": "Winkelschwellenwert (Grad)",
                "description": "Optionaler maximal akzeptierter Spektralwinkel in Grad; nicht zugeordnete Pixel erhalten Klasse 0."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Klassenrasters."
              },
              "output_angle": {
                "label": "Winkel ausgeben",
                "description": "Optionaler Ausgabepfad des Rasters des minimalen Spektralwinkels (Grad)."
              }
            }
          },
          "spectral_library_matching": {
            "name": "Abgleich mit Spektralbibliothek",
            "description": "Der Abgleich mit Spektralbibliotheken klassifiziert, indem Pixelspektren des Bilds mit Referenzspektren einer Bibliothek anhand mehrerer Ähnlichkeitsmaße verglichen werden, darunter der spektrale Winkel (Winkel zwischen den Spektralvektoren), die euklidische Distanz (Betragsdifferenz) und die spektrale Informationsdivergenz. Der Algorithmus übernimmt eine vom Benutzer bereitgestellte Referenz-Spektralbibliothek mit Spektren bekannter Materialien/Klassen, berechnet Ähnlichkeitsmaße zwischen jedem Bildpixel und den Bibliothekseinträgen, ermittelt das am besten passende Bibliotheksspektrum (kleinster Winkel, kleinste Distanz oder kleinste Divergenz) und gibt Klassenlabels mit optionalen Konfidenz-/Ähnlichkeitswerten aus. Der Bibliotheksabgleich ermöglicht eine Materialidentifikation ohne Feld-Trainingsstichproben, indem Referenzspektren des USGS, aus Feldaufnahmen oder aus der Laborspektroskopie genutzt werden. Zu den Hauptmerkmalen gehören mehrere Ähnlichkeitsmaße, deren Auswahl auf bestimmte spektrale Eigenschaften und Klassenverteilungen abgestimmt werden kann, ein flexibler Bibliotheksimport, der verschiedene Formate von Spektralbibliotheken unterstützt, eine optionale Quantifizierung von Konfidenz/Unsicherheit sowie eine direkte Ausgabe identifizierbarer Materialien. Anwendungen sind die geologische Kartierung mit der USGS-Spektralbibliothek für die Mineralogie, die Vegetationsklassifikation mit spektralen Referenzbibliotheken für Pflanzen, die Identifikation von Baumaterialien in Siedlungsgebieten sowie die Analyse hyperspektraler Befliegungen. Der Abgleich mit Spektralbibliotheken ermöglicht eine automatische Materialidentifikation. Die Ausgabe umfasst eine klassifizierte Karte mit den IDs der Bibliothekseinträge als Klassenlabels, ein Ähnlichkeits-/Konfidenzraster zur Quantifizierung der Übereinstimmungsqualität sowie optional einen vollständigen Stapel der spektralen Winkel/Distanzen für jeden Bibliothekseintrag, der eine schwellenwertbasierte Filterung ermöglicht; die Metadaten dokumentieren die Quelle der Referenzbibliothek und das verwendete Ähnlichkeitsmaß.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Eingabe-Rasterstapel (ein Raster je Band)."
              },
              "library": {
                "label": "Bibliothek",
                "description": "Einträge der Spektralbibliothek als Array von Objekten {name, values} oder numerischen Arrays."
              },
              "library_csv": {
                "label": "Bibliotheks-CSV",
                "description": "Optionaler Pfad der CSV-Spektralbibliothek (Zeilen name,b1,b2,... oder b1,b2,...). Wird verwendet, wenn 'library' nicht angegeben ist."
              },
              "metric": {
                "label": "Kennzahl",
                "description": "Zuordnungsmetrik: 'sam' (Standard), 'euclidean' oder 'sid'."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Klassenrasters."
              },
              "output_score": {
                "label": "Score ausgeben",
                "description": "Optionaler Ausgabepfad des Rasters der besten Übereinstimmungswerte (Winkel oder Distanz)."
              }
            }
          },
          "canny_edge_detection": {
            "name": "Canny-Kantenerkennung",
            "description": "Wendet die mehrstufige Canny-Kantenerkennung an (Gauß-Weichzeichnung → Sobel-Gradient → Non-Maximum-Suppression → doppelter Schwellenwert → Hysterese).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters (Einzelband oder gepacktes RGB)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Standardabweichung des Gauß-Glättungskernels in Pixeln. Standard: 0.5."
              },
              "low_threshold": {
                "label": "Unterer Schwellenwert",
                "description": "Unterer Hysterese-Schwellenwert (Anteil 0–1 des maximalen Gradienten). Standard: 0.05."
              },
              "high_threshold": {
                "label": "Oberer Schwellenwert",
                "description": "Oberer Hysterese-Schwellenwert (Anteil 0–1 des maximalen Gradienten). Standard: 0.15."
              },
              "add_back": {
                "label": "Zurückaddieren",
                "description": "Wenn wahr, werden Kantenpixel im Originalbild auf null gesetzt, statt eine binäre Kantenkarte zu erzeugen. Standard: falsch."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "corner_detection": {
            "name": "Eckenerkennung",
            "description": "Identifiziert Eckenmuster in binären Rastern mithilfe von Hit-and-Miss-Vorlagen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "laplacian_filter": {
            "name": "Laplace-Filter",
            "description": "Der Laplace-Filter berechnet die zweite räumliche Ableitung der Bildintensität und ermöglicht so eine leistungsfähige Kantenerkennung durch isotrope (richtungsunabhängige) Gradientenmessung. Die Implementierung wendet einen festen Kernel an, der den Laplace-Operator (Summe der zweiten Ableitungen in x- und y-Richtung) annähert, und erfasst Intensitätsänderungen unabhängig von der Kantenausrichtung. Anders als Richtungsfilter behandelt dieser Ansatz alle Kantenrichtungen gleich und eignet sich daher ideal für die Merkmalserkennung, die Orientierungsunabhängigkeit erfordert. Die mathematische Grundlage bildet die diskrete Näherung: ∇²I ≈ I(x+1,y) + I(x-1,y) + I(x,y+1) + I(x,y-1) - 4·I(x,y). Zu den Hauptmerkmalen gehören die Fähigkeit zur Nulldurchgangserkennung (echte Kanten liegen dort, wo die Ausgabe null kreuzt), die Unempfindlichkeit gegenüber der Kantenrichtung und die Fähigkeit, Übergänge von hell nach dunkel und von dunkel nach hell gleichermaßen zu erkennen. Die Laplace-Filterung ist besonders stark in der geologischen Kartierung, wo Strukturgrenzen als Nulldurchgänge erscheinen, bei der Abgrenzung von Vegetationsgrenzen, der Extraktion von Straßennetzen aus hochaufgelösten Bildern und der Erkennung von Gebäudegrundrissen. Die Interpretation der Ausgabe beruht auf dem Verständnis der Vorzeichenwechsel: stark positive Werte weisen auf lokale dunkle Minima hin, negative Werte auf lokale helle Maxima, und Nulldurchgänge markieren echte Kanten. Die Ausgabe reicht bei 8-Bit-Quellbildern je nach lokalem Kontrast typischerweise von -1000 bis +1000. Ein hoher Ausgabebetrag weist auf scharfe, klar definierte Kanten hin; ein geringer Betrag deutet auf allmähliche Übergänge hin. Die Nulldurchgangserkennung erfordert eine sorgfältige Wahl des Schwellenwerts. Beachten Sie, dass der Laplace-Operator rauschempfindlich ist (er verstärkt hochfrequentes Rauschen), weshalb vor der Anwendung häufig eine Vorfilterung mit Gauß-Glättung empfohlen wird.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "variant": {
                "label": "Variante",
                "description": "Kernelvariante: 3x3(1), 3x3(2), 3x3(3), 3x3(4), 5x5(1), 5x5(2)."
              },
              "clip_amount": {
                "label": "Beschneidungsbetrag",
                "description": "Optionaler symmetrischer Beschneidungsprozentsatz der Randbereiche (0-40)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "laplacian_of_gaussians_filter": {
            "name": "Laplacian-of-Gaussian-Filter",
            "description": "Führt eine Laplacian-of-Gaussians-Kantenverstärkung (LoG) durch, die Gauß-Glättung mit Laplace-Kantenerkennung kombiniert. Rechnerisch über eine Difference-of-Gaussians (DoG) angenähert. Glättet zunächst das Bild (verringert das Rauschen) und wendet dann den Laplace-Operator an (erkennt Kanten). Klassisches mehrskaliges Verfahren der Kantenerkennung. Die Nulldurchgangserkennung auf der LoG-Ausgabe ermittelt genaue Kantenpositionen. LoG ist Standard für die Kantenerkennung im Skalenraum: Der Gauß-Filter entfernt Rauschen, der Laplace-Operator verstärkt Kanten. Der Sigma-Parameter steuert den Maßstab der erkannten Kanten: ein kleines Sigma erkennt feine Kanten, ein großes Sigma breite Kanten. LoG wird aus Effizienzgründen über DoG angenähert. Mehrere Sigma-Werte ermöglichen eine mehrskalige Kantenerkennung (Identifikation von Merkmalen in verschiedenen Maßstäben). Anwendungen: (1) robuste Kantenerkennung (rauschresistent), (2) mehrskalige Kantenerkennung (mehrere Sigma verwenden), (3) Kantenlokalisierung über Nulldurchgänge, (4) Vorverarbeitung für die Segmentierung, (5) Blob-Erkennung über LoG-Nulldurchgänge. Arbeitsablauf: LoG anwenden→Nulldurchgänge ermitteln→Kanten verfolgen→Vektorisierung oder Weiterverarbeitung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Vom LoG-Kernel verwendetes Gauß-Sigma (0.5-20.0, Standard 0.75)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "prewitt_filter": {
            "name": "Prewitt-Filter",
            "description": "Der Prewitt-Operator führt eine gradientenbasierte Kantenerkennung ähnlich wie Sobel durch, verwendet jedoch alternative Kernelgewichte, die für andere Rauscheigenschaften optimiert sind. Die Implementierung nutzt zwei 3×3-Faltungskernel, die die Richtungsableitungen in x und y mit gleichmäßiger Gewichtung der mittleren und angrenzenden Zeilen/Spalten berechnen, im Unterschied zu Sobels Betonung der Mitte. Der Gradientenbetrag kombiniert die Richtungskomponenten über √(Gx² + Gy²) und liefert eine gleichmäßige Richtungsantwort. Die mathematische Grundlage bilden diskrete Differentiationsnäherungen, die alle beitragenden Pixel gleich gewichten, statt die Mitte hervorzuheben. Zu den Hauptmerkmalen gehören ein leicht anderes Rauschverhalten als bei Sobel (bei extrem verrauschten Bildern mitunter überlegen), eine echte Zerlegung in Betrag und Richtung für anspruchsvolle Kantenanalysen, Recheneffizienz, da nur Standardfaltungsoperationen nötig sind, sowie eine erwiesene Wirksamkeit bei Radar-, optischen und thermischen Bildern. Die Prewitt-Filterung ist besonders stark bei der Analyse von SAR-Bildern, wo die gleichmäßige Gewichtung Speckle-Artefakte besser verringert als Sobel, bei der Erkennung thermischer Anomalien mit Betonung linearer Objekte und bei der multispektralen Kantenextraktion, die eine richtungsunabhängige Verarbeitung erfordert. Die Interpretation der Ausgabe entspricht der von Sobel: Der Betrag gibt die Kantenstärke an (höher = schärfer), die über atan2(Gy, Gx) berechnete Richtung liefert die Kantenausrichtung im Bogenmaß. Typische Beträge liegen bei 8-Bit-Eingaben zwischen 0-256; Beträge über 80 weisen im Allgemeinen auf deutliche Kanten hin. Die Richtungswerte reichen von -π bis +π; 0 Radiant bezeichnet rein horizontale Kanten, ±π/2 rein vertikale Kanten. Die gleichmäßige Kernelgewichtung erzeugt typischerweise etwas glattere Gradientenantworten als Sobel, was für spärliche oder feine Bildmerkmale vorteilhaft sein kann. Wenden Sie ergänzend eine Medianfilterung an, um rauschbedingte Falschpositive zu verringern. Kombinieren Sie die Richtungsausgabe mit einer Schwellenwertwahl für Kantenverknüpfung und Grenzextraktion, die für Segmentierungspipelines entscheidend sind.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "clip_tails": {
                "label": "Ränder beschneiden",
                "description": "Optionaler symmetrischer Beschneidungsprozentsatz der Randbereiche (0-40)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "roberts_cross_filter": {
            "name": "Roberts-Cross-Filter",
            "description": "Der Roberts-Cross-Filter ist einer der frühesten Kantenerkennungsoperatoren und berechnet Bildgradienten mit einem einfachen, aber wirksamen diagonalen 2×2-Kreuzkernel bei minimalem Rechenaufwand. Dieser Operator verwendet zwei orthogonale 2×2-Matrizen, die gegenüber der horizontal-vertikalen Ausrichtung um 45° gedreht sind, und erzeugt so kreuzförmige Faltungsmasken, die Kanten unter Betonung von Ecken und diagonalen Übergängen erkennen. Der Filter wendet getrennte Kernel für die X- und Y-Gradienten an und berechnet den Betrag über die Summe der Absolutwerte oder die euklidische Norm. Zu den Hauptmerkmalen gehören eine außergewöhnliche Recheneffizienz dank des kleinen 2×2-Kernels, ein minimaler Speicherbedarf und eine schnelle Verarbeitung großer Rasterdatensätze. Roberts Cross ist besonders wirksam bei der Erkennung feinmaßstäbiger Merkmale und scharfer Übergänge in hochaufgelösten Bildern. Hauptanwendungsfälle sind die schnelle Kantenerkennung in zeitkritischen Anwendungen, die Echtzeitverarbeitung von Videoströmen, eine vorläufige Grenzerkennung vor weitergehenden Algorithmen sowie ressourcenbeschränkte Umgebungen. Die Anwendungen reichen von der Vorverarbeitung von Luftbildbefliegungen über die Qualitätsbewertung von Satellitenbildern und die Merkmalsextraktion für Machine-Learning-Pipelines bis zu mobilen GIS-Implementierungen. Die Ausgabe zeigt Kantenpositionen als Pixel mit hohem Betrag, an denen spektrale Änderungen innerhalb der 2×2-Nachbarschaft auftreten. Hintergrundbereiche zeigen typischerweise Werte nahe null; Kanten erscheinen als helle lineare Strukturen, die Grenzen zwischen unterschiedlichen Landbedeckungsklassen anzeigen. Die Ausgabe ist naturgemäß spärlich und enthält nur dort Kanten, wo die Gradienten die Schwellen der Rechengenauigkeit überschreiten. Wenden Sie den Filter bei multispektralen Bildern auf jedes Band einzeln an oder berechnen Sie zuerst einen normierten Differenzindex. Nach der Anwendung von Roberts folgt häufig eine Kantenverdünnung als Nachbearbeitung, um die Ausgabe für Abläufe der Vektorkonvertierung aufzubereiten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "clip_amount": {
                "label": "Beschneidungsbetrag",
                "description": "Optionaler symmetrischer Beschneidungsprozentsatz der Randbereiche (0-50)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "sobel_filter": {
            "name": "Sobel-Filter",
            "description": "Der Sobel-Operator erkennt Kanten durch richtungsabhängige Gradientenschätzung in x-Richtung (horizontal) und y-Richtung (vertikal) und kombiniert orthogonale Ableitungskernel zu einer einheitlichen Betragsdarstellung. Die Implementierung wendet zwei 3×3-Faltungskernel unabhängig voneinander an (einer betont horizontale, einer vertikale Kanten) und kombiniert die Ergebnisse dann über die euklidische Norm: Betrag = √(Gx² + Gy²). Dieser separierbare Ansatz verringert den Rechenaufwand bei gleichbleibender Genauigkeit der Kantenerkennung. Die mathematische Grundlage bilden diskrete Näherungen der Bildgradienten, wobei die Kernelgewichte die mittleren Pixel stärker gewichten, um die Robustheit gegenüber Rauschen zu verbessern. Zu den Hauptmerkmalen gehören eine richtungsabhängige Gradientenmessung zur Bestimmung der Kantenausrichtung, ein relativ geringer Rechenaufwand, eine erwiesene Wirksamkeit bei Satelliten- und Luftbildern sowie ein minimaler Bedarf an Parameterabstimmung. Die Sobel-Filterung findet breite Anwendung bei der Berechnung von Geländeneigung und Exposition, der Extraktion von Objektgrenzen in Objekterkennungsabläufen, der Abgrenzung von Flussnetzen aus DEM-Daten und der Kartierung von Infrastruktur (Straßen, Gebäude, Stromleitungen) aus hochaufgelösten Bildern. Bei der Interpretation der Ausgabe gibt der Betrag die Kantenstärke an (höhere Werte = schärfere Übergänge), während die Richtungskomponenten (Gx, Gy) eine Orientierungsanalyse ermöglichen. Typische Gradientenbeträge liegen bei 8-Bit-Bildern zwischen 0-256; Werte über 100 weisen im Allgemeinen auf deutliche Kanten hin. Das Verhältnis Gx/Gy liefert Informationen zur Kantenausrichtung: ein Verhältnis nahe 1 weist auf 45-Grad-Kanten hin, ein Verhältnis >>1 auf horizontale Strukturen, ein Verhältnis <<1 auf vertikale Strukturen. Falschpositive treten häufig in verrauschten Bereichen auf; Medianfilterung oder morphologische Operationen verringern Fehldetektionen wirksam. Kombinieren Sie den Filter mit einer Schwellenwertbildung, um binäre Kantenmasken für Segmentierungspipelines zu erhalten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "variant": {
                "label": "Variante",
                "description": "Variante der Kernelgröße: 3x3 (Standard) oder 5x5."
              },
              "clip_tails": {
                "label": "Ränder beschneiden",
                "description": "Optionaler symmetrischer Beschneidungsprozentsatz der Randbereiche (0-40)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "balance_contrast_enhancement": {
            "name": "Ausgeglichene Kontrastverbesserung",
            "description": "Verringert den Farbstich in einem gepackten RGB-Bild mithilfe kanalweiser parabolischer Streckungen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "band_mean": {
                "label": "Bandmittelwert",
                "description": "Gewünschte mittlere Ausgabehelligkeit je Kanal (Standard 100.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "create_colour_composite": {
            "name": "Farbkomposit erstellen",
            "description": "Erstellt ein gepacktes RGB-Farbkomposit aus Rot-, Grün-, Blau- und optionalen Deckkraftrastern.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "red": {
                "label": "Rot",
                "description": "Pfad des Rot-Band-Rasters oder typisiertes Rasterobjekt."
              },
              "green": {
                "label": "Grün",
                "description": "Pfad des Grün-Band-Rasters oder typisiertes Rasterobjekt."
              },
              "blue": {
                "label": "Blau",
                "description": "Pfad des Blau-Band-Rasters oder typisiertes Rasterobjekt."
              },
              "opacity": {
                "label": "Deckkraft",
                "description": "Optionaler Pfad des Deckkraftrasters oder typisiertes Rasterobjekt."
              },
              "enhance": {
                "label": "Verbessern",
                "description": "Nach dem Zusammensetzen eine Balance-Kontrastverbesserung anwenden (Standard wahr)."
              },
              "treat_zeros_as_nodata": {
                "label": "Nullen als NoData behandeln",
                "description": "Nullwerte in den RGB-Eingaben als NoData/Hintergrund behandeln (Standard falsch)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "direct_decorrelation_stretch": {
            "name": "Direkte Dekorrelationsspreizung",
            "description": "Verbessert die Farbsättigung eines gepackten RGB-Bilds, indem der achromatische Anteil verringert und die Kanäle linear gestreckt werden.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "achromatic_factor": {
                "label": "Achromatischer Faktor",
                "description": "Reduktionsfaktor der Graukomponente von 0 bis 1 (Standard 0.5)."
              },
              "clip_percent": {
                "label": "Beschneidungsprozent",
                "description": "Prozentsatz der Randbeschneidung für die lineare Umskalierung nach der Streckung (Standard 1.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "false_colour_composite": {
            "name": "Falschfarbenkomposit",
            "description": "Erstellt ein Falschfarbenkomposit-Raster (NIR/Rot/Grün) aus einem unterstützten optischen Sensorpaket.",
            "params": {
              "wbe": {
                "label": "WBE",
                "description": "WBE"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe"
              }
            }
          },
          "gamma_correction": {
            "name": "Gammakorrektur",
            "description": "Die Gammakorrektur wendet über eine Potenzgesetz-Transformation eine nichtlineare Helligkeitsanpassung an, um den Bildkontrast, die Anzeigetreue und die wahrnehmungsbezogene Helligkeitsverteilung zu optimieren. Die mathematische Transformation lautet I_corrected = I^(1/γ), wobei γ (Gamma) ein vom Benutzer festgelegter Exponent ist, der Richtung und Ausmaß der Helligkeitsanpassung steuert. Werte γ > 1 verdunkeln Bilder (Kompensation für hell darstellende Anzeigen), während γ < 1 Bilder aufhellt (Kompensation für dunkel darstellende Anzeigen). Die Implementierung arbeitet unabhängig auf jedem Pixel oder Spektralband und bewahrt die räumlichen Beziehungen, während die Intensitätsskalierung angepasst wird. Zu den Hauptmerkmalen gehören die Erhaltung der Bildstruktur bei Umverteilung der Tonwerte, Recheneffizienz, da nur Nachschlagetabellen benötigt werden, die Anwendbarkeit auf beliebige radiometrische Daten einschließlich 16/32-Bit-Bildern sowie die Umkehrbarkeit, die eine inverse Korrektur ermöglicht. Die Gammakorrektur ist unverzichtbar bei der Aufbereitung von Satellitenbildern für die visuelle Interpretation durch Kompensation von Sensoreigenschaften, bei der Normierung der Helligkeit von Orthofotos über Fluglinien oder Sensortypen hinweg, bei der Verbesserung thermischer Bilder zur besseren Sichtbarkeit von Objekten und bei der Vorverarbeitung multispektraler Daten für Machine-Learning-Pipelines, in denen eine Normierung der Eingaben die Konvergenz verbessert. Die korrigierten Werte folgen einer Potenzgesetz-Skalierung: Mitteltöne erfahren die größte relative Anpassung, während Extremwerte weniger komprimiert werden. Bei 8-Bit-Eingaben (0-255) hellt ein typisches Gamma von 0.4-0.6 Bilder deutlich auf; ein Gamma von 1.4-1.6 verdunkelt sie erheblich. Histogrammformen verändern sich vorhersehbar: linksschiefe Histogramme (dunkle Bilder) profitieren von γ < 1, rechtsschiefe Histogramme (helle Bilder) von γ > 1. Überprüfen Sie die korrigierte Ausgabe per Histogrammdarstellung und visueller Prüfung. Wenden Sie die Korrektur einheitlich auf Bildsammlungen an, die eine gleichförmige Vorverarbeitung erfordern. Übliche Arbeitsabläufe stellen die Gammakorrektur vor die Schwellenwertwahl oder Klassifikation, um eine ausgewogene Sichtbarkeit der Merkmale sicherzustellen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Gamma-Exponent in [0, 4], Standard 0.5."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "gaussian_contrast_stretch": {
            "name": "Gaußsche Kontrastspreizung",
            "description": "Streckt den Kontrast durch Anpassung an eine gaußsche Referenzverteilung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "num_tones": {
                "label": "Anzahl Tonwerte",
                "description": "Anzahl der Ausgabetöne (Standard 256)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "histogram_equalization": {
            "name": "Histogrammausgleich",
            "description": "Wendet einen Histogrammausgleich zur Verbesserung des Bildkontrasts an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "num_tones": {
                "label": "Anzahl Tonwerte",
                "description": "Anzahl der Ausgabetöne (Standard 256)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "histogram_matching": {
            "name": "Histogrammanpassung",
            "description": "Passt ein Bildhistogramm an ein angegebenes Referenzhistogramm an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "histogram": {
                "label": "Histogramm",
                "description": "Referenzhistogramm als [[value, frequency], ...] oder [{x, y}, ...]."
              },
              "is_cumulative": {
                "label": "Ist kumulativ",
                "description": "Wahr, wenn die angegebenen Histogrammwerte bereits kumuliert sind."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "histogram_matching_two_images": {
            "name": "Histogrammanpassung zweier Bilder",
            "description": "Passt das Histogramm eines Eingabebilds an das Histogramm eines Referenzbilds an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "reference": {
                "label": "Referenz",
                "description": "Pfad des Referenzrasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "ihs_to_rgb": {
            "name": "IHS zu RGB",
            "description": "Die inverse IHS-zu-RGB-Transformation wandelt Komponenten aus Intensität, Farbton und Sättigung zurück in den Rot-Grün-Blau-Farbraum und ermöglicht so die Wiederherstellung natürlicher Farben aus zerlegten Fernerkundungsdaten. Die inversen Formeln arbeiten mit zylindrischen Polarkoordinaten und wandeln Farbtonwinkel und Sättigungsbetrag zusammen mit der Intensität zurück in kartesische RGB-Koordinaten, wobei die numerische Stabilität gewahrt und Quantisierungsartefakte minimiert werden. Diese Transformation ist das entscheidende Gegenstück zu RGB-zu-IHS-Operationen, insbesondere in Pan-Sharpening-Abläufen, in denen die Intensität durch hochaufgelöste panchromatische Daten ersetzt wurde. Zu den Hauptmerkmalen gehören eine exakte mathematische Umkehrung der Vorwärtstransformation, die Konsistenz bei Hin- und Rücktransformation gewährleistet, eine automatische Behandlung achromatischer Pixel mit undefiniertem Farbton, die die Fortpflanzung numerischer Artefakte verhindert, numerische Stabilität bei extremen Sättigungswerten nahe null sowie Recheneffizienz für eine nahtlose Integration in schnelle Verarbeitungspipelines. Die inverse Transformation schließt Pan-Sharpening-Abläufe ab, indem sie nach dem Ersetzen der Intensität durch panchromatische Daten natürliche Farbbilder wiederherstellt, ermöglicht die Farbdarstellung von Daten mit verbesserter Auflösung, unterstützt die spektrale Rekonstruktion aus zerlegten Komponenten und validiert die Konsistenz der Transformation in Qualitätskontrollabläufen. Die IHS-zu-RGB-Ausgabe erzeugt dreibandige Bilder in natürlichen Farben, deren räumliche Auflösung vom eingegebenen Intensitätsband übernommen wird, und eignet sich zur direkten Visualisierung und weiteren Analyse. Die Ausgabebänder stellen Rot-, Grün- und Blaukanal in Standardreihenfolge dar; die Farben zeigen mehr räumliches Detail, wenn die Intensität durch höher aufgelöste panchromatische Daten ersetzt wurde, und bewahren die spektralen Eigenschaften der ursprünglichen Farbton- und Sättigungskomponenten.",
            "params": {
              "intensity": {
                "label": "Intensität",
                "description": "Raster des Intensitätsbands (0–1)."
              },
              "hue": {
                "label": "Farbton",
                "description": "Raster des Farbtonbands (0–2π Radiant)."
              },
              "saturation": {
                "label": "Sättigung",
                "description": "Raster des Sättigungsbands (0–1)."
              },
              "red_output": {
                "label": "Rot-Ausgabe",
                "description": "Optionaler Ausgabepfad für das rote Band."
              },
              "green_output": {
                "label": "Grün-Ausgabe",
                "description": "Optionaler Ausgabepfad für das grüne Band."
              },
              "blue_output": {
                "label": "Blau-Ausgabe",
                "description": "Optionaler Ausgabepfad für das blaue Band."
              }
            }
          },
          "min_max_contrast_stretch": {
            "name": "Min-Max-Kontrastspreizung",
            "description": "Streckt Werte linear zwischen einem vom Benutzer angegebenen Minimum und Maximum.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "min_val": {
                "label": "Minimalwert",
                "description": "Minimaler Eingabewert für die Skalierung."
              },
              "max_val": {
                "label": "Maximalwert",
                "description": "Maximaler Eingabewert für die Skalierung."
              },
              "num_tones": {
                "label": "Anzahl Tonwerte",
                "description": "Anzahl der Ausgabetöne (Standard 256)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "mosaic": {
            "name": "Mosaik",
            "description": "Die Mosaikbildung kombiniert mehrere überlappende Raster durch geometrische Registrierung, Resampling auf eine gemeinsame Projektion und ein gemeinsames Pixelgitter sowie Kantenüberblendung zur Minimierung von Diskontinuitäten zu einer nahtlosen Ausgabe. Der Algorithmus registriert die Raster anhand geografischer Koordinaten oder Passpunkte, führt ein Resampling auf Zielauflösung und -ausdehnung durch und wendet in Überlappungsbereichen eine gewichtete Überblendung an (Feather-Überblendung oder exponentielle Gewichtung). Überlappende Pixel werden durch distanzgewichtete Mittelung von den Rasterrändern aus überblendet, was weiche Übergänge erzeugt und die Genauigkeit der inneren Pixel bewahrt. So entstehen nahtlose kontinentale oder globale Rastermosaike ohne Randartefakte und radiometrische Diskontinuitäten. Zu den Hauptmerkmalen gehören die geometrische Ausrichtung mehrerer Raster auf eine gemeinsame Projektion, die Wahl der Resampling-Methode (bilinear, kubisch, nächster Nachbar), eine Kantenüberblendung, die Nahtstellen beseitigt, eine radiometrische Normierung, die Sensor- oder Beleuchtungsunterschiede ausgleicht, sowie die Unterstützung Tausender Eingaberaster. Das Werkzeug verwaltet die Rasterpriorität automatisch und vermeidet Lücken durch intelligente Füllstrategien. Anwendungen sind die Erstellung kontinentaler Satellitenbildmosaike aus Szenensammlungen, die Erzeugung nahtloser digitaler Höhenmodelle aus mehreren Fluglinien, die Erstellung optischer Kompositmosaike aus multitemporalen Bildern, der Aufbau von Orthomosaiken aus Befliegungen mit unbemannten Luftfahrzeugen (UAV) sowie die Erstellung von Grundkarten für große Gebiete aus überlappenden Satellitenszenen. Die Mosaikbildung ist für kontinentale und globale Analyseabläufe unverzichtbar. Interpretation der Ausgabe: Ausgaberaster übernehmen die Projektion und Auflösung der Eingabe; Überblendungsbereiche zeigen interpolierte Werte, die die Eingaberaster ausgleichen. Randartefakte weisen auf unzureichende Überlappung oder eine schlechte radiometrische Normierung hin; bei der Bewertung werden Nahtstellen und die Farbkonsistenz über Mosaikgrenzen hinweg untersucht. Die Behandlung von NoData an Mosaikrändern erfordert Aufmerksamkeit bei Füllwerten und der Festlegung der Ausdehnung. Die Qualitätsbewertung umfasst eine geometrische Überprüfung anhand von Passpunkten und eine radiometrische Bewertung durch Vergleich der Mosaikwerte mit den Eingaberastern.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Liste der Eingaberaster als Array von Pfaden oder als durch Komma/Semikolon getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "method": {
                "label": "Methode",
                "description": "Resampling-Methode: 'nn' (Standard), 'bilinear' oder 'cc'."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "mosaic_with_feathering": {
            "name": "Mosaik mit weichen Kanten",
            "description": "Fügt zwei Raster zu einem Mosaik zusammen und überblendet überlappende Zellen weich mit Gewichten nach Randabstand.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster."
              },
              "method": {
                "label": "Methode",
                "description": "Resampling-Methode: 'cc' (Standard), 'nn' oder 'bilinear'."
              },
              "weight": {
                "label": "Gewichtung",
                "description": "Distanzgewichtungsexponent für das Überblenden von Überlappungen (Standard 4.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "normalized_difference_index": {
            "name": "Normalisierter Differenzindex",
            "description": "Berechnet (band1 - band2) / (band1 + band2) aus einem Mehrbandraster.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "band1": {
                "label": "Band 1",
                "description": "1-basierter Index des ersten Bands (Standard 1)."
              },
              "band2": {
                "label": "Band 2",
                "description": "1-basierter Index des zweiten Bands (Standard 2)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "panchromatic_sharpening": {
            "name": "Pansharpening",
            "description": "Panchromatisches Schärfen fusioniert hochaufgelöste panchromatische Bilder mit geringer aufgelösten multispektralen Daten nach der Brovey-Methode, einem spektralen Multiplikationsverfahren, das räumliche Details verstärkt und zugleich die spektrale Information bewahrt. Das Verfahren führt zunächst ein Resampling der multispektralen Bänder auf die panchromatische Auflösung durch und berechnet dann das Intensitätsverhältnis zwischen dem panchromatischen Bild und der berechneten multispektralen Intensität, um jedes Band entsprechend zu skalieren. Dieser Ansatz bewahrt die spektrale Treue und verbessert zugleich die räumliche Auflösung erheblich. Zu den Hauptmerkmalen gehören die Erhaltung der ursprünglichen spektralen Eigenschaften, eine linear-algebraische Effizienz, die eine schnelle Verarbeitung großer Bilder ermöglicht, eine automatische Resampling-Kompatibilität mit bandregistrierten Eingaben sowie eine automatische Normierung für radiometrische Konsistenz über heterogene Sensoren hinweg. Das Verfahren wird häufig zur Verbesserung von Satellitenbildern für Kartierungsanwendungen eingesetzt, darunter Stadtplanung, landwirtschaftliches Monitoring und Rohstofferkundung, bei denen sowohl spektrales als auch räumliches Detail entscheidend ist. Panchromatisches Schärfen erzeugt eine verbesserte multispektrale Ausgabe mit höherer räumlicher Schärfe, die sich für die visuelle Interpretation und detaillierte Kartierung eignet. Die Ausgabebänder behalten die ursprüngliche Reihenfolge der multispektralen Bänder bei, jedoch mit panchromatischer Auflösung, was eine nahtlose Integration in Standard-Bildanalyseabläufe und GIS-Systeme ermöglicht. Die räumliche Auflösung steigt auf die Auflösung der panchromatischen Eingabe und ermöglicht eine Merkmalsextraktion in feineren Maßstäben als bei den ursprünglichen multispektralen Daten.",
            "params": {
              "red": {
                "label": "Rot",
                "description": "Rot-Band-Raster (erforderlich, sofern 'composite' nicht angegeben ist)."
              },
              "green": {
                "label": "Grün",
                "description": "Grün-Band-Raster (erforderlich, sofern 'composite' nicht angegeben ist)."
              },
              "blue": {
                "label": "Blau",
                "description": "Blau-Band-Raster (erforderlich, sofern 'composite' nicht angegeben ist)."
              },
              "composite": {
                "label": "Komposit",
                "description": "Gepacktes multispektrales RGB-Komposit (schließt red/green/blue aus)."
              },
              "pan": {
                "label": "Panchromatisch",
                "description": "Panchromatisches Rasterband."
              },
              "method": {
                "label": "Methode",
                "description": "Fusionsmethode: 'brovey' (Standard) oder 'ihs'."
              },
              "output_mode": {
                "label": "Ausgabemodus",
                "description": "Ausgabecodierung: 'packed' (Standard) oder 'bands' (3-Band-RGB-Raster)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "percentage_contrast_stretch": {
            "name": "Prozentuale Kontrastspreizung",
            "description": "Percentage Contrast Stretch führt eine lineare Kontrastverstärkung durch, indem vor der Streckung auf den vollen Dynamikumfang festgelegte Prozentanteile der Extremwerte (Ränder) aus dem Histogramm entfernt werden. Algorithmus: entfernt die unteren und oberen Perzentilwerte jedes Bands unabhängig, bildet den verbleibenden Bereich linear auf den Ausgabebereich ab (typischerweise 0-255 oder volle Bittiefe) und beseitigt radiometrische Extremwerte, die einen schlechten Kontrast verursachen. Die Perzentilwahl (üblicherweise 2-3%) wägt Kontrastverstärkung gegen die Wahrung der Datenintegrität ab. Hauptmerkmale: entfernt radiometrische Ausreißer automatisch, verhindert eine Kontrastkompression durch anomale Werte, bandweise oder global anwendbar, recheneffiziente lineare Transformation, umkehrbare Operation. Fähigkeiten: bewältigt radiometrische Artefakte, verbessert die Sichtbarkeit subtiler Merkmale, passt sich variablen Eingabebereichen an. Anwendungsfälle: Vorverarbeitung vor Klassifikation oder Fusion, Verbesserung eines nicht ausgeschöpften Dynamikumfangs, Vorbereitung für die multispektrale Darstellung, radiometrische Normierung über Szenen hinweg. Anwendungen: Verbesserung von Satellitenbildern für die visuelle Interpretation, Vorverarbeitung für die satellitengestützte Erkennung von Hangrutschungen, Normierung vor der Klassifikation, Aufbereitung archivierter Bilder. Interpretation der Ausgabe: verbesserte Bilder zeigen einen besseren Kontrast; Extremwerte werden abgeschnitten; zuvor verborgene subtile Merkmale werden sichtbar; bandspezifische Abschneidewerte zeigen die Qualität der radiometrischen Verteilung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "clip": {
                "label": "Zuschneiden",
                "description": "Perzentil-Beschneidungsprozentsatz (Standard 1.0)."
              },
              "tail": {
                "label": "Rand",
                "description": "Modus der Randbeschneidung: both (Standard), upper oder lower."
              },
              "num_tones": {
                "label": "Anzahl Tonwerte",
                "description": "Anzahl der Ausgabetöne (Standard 256)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "piecewise_contrast_stretch": {
            "name": "Stückweise Kontrastspreizung",
            "description": "Führt eine stückweise lineare Kontraststreckung mit vom Benutzer angegebenen Stützstellen durch.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "function": {
                "label": "Funktion",
                "description": "Zeichenkette der Haltepunktanweisung, z. B. '(50,0.1);(120,0.6);(180,0.85)'."
              },
              "greytones": {
                "label": "Grautöne",
                "description": "Anzahl der Ausgabetöne für Nicht-RGB-Raster (Standard 1024)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "resample": {
            "name": "Neu abtasten",
            "description": "Das Resampling von Bildern ändert die Pixelauflösung mithilfe von Interpolationsverfahren wie nächster Nachbar (am schnellsten, geringste Glättung), bilinear (lineare Interpolation zwischen benachbarten Pixeln), bikubisch (Anpassung kubischer Polynome) und kubischer Spline (glatte kontinuierliche Interpolation). Resampling ist unverzichtbar für die geometrische Registrierung, für die Erstellung multispektraler Stapel einheitlicher Auflösung aus Sensoren unterschiedlicher Auflösung und für die Integration von Zusatzdaten in verschiedenen Maßstäben. Jedes Verfahren passt lokale Interpolationskernel an die ursprünglichen Pixelwerte an, wertet die Kernel an den neuen Pixelpositionen aus und gibt die interpolierten Werte zurück. Der nächste Nachbar bewahrt die radiometrischen Werte (geeignet für kategoriale Daten); Verfahren höherer Ordnung glätten Kanten und verringern Aliasing, zeichnen scharfe Grenzen aber weich. Zu den Hauptmerkmalen gehören wählbare Interpolationsverfahren zur Optimierung des Verhältnisses von Geschwindigkeit und Genauigkeit, die Angabe der Ausgabeauflösung über eine Zielpixelgröße oder Abmessungen, eine automatische Behandlung von Hintergrundwerten für Bereiche außerhalb der Eingabeausdehnung sowie eine optionale Antialiasing-Filterung, die Resampling-Artefakte verringert. Anwendungen sind die Bildregistrierung zur Ausrichtung von Daten auf gemeinsame Gitter, die Harmonisierung der Auflösung multispektraler Stapel mit unterschiedlichen nativen Auflösungen, das Downsampling zur Verringerung der Datenmenge unter Erhalt räumlicher Muster sowie das Upsampling zur Verbesserung visueller Details für die Darstellung. Die Resampling-Ausgabe integriert Bilder mit einheitlicher Auflösung. Die Ausgabeauflösung entspricht der Benutzervorgabe; das Interpolationsverfahren beeinflusst die Kantenschärfe (der nächste Nachbar bewahrt Kanten; Verfahren höherer Ordnung glätten); Hintergrundbereiche (außerhalb der Eingabeausdehnung) erhalten einstellbare Füllwerte; die Ausgabe lässt sich nahtlos in multispektrale Analyseabläufe integrieren.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Liste der Eingaberaster als Array von Pfaden oder als durch Komma/Semikolon getrennte Zeichenkette."
              },
              "base": {
                "label": "Basis",
                "description": "Optionales Basisraster, das Ausgabeausdehnung und -gitter definiert. Hat Vorrang vor cell_size."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Optionale Ausgabezellengröße, wenn base nicht angegeben ist."
              },
              "method": {
                "label": "Methode",
                "description": "Resampling-Methode: 'cc' (Standard), 'nn' oder 'bilinear'."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "rgb_to_ihs": {
            "name": "RGB zu IHS",
            "description": "Die Transformation von RGB in Intensität-Farbton-Sättigung zerlegt den Rot-Grün-Blau-Farbraum in wahrnehmungsrelevante Komponenten: Intensität (Helligkeit), Farbton (Farbe) und Sättigung (Farbreinheit). Die Zerlegung verwendet mathematische Standardformeln, die RGB-Farbvalenzen in zylindrische Polarkoordinaten umrechnen, wobei die Intensität die Leuchtdichte darstellt, der Farbton den Farbwinkel kodiert und die Sättigung die Farbkonzentration misst. Dieser Farbraum ist für die Fernerkundung besonders nützlich, da die Intensität durch hochaufgelöste Daten ersetzt werden kann, während die ursprünglichen Farbeigenschaften durch die inverse Transformation erhalten bleiben. Zu den Hauptmerkmalen gehören eine numerisch stabile Formulierung, die Sonderfälle (achromatische Pixel) robust behandelt, die Erhaltung des vollen Dynamikumfangs ohne Abschneiden oder Informationsverlust, eine automatische Bandskalierung für konsistente Ergebnisse über unterschiedliche Eingabebereiche sowie eine Recheneffizienz, die sich für große multispektrale Stapel eignet. Das Verfahren dient mehreren Anwendungen: Pan-Sharpening-Abläufen, in denen die Intensität durch panchromatische Daten ersetzt wird, der Verbesserung der Farbdarstellung, der spektralen Vorverarbeitung für Klassifikationsalgorithmen und Umwandlungen von Farbe in Graustufen unter Erhalt der Wahrnehmungsinformation. Die RGB-zu-IHS-Transformation ist unverzichtbar für Fusionsverfahren, die panchromatische Auflösung mit multispektraler Farbinformation kombinieren. Die Ausgabe umfasst drei Einzelbanddateien für die Komponenten Intensität, Farbton und Sättigung, die unabhängig in Analyseabläufen verwendet werden können. Das Intensitätsband nähert die Leuchtdichte an; der Farbton reicht von 0-360 Grad und kodiert die Farbinformation; die Sättigung reicht von 0-100 Prozent und gibt die Farbreinheit an.",
            "params": {
              "red": {
                "label": "Rot",
                "description": "Rot-Band-Raster (schließt 'composite' aus)."
              },
              "green": {
                "label": "Grün",
                "description": "Grün-Band-Raster (schließt 'composite' aus)."
              },
              "blue": {
                "label": "Blau",
                "description": "Blau-Band-Raster (schließt 'composite' aus)."
              },
              "composite": {
                "label": "Komposit",
                "description": "Gepacktes RGB-Kompositraster (schließt red/green/blue aus)."
              },
              "intensity_output": {
                "label": "Intensitätsausgabe",
                "description": "Optionaler Ausgabepfad für das Intensitätsband."
              },
              "hue_output": {
                "label": "Farbton-Ausgabe",
                "description": "Optionaler Ausgabepfad für das Farbtonband."
              },
              "saturation_output": {
                "label": "Sättigungsausgabe",
                "description": "Optionaler Ausgabepfad für das Sättigungsband."
              }
            }
          },
          "sigmoidal_contrast_stretch": {
            "name": "Sigmoidale Kontrastspreizung",
            "description": "Führt eine sigmoidale Kontraststreckung mit Verstärkung und Grenzwert durch.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "cutoff": {
                "label": "Grenzfrequenz",
                "description": "Sigmoid-Mittelpunkt in normierten Einheiten (Standard 0.0)."
              },
              "gain": {
                "label": "Verstärkung",
                "description": "Sigmoid-Verstärkungsparameter (Standard 1.0)."
              },
              "num_tones": {
                "label": "Anzahl Tonwerte",
                "description": "Anzahl der Ausgabetöne (Standard 256)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "split_colour_composite": {
            "name": "Farbkomposit aufteilen",
            "description": "Teilt ein gepacktes RGB-Farbkomposit-Raster in drei separate Einzelbandraster für den Rot-, Grün- und Blaukanal auf. Algorithmus: Dieses Werkzeug extrahiert einzelne Farbbänder aus einem Kompositbild, in dem R-, G- und B-Werte in einem einzigen Raster gepackt sind (häufig mit standardmäßiger 24-Bit-RGB- oder 32-Bit-RGBA-Kodierung). Die Trennung erfolgt über bitweise Operationen, die jede 8-Bit-Kanalkomponente isolieren. Hauptmerkmale: bewahrt die ursprünglichen radiometrischen Werte (0–255), verarbeitet Standard-RGB-Komposite und erweiterte Formate, gibt drei unabhängige georeferenzierte Raster aus. Anwendungsfälle: Spektralanalysen, bei denen einzelne Bänder getrennt verarbeitet werden müssen; Erstellung von Eingabedatensätzen für die Berechnung von Vegetationsindizes (NDVI, EVI); Vorbereitung von Daten für Bandalgebra-Operationen; Ermöglichung weitergehender Farbtransformationen wie der RGB-zu-IHS-Umwandlung; Extraktion bestimmter Bänder für Abläufe der überwachten oder unüberwachten Klassifikation. Anwendungen: Analyse von Fernerkundungsbildern, Vorverarbeitung von Satellitendaten, Vorbereitung multispektraler Analysen, Pipelines zur Bildverbesserung. Interpretation der Ausgabe: Es entstehen drei Einzelbandraster mit identischer räumlicher Ausdehnung, Projektion und Georeferenzierung wie das Eingabekomposit. Jedes Ausgabeband enthält radiometrische 8-Bit-Werte (0–255), die die Intensität der jeweiligen Farbkomponente in der Szene darstellen. Bandstatistiken (Min, Max, Mittelwert) spiegeln die spektralen Eigenschaften des jeweiligen Farbkanals wider; dominante Werte zeigen die vorherrschende Farbe im Bild an. Die Ausgaberaster eignen sich unmittelbar für Bandberechnungen, spektrale Indizes oder weitere Mehrband-Verarbeitungsabläufe.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Raster mit gepacktem RGB."
              },
              "red_output": {
                "label": "Rot-Ausgabe",
                "description": "Optionaler Ausgabepfad für das rote Band."
              },
              "green_output": {
                "label": "Grün-Ausgabe",
                "description": "Optionaler Ausgabepfad für das grüne Band."
              },
              "blue_output": {
                "label": "Blau-Ausgabe",
                "description": "Optionaler Ausgabepfad für das blaue Band."
              }
            }
          },
          "standard_deviation_contrast_stretch": {
            "name": "Kontrastspreizung nach Standardabweichung",
            "description": "Führt eine lineare Kontraststreckung mit Mittelwert plus/minus einem Vielfachen der Standardabweichung durch.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "clip": {
                "label": "Zuschneiden",
                "description": "Multiplikator der Standardabweichung zur Ableitung der Beschneidungsgrenzen (Standard 2.0)."
              },
              "num_tones": {
                "label": "Anzahl Tonwerte",
                "description": "Anzahl der Ausgabetöne (Standard 256)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "true_colour_composite": {
            "name": "Echtfarbenkomposit",
            "description": "Erstellt ein Echtfarbenkomposit-Raster (RGB) aus einem unterstützten optischen Sensorpaket.",
            "params": {
              "wbe": {
                "label": "WBE",
                "description": "WBE"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe"
              }
            }
          },
          "adaptive_filter": {
            "name": "Adaptiver Filter",
            "description": "Der adaptive Filter passt die Filterstärke dynamisch anhand lokaler Bildstatistiken (Mittelwert, Varianz, Kurtosis) an und ermöglicht so eine kontextbewusste Glättung, die auf die Eigenschaften der Szene reagiert. Die Implementierung unterteilt Bilder in gleitende Fenster, berechnet lokale Statistiken (zur Unterscheidung rauschdominierter von merkmalsdominierten Bereichen) und wählt die Filterparameter entsprechend. Flache Bereiche werden stark geglättet; komplexe Bereiche werden behutsam gefiltert. Die mathematische Grundlage bilden statistische Tests zur Bestimmung des lokalen Charakters: Bereiche mit einer Varianz unterhalb des Schwellenwerts werden stark geglättet; Bereiche oberhalb des Schwellenwerts behalten ihre Details. Zu den Hauptmerkmalen gehören eine automatische Parameteranpassung (der Benutzer gibt Bereiche vor, der Algorithmus wählt lokal), die Anwendbarkeit auf beliebige Filterkernel (Gauß, Median, morphologisch) sowie die Wirksamkeit bei optischen und Radarbildern. Die adaptive Filterung ist besonders stark bei der Vorverarbeitung heterogener Satellitenmosaike (unterschiedliche Sensoren, Aufnahmebedingungen), bei der Glättung von LiDAR-Punktwolken (bewahrt Vegetationskanten in Wäldern; glättet den Boden in offenen Bereichen), bei der selektiven Speckle-Reduktion in SAR-Daten unter Berücksichtigung von Zielen und Hintergrund sowie bei der Stapelung multitemporaler Bilder. Die Interpretation der Ausgabe zeigt, dass homogene Bereiche intensiv gefiltert werden (geringe lokale Varianz → starke Glättung), während komplexe Bereiche zurückhaltend gefiltert werden (hohe Varianz → minimale Verarbeitung). Der Glättungsradius passt sich je Bereich dynamisch an: flache Bereiche erhalten eine Filterung mit großem Radius; texturierte Bereiche eine Filterung mit kleinem Radius oder gar keine. Die Ausgabebereiche bleiben innerhalb der Eingabe; prüfen Sie die räumliche Karte der Filterstärke, um die Anpassung zu validieren. In glatten Bereichen verschieben sich die Statistiken zu den lokalen Mittelwerten; komplexe Bereiche bleiben weitgehend unverändert. Häufige Artefakte sind eine mögliche Überglättung an Bereichsgrenzen (typischerweise mit weichem Übergang) und eine Empfindlichkeit gegenüber dem Verhältnis von Rauschen und Varianz. Überprüfen Sie die Anpassung durch Analyse lokaler Varianzkarten. Setzen Sie den Filter in automatisierten Vorverarbeitungspipelines für Daten aus mehreren Quellen ein, bei denen eine gleichförmige Filterung nicht ausreicht.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Nachbarschaftsbreite in Pixeln (ungerade Ganzzahl, Standard 11)."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Nachbarschaftshöhe in Pixeln (ungerade Ganzzahl, Standard 11)."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Absoluter z-Wert-Schwellenwert für die Ersetzung durch den Mittelwert (Standard 2.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "anisotropic_diffusion_filter": {
            "name": "Anisotroper Diffusionsfilter",
            "description": "Die anisotrope Diffusionsfilterung realisiert eine iterative kantenerhaltende Glättung über gerichtete Diffusionsprozesse, die zwischen Kanten und flachen Bereichen unterscheiden. Der Algorithmus aktualisiert jedes Pixel iterativ anhand gewichteter Differenzen zu seinen Nachbarn und verwendet eine Leitfähigkeitsfunktion, die die Diffusion über Grenzen mit hohem Gradienten verringert und die Glättung innerhalb homogener Bereiche zulässt. Die Implementierung löst die partielle Differentialgleichung ∂I/∂t = div(c(|∇I|)∇I), wobei sich die Leitfähigkeit c(·) an den lokalen Gradientenbetrag anpasst. Dieser datengetriebene Ansatz bewahrt scharfe Übergänge und verringert zugleich schrittweise das Rauschen in gleichförmigen Bereichen. Zu den Hauptmerkmalen gehören eine echte Kantenerhaltung ohne explizite Kantenmasken, eine automatische Maßstabswahl über die Iterationsanzahl, eine wirksame Rauschminderung bei erhaltener Merkmalsschärfe sowie die Anwendbarkeit auf Einzelband- und multispektrale Daten. Die anisotrope Diffusion ist besonders stark bei der Glättung von LiDAR-Punktwolken unter Erhalt von Geländekanten, beim Entrauschen von Satellitenbildern zur Erkennung subtiler geologischer Merkmale, bei der Speckle-Reduktion in SAR-Daten unter Erhalt der Kanten von Radarzielen sowie bei medizinischen/wissenschaftlichen Bildern, bei denen die Kantentreue entscheidend ist. Zur Interpretation der Ausgabe ist zu beachten, dass glatte Bereiche zunehmend homogenisiert werden (die Werte konvergieren zum lokalen Mittelwert), während Kanten steiler werden, bis sie sich stabilisieren. Frühe Iterationen (t<5) liefern eine leichte Rauschminderung; mittlere Iterationen (t=5-20) eine deutliche Glättung; übermäßige Iterationen (t>50) bergen die Gefahr einer Überbetonung von Grenzen oder falscher Merkmale. Die Ausgabewerte bleiben im Wertebereich der Quelldaten; mit fortschreitender Verarbeitung verschieben sich die Statistiken zu den regionalen Mittelwerten. Überwachen Sie die Varianz der Ausgabe, um den Grad der Glättung zu beurteilen. Übliche Kennzahlen sind die Verbesserung des Signal-Rausch-Verhältnisses und Indizes der Kantenschärfe. Wenden Sie das Verfahren in mehrskaligen Abläufen sorgfältig an, in denen die Genauigkeit der Kantenerhaltung die Genauigkeit der nachgelagerten Klassifikation oder Veränderungserkennung direkt beeinflusst.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "iterations": {
                "label": "Iterationen",
                "description": "Anzahl der Diffusionsiterationen (Standard 10)."
              },
              "kappa": {
                "label": "Kappa",
                "description": "Kantenempfindlichkeitsparameter (Standard 20.0)."
              },
              "lambda": {
                "label": "Lambda",
                "description": "Zeitschritt in (0, 0.25], Standard 0.2."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "bilateral_filter": {
            "name": "Bilateralfilter",
            "description": "Kantenerhaltende bilaterale Glättung über räumliche und Intensitätskernel. Bewahrt Details besser als ein Gauß-Filter. Sigma_dist=Radius, sigma_int=Schwellenwert der Kantenerhaltung. RGB-fähig.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "sigma_dist": {
                "label": "Sigma Distanz",
                "description": "Standardabweichung des räumlichen Gauß-Kernels in Pixeln (0.5–20.0, Standard 0.75)."
              },
              "sigma_int": {
                "label": "Sigma Intensität",
                "description": "Standardabweichung des Intensitäts-Gauß-Kernels in Rasterwerteinheiten (Standard 1.0)."
              },
              "treat_as_rgb": {
                "label": "Als RGB behandeln",
                "description": "Auf wahr setzen, um die HSI-Verarbeitung von gepacktem RGB zu erzwingen. Bei falsch kann gepacktes RGB dennoch automatisch aus den Rastermetadaten erkannt werden."
              },
              "assume_three_band_rgb": {
                "label": "Drei Bänder als RGB annehmen",
                "description": "Wenn wahr (Standard), dürfen 3-Band-uint8/uint16-Raster in Filtern, die die 3-Band-RGB-Intensitätsverarbeitung unterstützen, als RGB behandelt werden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "closing": {
            "name": "Schließen",
            "description": "Führt eine morphologische Schließung mit einem rechteckigen Strukturelement durch.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Ungerade Nachbarschaftsbreite (Standard 11)."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Ungerade Nachbarschaftshöhe (Standard wie filter_size_x)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "conservative_smoothing_filter": {
            "name": "Konservativer Glättungsfilter",
            "description": "Conservative Smoothing realisiert eine nichtlineare Filterung, indem jedes Pixel durch den Mittelwert ähnlicher Nachbarn (innerhalb eines festgelegten Intensitätsbereichs) ersetzt wird, wodurch Kanten erhalten und Rauschen verringert werden. Die Implementierung untersucht Nachbarschaften, ermittelt Pixel innerhalb der Intensitätsschwelle des zentralen Pixels und mittelt diese Pixel ähnlicher Werte. Mathematische Formulierung: F = (1/N) Σ(I_j : |I_j - I_center| < T), wobei T die Ähnlichkeitsschwelle und N die Anzahl ähnlicher Pixel ist. Zu den Hauptmerkmalen gehören eine einfache schwellenwertbasierte Definition der Ähnlichkeit, die Wirksamkeit bei optischen und Radarbildern, interpretierbare Parameter (der Schwellenwert steuert die Kantenschärfe) und ein minimaler Rechenaufwand. Conservative Smoothing ist besonders stark bei der Vorverarbeitung multispektraler Satellitenbilder (verringert Rauschen unter Erhalt spektraler Grenzen), bei der Verbesserung thermischer Bilder (glättet radiometrisches Rauschen und erhält Temperaturdiskontinuitäten), bei der Glättung von LiDAR-Klassifikationen (bewahrt Grenzen zwischen Vegetation und Boden) und bei der Vorverarbeitung verrauschter Vermessungsdaten. Die Interpretation der Ausgabe zeigt, dass homogene Bereiche vollständig gemittelt werden (alle Nachbarn ähnlich), während Kanten nur minimal gefiltert werden (ähnliche Pixel nur auf derselben Seite). Der Schwellenwertparameter steuert die Kantenerhaltung: ein kleiner Schwellenwert (strenge Ähnlichkeit) erzeugt eine leichte Glättung; ein großer Schwellenwert (lockere Ähnlichkeit) eine starke Glättung, bei der möglicherweise Kanten verloren gehen. Die Ausgabewerte stammen genau aus den Nachbarwerten der Eingabe (keine Interpolation; die Ausgabe ist der Mittelwert vorhandener Werte). Die Statistiken verschieben sich zu lokalen Clustern; heterogene Bereiche zeigen minimale Veränderungen. Überprüfen Sie die Wirksamkeit des Schwellenwerts per visueller Prüfung und lokaler Histogrammanalyse. Häufige Artefakte sind eine unzureichende Glättung bei zu strengen Schwellenwerten und verwischte Kanten bei zu lockeren Schwellenwerten. Die Iterationsanzahl ermöglicht eine schrittweise Filterung: ein einzelner Durchlauf liefert eine sanfte Glättung; mehrere Durchläufe verstärken den Effekt. Wenden Sie das Verfahren vor der Klassifikation an, wenn rauschbedingte Kategorienverwechslungen verringert werden müssen, während die Klassengrenzen scharf bleiben.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Nachbarschaftsbreite in Pixeln (ungerade Ganzzahl, Standard 3)."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Nachbarschaftshöhe in Pixeln (ungerade Ganzzahl, Standard 3)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "diff_of_gaussians_filter": {
            "name": "Differenz-von-Gauß-Filter",
            "description": "Die Difference-of-Gaussians-Filterung (DoG) erkennt Kanten und feine Merkmale durch Subtraktion zweier gaußgeglätteter Versionen mit unterschiedlichen Radien und erzeugt so einen Bandpassfilter, der mittlere Ortsfrequenzen hervorhebt. Die Implementierung berechnet zwei Gauß-Glättungen (kleiner Radius σ₁ und großer Radius σ₂) und subtrahiert dann: DoG = G(σ₁) - G(σ₂). Diese nichtlineare Kombination verstärkt Kanten und Rücken und unterdrückt zugleich sowohl feines Rauschen als auch großräumige Beleuchtungstrends. Zu den Hauptmerkmalen gehören ein einstellbarer Frequenzgang (das Verhältnis σ₂/σ₁ steuert die Bandpasseigenschaften), eine nullzentrierte Ausgabe (bipolar: positive und negative Werte), die Anwendbarkeit auf Kantenerkennung und Merkmalsextraktion sowie Recheneffizienz durch Wiederverwendung der Gauß-Glättung. Difference of Gaussians ist besonders stark bei der Erkennung geologischer Strukturen (Verwerfungen und Lineamente erscheinen als hohe DoG-Antwort), bei der Gebäudeextraktion aus Orthofotos, bei der Verstärkung feiner Texturen in Fernerkundungsmosaiken und in von der Neurowissenschaft inspirierten Verarbeitungsmodellen. Die Interpretation der Ausgabe zeigt, dass Kanten Spitzenantworten erzeugen (positiv auf der hellen, negativ auf der dunklen Seite), mit einem Nulldurchgang genau am Übergang. Die Nulldurchgangserkennung zeigt echte Kanten unabhängig von der Kantenrichtung. Der DoG-Betrag gibt die Kantenstärke an; der typische Bereich reicht bei 8-Bit-Eingaben je nach lokalem Kontrast von -1000 bis +1000. Das Verhältnis σ₂/σ₁ bestimmt die Bandpassmitte: ein Verhältnis von ~2 hebt sehr feine Merkmale hervor; ~5 mittlere Merkmale; ~10 gröbere Merkmale. Bimodale Ausgabeverteilungen (Spitzen an den positiven und negativen Extremen) weisen auf eine gute Kantentrennung hin. Häufige Artefakte sind Halos um starke Kanten und eine mögliche zu schwache Antwort, wenn das Frequenzband nicht zum Maßstab der Merkmale passt. Kombinieren Sie das Verfahren zur Kantenextraktion mit einer Betragsschwelle. Wenden Sie es vor einer morphologischen Nachbearbeitung an, um Merkmale robust aus verrauschten Satellitenbildern zu extrahieren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Kleineres Gauß-Sigma (0.25-20.0, Standard 2.0)."
              },
              "sigma2": {
                "label": "Sigma 2",
                "description": "Größeres Gauß-Sigma (0.5-20.0, Standard 4.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "diversity_filter": {
            "name": "Diversitätsfilter",
            "description": "Berechnet die Vielfalt in einem gleitenden Fenster als Anzahl eindeutiger Werte/Klassen innerhalb der Nachbarschaft. Misst die lokale Heterogenität: hohe Vielfalt = abwechslungsreiches Gelände/unterschiedliche Klassen, geringe Vielfalt = homogen. Zeigt Textur, Fragmentierung und Mustervielfalt. Wird häufig auf klassifizierte oder kategoriale Bilder angewendet, um Übergangs-/Randzonen zu identifizieren.\n\nDer Vielfaltsfilter erzeugt ein Maß der lokalen Variation, das von den konkreten Werten unabhängig ist. Nützlich für die Landschaftsökologie (Habitatvielfalt, Fragmentierungskennzahlen), die Bewertung der Klassifikationsqualität (hohe Vielfalt = gemischte/unsichere Bereiche) und die Texturanalyse. Auf Höhendaten angewendet, gibt die Vielfalt die Rauheit im Nachbarschaftsmaßstab an. Auf eine Klassifikation angewendet, identifiziert sie gemischte Zonen, Ökotone und Grenzzonen.\n\nAnwendungen: (1) Kartierung der Landschaftsfragmentierung (hohe Vielfalt = vielfältiges Mosaik, geringe Vielfalt = gleichförmige Flächen), (2) Bewertung der Klassifikationskonfidenz/-unsicherheit (hohe Vielfalt = unsicherer Bereich), (3) Texturanalyse (Kartierung der Heterogenität), (4) Kanten-/Grenzerkennung über Vielfaltsspitzen, (5) Habitatvielfalt für ökologische Analysen (die Eignung hängt von der lokalen Vielfalt ab).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Fensterbreite in Pixeln (ungerade Ganzzahl, Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Fensterhöhe in Pixeln (ungerade Ganzzahl, Standard = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "edge_preserving_mean_filter": {
            "name": "Kantenerhaltender Mittelwertfilter",
            "description": "Der kantenerhaltende Mittelwertfilter führt eine selektive Pixelmittelung durch, indem lokale Mittelwerte unter Ausschluss von Ausreißerpixeln berechnet werden, die wahrscheinlich Kanten oder Rauschen darstellen. Die Implementierung sortiert die Pixel der Nachbarschaft, entfernt Extremwerte (niedrigste und höchste Werte oder Werte oberhalb einer statistischen Schwelle) und mittelt die verbleibenden Werte. Dieser robuste Ansatz wägt Glättung gegen den Erhalt der Schärfe ab. Varianten sind eine gewichtete Mittelung, die die mittleren Pixel betont, und eine adaptive Schwellenwertwahl anhand lokaler Statistiken. Zu den Hauptmerkmalen gehören eine einfache Parametersteuerung (Anzahl ausgeschlossener Werte oder Schwellenwert), Recheneffizienz durch Sortieren kleiner Nachbarschaften, eine wirksame Rauschminderung ohne Verwischen von Details sowie die Anwendbarkeit auf optische, Radar- und thermische Daten. Die kantenerhaltende Mittelwertfilterung ist besonders stark bei der Vorverarbeitung optischer Satellitendaten für die Berechnung von Vegetationsindizes (entfernt Schatten und Wolken ohne Verwischen von Objekten), bei der DEM-Glättung unter Erhalt von Neigungsknicken, beim Entrauschen thermischer Bilder unter Erhalt scharfer Grenzen und bei der Aufbereitung von Orthofotos für die manuelle Digitalisierung. Die Interpretation der Ausgabe zeigt, dass sich die entfernten Ausreißer an Kanten und in verrauschten Bereichen konzentrieren; die verbleibenden Werte werden gemittelt und erzeugen eine lokale Glättung. Die Ausschlussparameter steuern die Kantenschärfe: das Ausschließen eines einzelnen Extremwerts entfernt Salz-und-Pfeffer-Rauschen; das Ausschließen mehrerer Extremwerte erzeugt glattere Ergebnisse mit sanfteren Kantenübergängen. Die Ausgabebereiche bleiben innerhalb der Eingabe; die Statistiken verschieben sich zu den Mittelwerten der Nicht-Ausreißer. Überwachen Sie die Differenz zwischen Ausgabe und Eingabe, um die gefilterten Bereiche zu erkennen (typischerweise Bereiche hoher Varianz). Die Qualität der Kantenerhaltung hängt von der Genauigkeit der Ausreißererkennung ab; prüfen Sie visuell, dass Merkmale scharf bleiben. Häufige Artefakte sind eine unzureichende Glättung bei zu strengen Schwellenwerten und eine übermäßige Filterung bei zu hohen Ausschlusszahlen. Die Iterationsanzahl ermöglicht eine schrittweise Filterung; ein einzelner Durchlauf liefert eine sanfte Glättung. Wenden Sie das Verfahren vor einer schwellenwertbasierten Klassifikation an, um rauschbedingte Fehlklassifikationen zu verringern und dabei die Objektgrenzen zu erhalten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size": {
                "label": "Filtergröße",
                "description": "Quadratische Nachbarschaftsgröße in Pixeln (ungerade Ganzzahl, Standard 11)."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Maximale absolute Nachbardifferenz für die Aufnahme in den lokalen Mittelwert (Standard 15.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "emboss_filter": {
            "name": "Prägefilter",
            "description": "Der Prägefilter (Emboss) verstärkt Kantenmerkmale durch gerichtete Schattierung und erzeugt ein charakteristisches dreidimensionales Reliefbild, in dem Kanten je nach simulierter Beleuchtungsrichtung als erhabene oder vertiefte Flächen erscheinen. Dieser Filter wendet einen 3×3-Kernel an, der Kantenerkennung mit einseitiger Beleuchtung kombiniert, typischerweise mit simuliertem Licht aus dem linken oberen Quadranten, und erzeugt so einen starken visuellen Kontrast an Grenzen, während glatte Bereiche erhalten bleiben. Die Prägetransformation subtrahiert gewichtete Nachbarwerte in bestimmten Richtungen und erzeugt eine Ausgabe, in der Lichter und Schatten topografische und merkmalsbezogene Diskontinuitäten betonen. Zu den Hauptmerkmalen gehören eine intuitive Richtungssteuerung zur Anpassung der simulierten Lichtrichtung (Varianten für acht Richtungen), eine natürliche 3D-Wahrnehmung, die die visuelle Interpretation verbessert, sowie eine robuste Leistung bei unterschiedlichen Lichtverhältnissen in den Quellbildern. Der Prägefilter dient der Qualitätssicherung, der interpretierenden Visualisierung und der Betonung von Objektgrenzen. Anwendungsfälle sind die visuelle Verbesserung für die geologische Interpretation, bei der Mineralgrenzen als Reliefmuster sichtbar werden, die Luftbildinterpretation mit besserer Sichtbarkeit subtiler Grenzen, die kartografische Produktion, bei der geprägte digitale Höhenmodelle eindrucksvolle Reliefkarten erzeugen, sowie die Erkennung archäologischer Strukturen, bei der verborgene Bauten als subtile topografische Variationen erscheinen. Bei der Interpretation der Ausgabe gelten hohe Werte als beleuchtete Flächen und niedrige Werte als Schatten, was eine wahrgenommene Tiefe erzeugt, die das menschliche Auge ganz natürlich als Relief deutet. Die geprägte Ausgabe muss für die Darstellung typischerweise auf den Bereich 0-255 skaliert werden; die Rohausgabe enthält oft negative Werte, die Schattenbereiche darstellen. Der Effekt ist rein visuell – der Prägefilter berechnet weder eine echte Beleuchtung noch Höhenableitungen. Wenden Sie ihn bei multispektralen Bildern je nach Analyseziel auf Hauptkomponenten oder ausgewählte Bänder an. Die Nachbearbeitung umfasst häufig eine Kontrastverstärkung oder ein Tone-Mapping zur Optimierung der visuellen Wirkung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "direction": {
                "label": "Richtung",
                "description": "Reliefrichtung: n,s,e,w,ne,nw,se,sw."
              },
              "clip_amount": {
                "label": "Beschneidungsbetrag",
                "description": "Optionaler symmetrischer Beschneidungsprozentsatz der Randbereiche (0-40)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "fast_almost_gaussian_filter": {
            "name": "Schneller Näherungs-Gaußfilter",
            "description": "Der Fast-Almost-Gaussian-Filter bietet eine schnelle Glättung als Gauß-Näherung über iterative separierbare Box-Filterung (Mittelung) und erreicht eine nahezu gaußsche Weichzeichnung mit einer Rechenkomplexität von O(N) unabhängig vom Weichzeichnungsradius. Die Implementierung wendet aufeinanderfolgende Box-Faltungen an (jede berechnet lokale Pixelmittelwerte), um eine kumulative Gauß-Verteilung anzunähern; N Iterationen nähern zunehmend größere Gauß-Kernel an. Die mathematische Grundlage bildet der zentrale Grenzwertsatz: die wiederholte Faltung von Box-Funktionen nähert sich asymptotisch einer Gauß-Verteilung an. Zu den Hauptmerkmalen gehören eine Rechengeschwindigkeit, die Glättung mit großen Kerneln auf großen Bildern ermöglicht, eine separierbare Implementierung mit geringerem Speicherbedarf, die Parametersteuerung über die Iterationsanzahl (steuert den Weichzeichnungsradius) und die Wirksamkeit bei beliebigen Datentypen. Die Fast-Almost-Gaussian-Filterung ist besonders stark bei schnellen Bildpyramiden für mehrskalige Analysen, beim Durchsuchen von Satellitenbildern in Echtzeit, bei der Vorverarbeitung enormer Fernerkundungsdatensätze vor der Klassifikation und in interaktiven Bildbetrachtern, die eine reaktionsschnelle Glättung erfordern. Die Interpretation der Ausgabe zeigt, dass die Iterationsanzahl direkt mit dem Weichzeichnungsradius zusammenhängt: N=1 erzeugt eine minimale Glättung; N=3-5 eine mäßige Weichzeichnung; N>10 eine starke Glättung, die großen Gauß-Kerneln nahekommt. Mit zunehmender Iterationsanzahl verschieben sich die Ausgabewerte schrittweise zum lokalen Mittelwert; die Varianzabnahme folgt vorhersehbaren Mustern. Die verbleibenden Werte bleiben im Wertebereich der Eingabedaten. Der Vergleich mit echter Gauß-Filterung zeigt für die meisten Anwendungen eine akzeptable Näherung mit 2-5% Fehler. Der Geschwindigkeitsvorteil gegenüber echter Gauß-Filterung nimmt bei großen Radien drastisch zu: 5-20× schneller bei einem Radius >20 Pixel. Kleinere Artefakte sind eine leichte Welligkeit entlang von Kanten (sich über die Iterationen aufsummierende Box-Artefakte) und eine etwas andere Randbehandlung als beim Gauß-Filter. Überwachen Sie die Ausgabehistogramme auf multimodale Verteilungen, die eine ausreichende Glättung anzeigen. Setzen Sie den Filter in Vorverarbeitungspipelines ein, in denen die Geschwindigkeit geringfügige Näherungsfehler rechtfertigt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Näherungsweises Gauß-Sigma (>=1.8 empfohlen, Standard 1.8)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "flip_image": {
            "name": "Bild spiegeln",
            "description": "Spiegelt ein Bild vertikal, horizontal oder in beide Richtungen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "direction": {
                "label": "Richtung",
                "description": "Spiegelrichtung: vertical (Standard), horizontal oder both."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "frangi_filter": {
            "name": "Frangi-Filter",
            "description": "Führt eine mehrskalige Frangi-Vesselness-Verstärkung zur Erkennung gefäßartiger (röhrenförmiger) Strukturen in mehreren Maßstäben durch. Beruht auf der Eigenwertanalyse der Hesse-Matrix. Reagiert stark auf linienartige Strukturen (Gefäße, Straßen, Flüsse) und schwach auf blobartige Strukturen. Die mehrskalige Analyse (mehrere Sigma-Werte ausprobieren) erkennt Gefäße unterschiedlicher Breite automatisch. Weit verbreitet in der medizinischen Bildgebung und der Fernerkundung zur Erkennung linearer Strukturen. Frangi-Vesselness verwendet die Hauptkrümmungen (Eigenwerte der Hesse-Matrix), um die lokale Struktur zu klassifizieren: hohe Vesselness für lineare Strukturen, niedrige für Plateaus oder Blobs. Die mehrskalige Implementierung wird bei mehreren Sigma-Werten (Breiten) angewendet und kombiniert die Antworten. Hervorragend zur Erkennung von Straßen, Flüssen und Gefäßnetzen. Bei mehreren Maßstäben mäßiger Rechenaufwand. Sehr gut interpretierbare Ausgabe – reagiert auf erkennbare Strukturen. Anwendungen: (1) Straßenerkennung in Satellitenbildern, (2) Extraktion von Fluss-/Gewässernetzen, (3) allgemeine Erkennung linearer Strukturen, (4) Gefäßerkennung (medizinische Bildgebung), (5) mehrskalige Strukturerkennung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "scales": {
                "label": "Skalen",
                "description": "Liste gaußähnlicher Skalen in Pixeln (Standard [1.0, 2.0, 3.0])."
              },
              "beta": {
                "label": "Beta",
                "description": "Frangi-Beta-Parameter zur Unterdrückung von Blobs (Standard 0.5)."
              },
              "c": {
                "label": "C",
                "description": "Frangi-c-Parameter für die Strukturempfindlichkeit (Standard 15.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "gabor_filter_bank": {
            "name": "Gabor-Filterbank",
            "description": "Führt eine Gabor-Filterung mit mehreren Orientierungen durch – eine richtungsbezogene Texturanalyse. Wendet eine Bank von Gabor-Filtern in mehreren Orientierungen an (typischerweise 0°, 45°, 90°, 135°), um richtungsbezogene Texturmerkmale zu extrahieren. Gabor-Antworten geben Stärke und Orientierung der Textur an. Nützlich zur Erkennung gerichteter Merkmale, zur Texturcharakterisierung und zur Analyse orientierter Muster. Jede Orientierung wird separat ausgegeben. Die Gabor-Filterung extrahiert richtungsbezogene Textur durch Faltung mit orientierungsspezifischen Wavelets. Jede Orientierung zeigt Merkmale, die an dieser Richtung ausgerichtet sind. Gibt mehrere Bänder aus (eines je Orientierung), die lokale Texturrichtung und -stärke zeigen. Gabor-Antworten sind grundlegend für die Extraktion von Texturmerkmalen und die Objekterkennung im maschinellen Sehen. Die Filterbank ermöglicht eine umfassende richtungsbezogene Analyse. Anwendungen: (1) richtungsbezogene Texturanalyse, (2) Erkennung orientierter Merkmale (Rücken, Täler, lineare Strukturen), (3) Kartierung gerichteter Erosion/Ablagerung, (4) Straßen-/Gewässererkennung (lineare Strukturen), (5) texturbasierte Klassifikation.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma der Gauß-Hüllkurve in Pixeln (Standard 2.0)."
              },
              "frequency": {
                "label": "Frequenz",
                "description": "Räumliche Frequenz der Sinusschwingung in Zyklen/Pixel (Standard 0.2)."
              },
              "orientations": {
                "label": "Orientierungen",
                "description": "Anzahl der Orientierungen in der Filterbank (Standard 6)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "gaussian_filter": {
            "name": "Gaußfilter",
            "description": "Mathematisch optimale Gauß-Glättung mit distanzgewichtetem Kernel. Grundlegend für mehrskalige Analysen, Kantenerkennung und Bandpassfilterung. Der Sigma-Parameter steuert die Glättungsstärke; RGB-fähig.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Gaußsche Standardabweichung in Pixeln (0.5-20.0, Standard 0.75)."
              },
              "treat_as_rgb": {
                "label": "Als RGB behandeln",
                "description": "Auf wahr setzen, um das Verhalten im RGB-Intensitätsraum zu erzwingen."
              },
              "assume_three_band_rgb": {
                "label": "Drei Bänder als RGB annehmen",
                "description": "Wenn wahr (Standard), können 3-Band-uint8/uint16-Raster als RGB behandelt werden, falls explizite Metadaten fehlen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "glcm_texture": {
            "name": "GLCM-Textur",
            "description": "Der Texturanalysator auf Basis der Grauwertübergangsmatrix (GLCM) extrahiert statistische Texturmaße zweiter Ordnung, die räumliche Beziehungen zwischen den Grauwerten von Pixeln bei festgelegten Versatzdistanzen und -richtungen quantifizieren, und ermöglicht so eine anspruchsvolle Texturklassifikation zur Unterscheidung landwirtschaftlicher Vegetationsmuster, baulicher Strukturen und geologischer Formationen. Die GLCM berechnet Wahrscheinlichkeitsmatrizen, die erfassen, wie häufig Grauwertpaare bei festen Versätzen auftreten, und berechnet vier kanonische Haralick-Statistiken: Kontrast (misst lokale Variation), Korrelation (misst lineare Abhängigkeit), Homogenität (misst die Nähe zur Diagonalen) und Energie (misst Gleichförmigkeit). Das Werkzeug unterstützt acht Richtungsversätze (0°, 45°, 90°, 135° und ihre Gegenrichtungen), was eine richtungsabhängige Texturempfindlichkeit ermöglicht – zur Erkennung orientierter Muster wie Feldreihen, Gebäudeausrichtungen oder geologischer Strukturen. Zu den Hauptmerkmalen gehören eine mehrrichtungsbezogene Analyse, die anisotrope Textureigenschaften aufdeckt, die Abstimmung des Versatzparameters zur Optimierung der Maßstabsempfindlichkeit, die gleichzeitige Berechnung mehrerer Texturmaße zur Verringerung des Verarbeitungsaufwands sowie die inhärente Fähigkeit, visuell subtile Oberflächeneigenschaften zu unterscheiden. Die Anwendungsfälle reichen von der Präzisionslandwirtschaft (Klassifikation von Kulturarten, Erkennung von Feldgrenzen, Bewertung von Pflanzenstress) über die Stadtanalyse (Kartierung der Bebauungsdichte, Extraktion versiegelter Flächen) bis zur geologischen Fernerkundung (Unterscheidung von Gesteinsarten, Erkennung struktureller Muster). Anwendungen sind die Landbedeckungsklassifikation durch Kombination spektraler und texturaler Merkmale, die objektbasierte Bildanalyse zur Verbesserung der Klassifikationsgenauigkeit, die Qualitätskontrolle zur Erkennung instrumenteller Artefakte in Satellitenbildern sowie die Veränderungserkennung zur Trennung bedeutsamer Veränderungen vom Sensorrauschen. Die Interpretation der Ausgabe erfordert das Verständnis der Bedeutung jeder Statistik: hoher Kontrast weist auf raue/vielfältige Texturen hin; hohe Korrelation auf lineare Muster; hohe Homogenität auf gleichförmige Texturen; hohe Energie auf geordnete, sich wiederholende Muster. Die Ausgabebänder lassen sich zu Texturindizes kombinieren (z. B. hebt GLCM-Homogenität geteilt durch Kontrast homogene Bereiche hervor). Die Modi der Richtungsaggregation (mean/min/max/separate) beeinflussen die Dimensionalität und Interpretation der Ausgabe. Typische Texturanalysen verwenden mehrere GLCM-Maße gleichzeitig für eine robuste Klassifikation.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Einkanaliges Eingaberaster."
              },
              "window_size": {
                "label": "Fenstergröße",
                "description": "Ungerade Größe des gleitenden Fensters in Pixeln (Standard 7)."
              },
              "distance": {
                "label": "Distanz",
                "description": "Pixelabstand für die Paarversätze der Co-Occurrence-Matrix (Standard 1)."
              },
              "angles": {
                "label": "Winkel",
                "description": "Kommagetrennte Winkel aus 0,45,90,135 (Standard '0,45,90,135')."
              },
              "features": {
                "label": "Objekte",
                "description": "Kommagetrennte Merkmale: contrast,dissimilarity,homogeneity,asm,energy,entropy,mean,variance,correlation."
              },
              "direction_aggregation": {
                "label": "Richtungsaggregation",
                "description": "Aggregationsmodus der Richtungen: mean (Standard), min, max, range, separate."
              },
              "levels": {
                "label": "Ebenen",
                "description": "Anzahl der Quantisierungsstufen (Standard 32; Bereich 8-128)."
              },
              "symmetric": {
                "label": "Symmetrisch",
                "description": "Wenn wahr (Standard), werden symmetrische GLCMs erstellt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad des Ausgaberasters (mehrkanaliges GeoTIFF)."
              }
            }
          },
          "guided_filter": {
            "name": "Geführter Filter",
            "description": "Der geführte Filter realisiert eine kantenerhaltende Glättung, indem die Filterausgabe auf lokal lineare Beziehungen zu einem Führungsbild beschränkt wird, typischerweise dem Original oder einem verwandten Referenzlayer. Die Implementierung unterteilt das Bild in überlappende rechteckige Bereiche und berechnet in jedem Bereich lineare Regressionsparameter, um eine glatte Ausgabe unter Berücksichtigung der Struktur des Führungsbilds zu erzwingen. Die mathematische Formulierung minimiert ||Fᵢ - a·Gᵢ - b||² + ε||a||², wobei Fᵢ die gefilterte Ausgabe, Gᵢ das Führungsbild und (a, b) die lokal linearen Parameter sind. Zu den Hauptmerkmalen gehören Flexibilität (das Führungsbild kann vom gefilterten Bild unabhängig sein), Recheneffizienz durch eine separierbare O(N)-Implementierung, eine Parametersteuerung zur Anpassung der Stärke der Kantenerhaltung sowie die Wirksamkeit bei Führung durch Einzelband- oder multispektrale Daten. Die geführte Filterung ist besonders stark in Fusionsabläufen mehrerer Sensoren, in denen optische Daten das Entrauschen von SAR-Daten steuern, bei der Verfeinerung von LiDAR-Klassifikationen mithilfe zeitgleicher Orthofotos, bei der Entfernung von Schatten/Wolken in Satellitenmosaiken mithilfe zeitlicher Referenzbilder sowie bei der Detailverstärkung in Aufgaben der Kartenregularisierung. Die Interpretation der Ausgabe zeigt, dass gefilterte Bereiche lokal der Struktur des Führungsbilds ähnlich bleiben, während innerhalb homogener Bereiche eine Intensitätsmittelung erfolgt. Der Glättungsradius steuert die räumliche Ausdehnung (größerer Radius = stärkere Glättung); der Regularisierungsparameter ε wägt Glätte gegen Strukturtreue ab (größeres ε = glatter, kleineres ε = mehr Detail). Die Ausgabebereiche entsprechen der Eingabe; ein visueller Vergleich mit dem Führungsbild bestätigt die Treue der Kantenerhaltung. Häufige Artefakte sind eine Überglättung an starken Diskontinuitäten (geeignete Parameter wählen) und eine unzureichende Glättung in Bereichen mit schwachem Führungsbild (Qualität des Führungsbilds prüfen). Überwachen Sie die Kreuzkorrelation zwischen gefilterter Ausgabe und Führungsbild, um die Qualität der Ausrichtung zu beurteilen. Setzen Sie den Filter gezielt in Abläufen der Bildfusion, Schärfung und Rekonstruktion ein, in denen Kanteninformationen aus einer Quelle die Filterung einer anderen steuern.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "radius": {
                "label": "Radius",
                "description": "Fensterradius des Guided-Filters in Pixeln (Standard 4)."
              },
              "epsilon": {
                "label": "Epsilon",
                "description": "Regularisierungsparameter für die lokale Varianz (Standard 0.01)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "high_pass_bilateral_filter": {
            "name": "Bilateraler Hochpassfilter",
            "description": "Berechnet ein Hochpassresiduum, indem die bilaterale Glättung vom Eingaberaster subtrahiert wird.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "sigma_dist": {
                "label": "Sigma Distanz",
                "description": "Standardabweichung des räumlichen (Distanz-)Gauß-Kernels in Pixeln (0.5–20.0, Standard 0.75)."
              },
              "sigma_int": {
                "label": "Sigma Intensität",
                "description": "Standardabweichung des Intensitäts-Gauß-Kernels in Einheiten der Rasterwerte (Standard 1.0)."
              },
              "treat_as_rgb": {
                "label": "Als RGB behandeln",
                "description": "Auf wahr setzen, um für gepackte RGB-Raster vor der Hochpass-Differenzbildung eine HSI-Intensitätsfilterung zu erzwingen."
              },
              "assume_three_band_rgb": {
                "label": "Drei Bänder als RGB annehmen",
                "description": "Wenn wahr (Standard) und keine expliziten Farbmetadaten vorhanden sind, wird die RGB-Interpretation von 3-Band-uint8/uint16-Rastern zugelassen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabedatei. Wenn nicht angegeben, verbleibt die Ausgabe im Speicher."
              }
            }
          },
          "high_pass_filter": {
            "name": "Hochpassfilter",
            "description": "Der Hochpassfilter isoliert hochfrequente räumliche Komponenten in Bildern, indem eine niederfrequente (geglättete) Version vom Originalbild subtrahiert wird. Mathematisch geschieht dies durch Faltung des Bilds mit einem Kernel, der Gradienten betont und großräumige Tonwertvariationen unterdrückt. Die Implementierung verwendet je nach Kernelgröße und Bildabmessungen entweder direkte Faltung oder Verarbeitung im Frequenzbereich. Der Filter verstärkt Kanten, feine Texturdetails und kleinräumige Variationen und entfernt dabei großräumige Beleuchtungstrends. Zu den kennzeichnenden Merkmalen gehören der Erhalt des Kantenkontrasts ohne Randartefakte, eine selektive Frequenzdämpfung abhängig vom Kernelradius und die direkte Anwendbarkeit auf Graustufen- und multispektrale Bilder. Die Hochpassfilterung ist von unschätzbarem Wert für die Geländeanalyse, bei der subtile topografische Merkmale hervorgehoben werden müssen, für das Schärfen von Satellitenbildern zur visuellen Interpretation, für die Erkennung kleinräumiger geologischer Strukturen und für die Vorverarbeitung von Daten für die Machine-Learning-Klassifikation. Sie ist außerdem unverzichtbar bei der Aufbereitung von Orthofotos für die Veränderungserkennung und bei der Verbesserung LiDAR-abgeleiteter Produkte. Zur Interpretation der Ausgabe ist zu beachten, dass positive Werte lokale Maxima (helle Kanten) und negative Werte lokale Minima (dunkle Kanten) anzeigen. Der typische Bereich beträgt bei 8-Bit-Bildern ±100; eine mittelwertfreie Ausgabe zeigt eine erfolgreiche Extraktion der hohen Frequenzen an. Häufige Artefakte sind Überschwinger an starken Diskontinuitäten und verstärktes Rauschen, wenn die Quellbilder verrauscht sind. Die Maßstabsinterpretation hängt vom Kernelradius ab: kleinere Kernel verstärken feine Texturen (einzelne Pixel), größere Kernel betonen Merkmale mittleren Maßstabs (Geländevariationen über Dutzende Pixel). Überwachen Sie die Ausgabestatistiken; eine übermäßige Nullzentrierung weist auf eine mögliche Überverarbeitung hin. Verwenden Sie den Filter zusammen mit ergänzenden Tiefpassergebnissen, um das Original zu rekonstruieren, oder in Abläufen der mehrskaligen Zerlegung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Fensterbreite in Pixeln (ungerade Ganzzahl, Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Fensterhöhe in Pixeln (ungerade Ganzzahl, Standard = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "high_pass_median_filter": {
            "name": "Median-Hochpassfilter",
            "description": "Führt eine Hochpassfilterung durch, indem der lokale Median von den Zentrumswerten subtrahiert wird: Ausgabe = Pixel - Median der Nachbarschaft. Kombiniert Hochpassfilterung (verstärkt Details) mit der Robustheit des Medians (entfernt Rauschen). Um null zentrierte Ausgabe (negativ = dunkler als die Umgebung, positiv = heller). Robuster gegenüber Ausreißern als gaußbasierte Hochpassfilter. Das Hochpassresiduum zeigt lokale Abweichungen vom Mediantrend. Besonders robust bei verrauschten Daten – der Median ist bei Ausreißern stabiler als der Mittelwert. Die Ausgabe betont feinmaßstäbige Variation. Wird häufig auf gaußgeglättete Versionen angewendet (ergibt einen Bandpassfilter). Nützlich zur Texturverstärkung und Merkmalsextraktion aus verrauschten Bildern. Anwendungen: (1) Texturverstärkung aus verrauschten Daten, (2) Detailextraktion vor der Klassifikation, (3) robuste Merkmalserkennung, (4) Vorverarbeitung für texturbasierte Segmentierung, (5) SAR-Vorverarbeitung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Nachbarschaftsbreite in Pixeln (ungerade Ganzzahl, Standard 11)."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Nachbarschaftshöhe in Pixeln (ungerade Ganzzahl, Standard 11)."
              },
              "sig_digits": {
                "label": "Signifikante Stellen",
                "description": "Signifikante Stellen für die Histogramm-Klasseneinteilung (Standard 2)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "integral_image_transform": {
            "name": "Integralbildtransformation",
            "description": "Berechnet für jedes Band eine Summed-Area-Transformation (Integralbild).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "k_nearest_mean_filter": {
            "name": "Filter der K nächsten Mittelwerte",
            "description": "Führt eine kantenerhaltende Mittelwertglättung nach k nächsten Nachbarn durch: sortiert die Nachbarschaft nach dem Abstand zum Zentrumswert und mittelt die k nächstgelegenen Werte. Hybrider Ansatz, der Kanten durch Ähnlichkeitsgewichtung erhält. Das Zentrumspixel und die k-1 ähnlichsten Nachbarn werden gemittelt. Anspruchsvoller als einfaches k-NN (berücksichtigt räumliche und Intensitätsähnlichkeit). Im Vergleich zum bilateralen Filter recheneffizient. Der K-Nächste-Ansatz wählt Nachbarn adaptiv aus: Pixelwerte nahe dem Zentrum werden gemittelt, unähnliche Pixel ignoriert. Der Parameter K steuert die Glättung: k=1 (keine Glättung), k=n (alle Nachbarn = Mittelwertfilter). Typischerweise k=n/2 (die Hälfte der Nachbarschaft). Effiziente Alternative zum bilateralen Filter – ähnliche Kantenerhaltung bei geringerem Rechenaufwand. Besonders nützlich für Bilder mit starken Intensitätsdiskontinuitäten. Anwendungen: (1) kantenerhaltende Glättung (Alternative zum bilateralen Filter), (2) schnelle Vorverarbeitung für die Klassifikation, (3) effizienzkritische Vorverarbeitung, (4) Filterung mehrbandiger Bilder. Typische Parameter: k=neighborhood_size/2 bis 3/4.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Nachbarschaftsbreite in Pixeln (ungerade Ganzzahl, Standard 3)."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Nachbarschaftshöhe in Pixeln (ungerade Ganzzahl, Standard 3)."
              },
              "k": {
                "label": "K",
                "description": "Anzahl der zu mittelnden nächsten Nachbarn (Standard 5)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "kuwahara_filter": {
            "name": "Kuwahara-Filter",
            "description": "Der Kuwahara-Filter realisiert eine nichtlineare kantenerhaltende Glättung, indem die Nachbarschaft jedes Pixels in vier Quadranten unterteilt, in jedem Quadranten Statistiken berechnet und der Quadrant mit der geringsten Varianz als Ausgabewert gewählt wird. Die Implementierung unterteilt ein Fenster von (2k+1)×(2k+1) in vier überlappende k×k-Teilfenster, berechnet Mittelwert und Varianz jedes Quadranten und gibt den Mittelwert des Quadranten mit der geringsten Varianz aus. Dieser rangbasierte Ansatz glättet homogene Bereiche und schärft zugleich Kanten. Zu den Hauptmerkmalen gehören eine echte Kantenerhaltung durch Quadrantenauswahl (Kanten zwischen Quadranten verhindern ein Verwischen der Ausgabe), rechnerische Einfachheit, da nur Mittelwert-/Varianzberechnungen nötig sind, die Parametersteuerung über die Quadrantengröße k sowie die Wirksamkeit bei optischen, Radar- und thermischen Bildern. Die Kuwahara-Filterung ist besonders stark bei der Glättung LiDAR-abgeleiteter DEMs unter Erhalt von Geländestufen und Terrassen, bei der Extraktion von Straßennetzen aus hochaufgelösten Bildern unter Erhalt scharfer Mittellinien, bei der Abgrenzung von Gebäudegrundrissen aus Luftbildern und bei der Erkennung von Ölteppichgrenzen in SAR-Bildern. Die Interpretation der Ausgabe zeigt, dass homogene Bereiche den natürlich mittelnden Quadranten (geringste Varianz) ausgeben; an Kanten wird der Quadrant mit der gleichförmigen Struktur nächst der Kante ausgegeben, wodurch die Ausgabe faktisch an die sauberere Seite gebunden wird. Die Quadrantengröße k steuert den Detailerhalt: k=1 (minimale Glättung) bewahrt feine Kanten; k=3-4 bietet eine ausgewogene Glättung und Kantenerhaltung; k>5 birgt die Gefahr von Detailverlust. Die Ausgabewerte entsprechen genau den Eingabepixelwerten aus den gewählten Quadranten (keine Interpolation). Überwachen Sie die Ausgabehistogramme auf bimodale Verteilungen (Kanten und homogene Bereiche klar getrennt); unimodale Verteilungen deuten auf verwischte Kanten hin. Wenden Sie bei Überglättung ergänzend eine Schärfung an. Häufige Artefakte sind eine Richtungsverzerrung abhängig von der Quadrantenausrichtung und Blockbildung nahe schwacher Kanten. Verwenden Sie den Filter in der Vorverarbeitung für die Segmentierung, wo die Kantenerhaltung eine genaue Grenzextraktion sicherstellt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "radius": {
                "label": "Radius",
                "description": "Kuwahara-Quadrantenradius in Pixeln (Standard 2)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "lee_filter": {
            "name": "Lee-Filter",
            "description": "Der Lee-Filter führt eine Speckle-Reduktion für SAR-Daten nach Lees multiplikativem Modell durch und nimmt an, dass Radarrückstreuungen einem multiplikativen Rauschen folgen: I = S·N, wobei S das Signal und N das multiplikative Rauschen ist. Die Implementierung berechnet lokale Mittelwerte und Varianzen, schätzt die Speckle-Varianz und filtert dann über: F = μ + (1 - σₙ²/σ_I²)·(I - μ), wobei σₙ² die Speckle-Varianz und σ_I² die Gesamtvarianz ist. Dieser modellbasierte Ansatz bewahrt Merkmale hoher Kohärenz und unterdrückt zugleich Speckle. Zu den Hauptmerkmalen gehören ein SAR-spezifisches Rauschmodell (multiplikativ statt gaußsch), der Erhalt von Punktzielen und Kanten, eine einfache Parameterinterpretation (die Fenstergröße steuert die Kohärenzmessung) sowie eine erwiesene Wirksamkeit bei Einfach- und Mehrfachpolarisations-SAR. Die Lee-Filterung ist besonders stark in der SAR-Vorverarbeitung für landwirtschaftliches Monitoring, Waldklassifikation, die Überwachung der Meeresoberfläche und Abläufe der Hochwasserkartierung. Die Interpretation der Ausgabe zeigt, dass Bereiche hoher Kohärenz (Punktziele, starke Kanten) minimal gefiltert werden, Bereiche geringer Kohärenz (Speckle-Rauschen, schwache Grenzen) dagegen stark. Die Schätzung der Speckle-Varianz beeinflusst die Ausgabe: eine genaue Schätzung erfordert ausreichend homogene Pixel; eine unterschätzte Varianz führt zu Unterglättung; eine überschätzte Varianz zu Überglättung. Die Fenstergröße steuert die Auflösung der Kohärenzmessung: kleine Fenster (3×3) bewahren feine Details; große Fenster (7×7) verbessern die Varianzschätzung, bergen aber die Gefahr von Detailverlust. Die Ausgabeskalierung entspricht der Eingabe; eine logarithmische Darstellung verbessert die Sichtbarkeit. Die typische Rauschminderung erreicht je nach Anzahl der Looks eine Varianzabnahme von 5-10 dB. Überwachen Sie das Ausgabehistogramm auf eine verbleibende Speckle-Signatur; glatte Verteilungen deuten auf eine ausreichende Filterung hin. Zu den Artefakten gehören mögliche verwischte Kanten in Bereichen schwacher Kohärenz und eine Richtungsverzerrung bei linearen Strukturen. Setzen Sie den Filter gezielt in der SAR-Klassifikation ein, wenn Speckle unterdrückt werden muss, ohne die Integrität der Klassifikationsmerkmale zu beeinträchtigen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Nachbarschaftsbreite in Pixeln (ungerade Ganzzahl, Standard 11)."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Nachbarschaftshöhe in Pixeln (ungerade Ganzzahl, Standard 11)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Halbe Breite des Intensitätsbereichs um den Mittelwert (Standard 10.0)."
              },
              "m_value": {
                "label": "M-Wert",
                "description": "Minimale Anzahl von Stichproben im Bereich, bevor auf die Mittelwertbildung zurückgegriffen wird (Standard 5.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "line_detection_filter": {
            "name": "Linienerkennungsfilter",
            "description": "Der Linienerkennungsfilter ist ein spezialisierter Kantendetektor, der lineare Strukturen – Straßen, Flüsse, Stromleitungen und geologische Lineamente – in vier Hauptrichtungen (horizontal, vertikal und beide Diagonalen) verstärkt, indem er richtungsbezogene Faltungskernel anwendet, die auf Konnektivität und Kontinuität von Linien optimiert sind. Dieser Filter verwendet 3×3-Kernel, die an der jeweiligen Hauptrichtung ausgerichtete lineare Strukturen betonen und dabei senkrecht verlaufendes Rauschen und zufällige Merkmalsvariationen unterdrücken. Der richtungsbezogene Ansatz trennt die Erkennungen nach Orientierung, sodass nachgelagerte Anwendungen horizontale Infrastruktur (Rohrleitungen, Feldgrenzen) von vertikalen Strukturen (Baumreihen, Versorgungskorridore) unterscheiden können. Zu den Hauptmerkmalen gehören eine mehrrichtungsbezogene Zerlegung, die separate Betrags- und Richtungsbänder erzeugt, eine adaptive Abstimmung der Empfindlichkeit für Variationen von Linienbreite und Kontrast sowie eine hervorragende Leistung bei subtilen linearen Strukturen in komplexem Gelände. Die Anwendungsfälle reichen von der Kartierung von Infrastruktur (Straßen, Eisenbahnen, Stromleitungen) über die Extraktion natürlicher Strukturen (Gewässer, Rücken, Verwerfungen) bis zur Abgrenzung von Landnutzungsgrenzen. Anwendungen sind die Vorverarbeitung für die Vektorkonvertierung bei der Katasterdigitalisierung, die Extraktion von Verkehrsnetzen aus Orthofotos, die Kartierung geologischer Strukturen aus Satellitenbildern und die Mustererkennung in Fernerkundungsanalysen. Zur Interpretation der Ausgabe ist zu beachten, dass jede Richtungskomponente die Linienstärke in genau dieser Orientierung zeigt – untersuchen Sie alle vier Richtungsausgaben, um die vorherrschenden Strukturrichtungen zu ermitteln. Höhere Betragswerte weisen auf eine stärkere Linienkontinuität hin; niedrige Werte deuten auf Rauschen oder Unterbrechungen hin. Die Ausgabe ist naturgemäß spärlich und hebt nur Pixel hervor, die lineare Strukturen darstellen; Hintergrundbereiche bleiben nahe null. Die mehrrichtungsbezogene Ausgabe ermöglicht eine nachträgliche Klassifikation, bei der Straßen (in bebauten Gebieten typischerweise horizontal/vertikal) von natürlichen Lineamenten (beliebige Orientierung) unterschieden werden. Kombinieren Sie die Richtungskomponenten zu einer einheitlichen Linienkarte oder analysieren Sie jede Richtung einzeln für die Kartierung orientierter Strukturen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "variant": {
                "label": "Variante",
                "description": "Variante der Linienrichtung: v, h, 45 oder 135."
              },
              "abs_values": {
                "label": "Absolutwerte",
                "description": "Wenn wahr, werden absolute Antwortwerte ausgegeben."
              },
              "clip_tails": {
                "label": "Ränder beschneiden",
                "description": "Optionaler symmetrischer Beschneidungsprozentsatz der Randbereiche (0-40)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "line_thinning": {
            "name": "Linienausdünnung",
            "description": "Reduziert zusammenhängende binäre Rasterobjekte auf eine Zelle breite Skelettlinien.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "lidar_ground_point_filter": {
            "name": "LiDAR-Bodenpunktfilter",
            "description": "Trennt Gelände von Nicht-Bodenpunkten: neigungsbasierte Klassifikation/Filterung anhand lokaler Ebenengeometrie und Höhenschwellen. Effiziente Bodensegmentierung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Suchradius der Nachbarschaft (Standard 2.0)."
              },
              "min_neighbours": {
                "label": "Minimale Nachbarn",
                "description": "Mindestanzahl der Nachbarn (Standard 0)."
              },
              "slope_threshold": {
                "label": "Neigungsschwellenwert",
                "description": "Neigungsschwellenwert in Grad (Standard 45.0, maximal 88)."
              },
              "height_threshold": {
                "label": "Höhenschwellenwert",
                "description": "Minimaler vertikaler Abstand, um Punkte als Nicht-Gelände zu kennzeichnen (Standard 1.0)."
              },
              "classify": {
                "label": "Klassifizieren",
                "description": "Wenn wahr, werden Punkte klassifiziert (Boden=2, Nicht-Gelände=1); andernfalls werden Nicht-Geländepunkte herausgefiltert."
              },
              "slope_norm": {
                "label": "Neigungsnormierung",
                "description": "Wenn wahr, wird vor dem Neigungstest eine Top-Hat-Geländenormalisierung angewendet (Standard wahr)."
              },
              "height_above_ground": {
                "label": "Höhe über Grund",
                "description": "Wenn wahr, werden die Z-Werte als lokale Höhe über dem nächstgelegenen tieferen Nachbarn ausgegeben."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad für den Einzeleingabemodus."
              }
            }
          },
          "majority_filter": {
            "name": "Mehrheitsfilter",
            "description": "Berechnet für jedes Pixel den Modalwert (häufigster Wert/häufigste Klasse) in einem gleitenden Fenster. Nichtlinearer Filter, der kategoriale Grenzen und dominante Muster bewahrt. Besonders nützlich für klassifizierte Bilder, bei denen die Ausgabe innerhalb der ursprünglichen Klassenmenge bleiben muss (anders als beim Mittelwertfilter, der interpolierte Werte erzeugt). Unverzichtbar für die morphologische Bereinigung von Klassifikationsausgaben.\n\nDie Mehrheitsfilterung ist das modalwertbasierte Gegenstück zur Medianfilterung. Bei kategorialen Daten (klassifizierte Bilder, Landbedeckung) bewahrt der Mehrheitsfilter die Klassendefinitionen und glättet zugleich das Rauschen. Bei kontinuierlichen Daten kann der Mehrheitsfilter lokale Spitzen in der Werteverteilung aufdecken. Häufig folgt eine Beseitigung von Minderheitsklassen (Bereinigung nach der Klassifikation), um Salz-und-Pfeffer-Artefakte der Klassifikation zu entfernen.\n\nAnwendungen: (1) Glättung nach der Klassifikation (entfernt kleine fehlerhafte Klassenflächen), (2) Karte der Mehrheitsklasse aus mehrfach klassifizierten Ausgaben, (3) Bereinigung von Vektordaten (Klassendisaggregation), (4) Rauschunterdrückung in schwellenwertbehandelten Bildern, (5) Attributglättung in Segmentierungsausgaben. Typischer Arbeitsablauf: klassifizieren→Mehrheitsfilter→Beseitigung von Minderheitsklassen→endgültige bereinigte Karte.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Fensterbreite in Pixeln (ungerade Ganzzahl, Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Fensterhöhe in Pixeln (ungerade Ganzzahl, Standard = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "maximum_filter": {
            "name": "Maximumfilter",
            "description": "Berechnet den Maximalwert in einem gleitenden Fenster und zeigt lokale Spitzen und Rücken. Dilatationsoperator der morphologischen Bildverarbeitung. Nützlich zur Erkennung von Spitzen, Kammlinien und Merkmalen maximaler Amplitude. Empfindlich gegenüber einzelnen Ausreißern (ein hoher Wert im Fenster erzeugt eine hohe Ausgabe).\n\nDer Maximumfilter ist der morphologische „Dilatations“-Operator – er dehnt helle Bereiche aus und verkleinert dunkle Bereiche. Bei wiederholter Anwendung (mehrfache Dilatation) entstehen geglättete Spitzen, und isolierte Merkmale wachsen, bis sie ihre Nachbarschaft ausfüllen. In Kombination mit dem Minimumfilter ermöglicht er die Schließung (Dilatation, dann Erosion) und die Öffnung (Erosion, dann Dilatation). Unverzichtbar für die morphologische Merkmalserkennung und mehrskalige Analysen.\n\nAnwendungen: (1) morphologische Dilatation für größenbasierte Filterung, (2) Schließung über Dilatation→Erosion zum Füllen kleiner Löcher, (3) Identifikation von Spitzen/Rücken in Gelände und Bildern, (4) lokales Deckenniveau in Bathymetrie/DEM, (5) mehrskalige Merkmalsanalyse (Dilatation über Maßstäbe vergleichen). Typischer Arbeitsablauf: Maximum→Vergleich mit Minimum→Schließung oder Öffnung je nach Merkmalstyp.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Fensterbreite in Pixeln (ungerade Ganzzahl, Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Fensterhöhe in Pixeln (ungerade Ganzzahl, Standard = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "mean_filter": {
            "name": "Mittelwertfilter",
            "description": "Berechnet für jedes Pixel den Mittelwert (Durchschnitt) in einem gleitenden Fenster. Grundlegende Glättungsoperation, die lokales Rauschen verringert und dabei scharfe Übergänge verwischt. Die Ausgabe stellt die lokale zentrale Tendenz dar. Weit verbreitet für Vorverarbeitung, Rauschminderung und mehrskalige Analysen.\n\nDie Mittelwertfilterung ist die häufigste Tiefpass-Glättungsoperation. Sie ist sehr empfindlich gegenüber Ausreißern (Extremwerte können die Ergebnisse verzerren), weshalb der Medianfilter für verrauschte Daten vorzuziehen ist. Recheneffizient. Die Filtergröße steuert das Ausmaß der Glättung: klein (3×3) bewahrt Details, groß (31×31+) erzeugt eine stark geglättete Oberfläche. Wird häufig iterativ oder in mehreren Maßstäben für Multiresolutionsanalysen angewendet.\n\nAnwendungen: (1) grundlegende Rauschminderung, (2) Vorverarbeitung vor der Merkmalserkennung (glättet Falschpositive), (3) mehrskalige Analyse (Anwendung bei 3×3, 11×11, 31×31), (4) zeitliche Glättung (Kombination von Szenen), (5) Grundlage für andere statistische Operationen. Zum Vergleich: Der Median (nichtlinear, kantenerhaltend) bietet eine bessere Kantenerhaltung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Fensterbreite in Pixeln (ungerade Ganzzahl, Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Fensterhöhe in Pixeln (ungerade Ganzzahl, Standard = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "median_filter": {
            "name": "Medianfilter",
            "description": "Berechnet für jedes Pixel den Medianwert in einem gleitenden Fenster und ersetzt es durch das 50. Perzentil der Nachbarschaft. Robuster, kantenerhaltender Rauschfilter (nichtlinear). Besonders wirksam bei der Entfernung von Impulsrauschen (Salz und Pfeffer) unter Erhalt scharfer Grenzen. Die Ausgabewerte sind tatsächliche Pixelwerte aus der Nachbarschaft (nicht interpoliert).\n\nDie Medianfilterung ist nichtlinear – ein entscheidender Vorteil gegenüber der Mittelwertfilterung bei der Rauschminderung, da keine neuen Werte entstehen und Kanten nicht verwischt werden. Große Filtergrößen glätten stark und bewahren zugleich scharfe Übergänge. Weit verbreitet in der Fernerkundung, der medizinischen Bildgebung und der SAR-Bildverarbeitung. Der Rechenaufwand steigt mit der Filtergröße, ist aber im Allgemeinen geringer als bei bilateralen oder geführten Filtern.\n\nAnwendungen: (1) Speckle-Reduktion in SAR-Bildern (besonders wirksam für die Phasenkohärenz), (2) Entfernung von Salz-und-Pfeffer-Rauschen, (3) Vorverarbeitung vor der Kantenerkennung (verringert falsche Kanten), (4) Grenzerhaltung in der Vorverarbeitung für die Klassifikation, (5) radiometrische Korrektur von Ausreißerwerten. Typischer Arbeitsablauf: Median anwenden→kantenverstärkte Ausgabe→Schwellenwert für die Merkmalsextraktion.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Fensterbreite in Pixeln (ungerade Ganzzahl, Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Fensterhöhe in Pixeln (ungerade Ganzzahl, Standard = filter_size_x). Alias: filtery."
              },
              "sig_digits": {
                "label": "Signifikante Stellen",
                "description": "Anzahl der signifikanten Stellen für die quantisierte Rangfilterung (Standard 2)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "minimum_filter": {
            "name": "Minimumfilter",
            "description": "Berechnet den Minimalwert in einem gleitenden Fenster und zeigt lokale Tiefpunkte und Mulden. Erosionsoperator der morphologischen Bildverarbeitung. Nützlich zur Erkennung von Talböden, Senken und Merkmalen minimaler Höhe. Empfindlich gegenüber einzelnen Ausreißern (ein niedriger Wert im Fenster erzeugt eine niedrige Ausgabe).\n\nDer Minimumfilter ist der morphologische „Erosions“-Operator – er verkleinert helle Bereiche und dehnt dunkle Bereiche aus. Bei wiederholter Anwendung (mehrfache Erosion) entstehen geglättete Täler, und isolierte Merkmale verschwinden. In Kombination mit dem Maximumfilter (Dilatation) ermöglicht er die Operationen Öffnung (Erosion, dann Dilatation) und Schließung (Dilatation, dann Erosion). Wird häufig bei der mehrskaligen Zerlegung verwendet: Vergleich des Minimums bei 3×3, 11×11, 31×31 zur Bestimmung der Merkmalsmaßstäbe.\n\nAnwendungen: (1) morphologische Erosion für größenbasierte Filterung, (2) Öffnung über Erosion→Dilatation zur Entfernung kleiner Rauschobjekte, (3) Identifikation von Senken/Tälern im Gelände, (4) lokales Bodenniveau in Bathymetrie/DEM, (5) mehrskalige Merkmalsanalyse (Erosion über Maßstäbe vergleichen). Typischer Arbeitsablauf: Minimum→Vergleich mit Maximum→Öffnung oder Schließung je nach Merkmalstyp.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Fensterbreite in Pixeln (ungerade Ganzzahl, Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Fensterhöhe in Pixeln (ungerade Ganzzahl, Standard = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "non_local_means_filter": {
            "name": "Non-Local-Means-Filter",
            "description": "Die Non-Local-Means-Filterung führt ein leistungsfähiges Entrauschen durch, indem ähnliche Bildausschnitte (Patches) gemittelt werden, die im gesamten Bild statt nur unter benachbarten Pixeln gefunden werden; dabei wird die Selbstähnlichkeit des Bilds genutzt, um Rauschen zu unterdrücken und Strukturen zu erhalten. Die Implementierung ermittelt über die euklidische Distanz im Patch-Raum Patches, die dem jeweiligen Ziel-Patch ähnlich sind, gewichtet ähnliche Patches exponentiell nach ihrer Ähnlichkeit und mittelt die gewichteten Patches. Der Algorithmus berechnet: Fᵢ = (1/Z) Σⱼ exp(-d(Pᵢ, Pⱼ)²/h²) · Iⱼ, wobei d die Patch-Distanz misst, h die Bandbreite steuert und Z normiert. Zu den Hauptmerkmalen gehören ein überlegenes Entrauschen durch Ähnlichkeitssuche statt nur räumlicher Nähe, die Wirksamkeit bei komplexen Texturen und feinen Details, die Anwendbarkeit auf beliebige Datentypen sowie eine erwiesene Leistung bei medizinischen, Satelliten- und fotografischen Bildern. Die Non-Local-Means-Filterung ist besonders stark bei der detaillierten Restaurierung von Satellitenbildern unter Erhalt feiner Texturen und Strukturen, bei der Mittelung multitemporaler Stapel zur Vorbereitung der Veränderungserkennung, beim Entrauschen sehr verrauschter Vermessungsdaten (Ultraschall, hyperspektral) und bei der Verbesserung archäologischer Bilder und Luftbilder. Zur Interpretation der Ausgabe ist zu beachten, dass ähnliche Bereiche aus dem gesamten Bild zu jedem Ausgabepixel beitragen, während lokal unähnliche Bereiche vernachlässigbar beitragen. Die Patch-Größe steuert den Merkmalserhalt (größere Patches = glattere Ergebnisse, feinere Patches = mehr Detail); die Bandbreite h steuert die Ähnlichkeitsgewichtung (größeres h = mehr einbezogene Patches, kleineres h = strengere Ähnlichkeitsanforderungen). Die Ausgabebereiche entsprechen der Eingabe; die Statistiken verschieben sich zu den regionalen Mittelwerten, während feine Strukturen erhalten bleiben. Der Rechenaufwand wächst mit der Bildgröße und dem Patch-Radius; die Ausführung erfordert bei großen Bildern typischerweise erhebliche Verarbeitungszeit. Überwachen Sie den Fortschritt der Filterung über den PSNR oder per visueller Prüfung. Häufige Artefakte sind eine Überglättung feiner Texturen (Patch-Größe vorsichtig erhöhen) und eine Unterglättung in stark verrauschten Bereichen (Bandbreite erhöhen). Setzen Sie den Filter gezielt in Abläufen ein, die eine maximale Rauschminderung unter Erhalt feinmaßstäbiger Merkmale erfordern.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Radius des Suchfensters in Pixeln (Standard 5)."
              },
              "patch_radius": {
                "label": "Patch-Radius",
                "description": "Patch-Radius in Pixeln (Standard 1)."
              },
              "h": {
                "label": "H",
                "description": "Parameter für die Filterstärke (Standard 10.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "opening": {
            "name": "Öffnen",
            "description": "Führt eine morphologische Öffnung mit einem rechteckigen Strukturelement durch.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Ungerade Nachbarschaftsbreite (Standard 11)."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Ungerade Nachbarschaftshöhe (Standard wie filter_size_x)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "olympic_filter": {
            "name": "Olympia-Filter",
            "description": "Der Olympic-Filter realisiert eine rangbasierte Glättung, indem aus jeder Pixelnachbarschaft der höchste und der niedrigste Wert entfernt und die verbleibenden Pixel anschließend gemittelt werden. Dieser robuste Filteransatz beseitigt extreme Ausreißer (wahrscheinlich Rauschen oder fehlerhafte Werte) und bewahrt die zentrale Tendenz. Mathematische Formulierung: F = (1/(N-2)) Σ(I_sorted[2:N-1]), wobei die sortierten Nachbarschaftswerte den höchsten und den niedrigsten Wert ausschließen. Die Implementierung erfordert das Sortieren kleiner Nachbarschaften (recheneffizient), erzielt aber eine wirksame Rauschminderung. Zu den Hauptmerkmalen gehören eine einfache Strategie zur Ausreißerentfernung, eine wirksame Verringerung von Salz-und-Pfeffer-Rauschen, eine kantenbewusste Filterung (Kanten erscheinen oft als Extremwerte) und die Anwendbarkeit auf beliebige Datentypen. Die Olympic-Filterung ist besonders stark bei der Vorverarbeitung optischer Satellitenbilder (entfernt isolierte helle Wolkenpixel und dunkle Schatten), bei der DEM-Glättung zur Verringerung von Vermessungsrauschartefakten, beim Entrauschen thermischer Bilder (entfernt Sensorausreißer) und bei der Vorverarbeitung von Radarbildern. Die Interpretation der Ausgabe zeigt, dass symmetrische Rauschverteilungen (gleich viele hohe und niedrige Ausreißer) symmetrisch gefiltert werden; schiefe Verteilungen (mehr hohe oder mehr niedrige Werte) führen zu einer gerichteten Filterung. Die Nachbarschaftsgröße steuert das Ausmaß der Glättung: ein 3×3-Fenster entfernt 2 Extremwerte aus 9 Pixeln (leichte Filterung); größere Fenster filtern stärker. Die Ausgabewerte bleiben im Eingabebereich (die Ausgabe ist der Mittelwert tatsächlicher Nachbarschaftswerte). Die Statistiken zeigen eine kontrollierte, gezielt auf Ausreißer ausgerichtete Varianzabnahme. Differenzbilder (Original - gefiltert) heben die entfernten Ausreißer hervor; konzentrierte Bereiche hoher Werte weisen auf eine wirksame Isolierung des Rauschens hin. Häufige Artefakte sind eine unzureichende Glättung bei geringer Ausreißerhäufigkeit und verwischte Kanten, wenn Kantenpixel regelmäßig als Extremwerte eingestuft werden. Mehrere Iterationen ermöglichen eine schrittweise Glättung: ein einzelner Durchlauf liefert eine Rauschminderung; wiederholte Durchläufe verstärken die Glättung. Setzen Sie den Filter in schnellen Abläufen zur Rauschminderung ein, die eine einfache, interpretierbare Filterung erfordern; er ist besonders wirksam bei Salz-und-Pfeffer-Rauschen in Mosaiken aus mehreren Sensoren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Nachbarschaftsbreite in Pixeln (ungerade Ganzzahl, Standard 11)."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Nachbarschaftshöhe in Pixeln (ungerade Ganzzahl, Standard 11)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "percentile_filter": {
            "name": "Perzentilfilter",
            "description": "Berechnet den lokalen Perzentilrang des Höhenwerts/Werts der Zentrumszelle innerhalb eines gleitenden Fensters (0-100%). Analog zu Elevation Percentile für allgemeine Rasterdaten. Misst die relative Lage: Ausgabe=0 kennzeichnet ein lokales Minimum, Ausgabe=100 ein lokales Maximum, Ausgabe=50 den Median. Zeigt die lokale Lage innerhalb der Verteilung unabhängig von den absoluten Werten.\n\nDie Perzentilfilterung ermöglicht eine lagebezogene Analyse. Nützlich für Schichtanalysen: Zellen mit hohem Perzentilrang (>80) in allen Bändern kennzeichnen „helle“ Merkmale; ein niedriger Perzentilrang (<20) kennzeichnet „dunkle“ Merkmale. Besonders nützlich für die Vorverarbeitung zur Klassifikation – trennt nach Gelände-/Texturlage statt nur nach Betrag. Wird häufig mit statistischen Filtern für eine Charakterisierung mit mehreren Kennzahlen kombiniert.\n\nAnwendungen: (1) Klassifikation relativer Helligkeit/Dunkelheit, (2) Texturcharakterisierung (hohe Perzentilvarianz = rau, geringe Varianz = glatt), (3) lokale Kontrastverstärkung (perzentilbasierte Normierung), (4) Identifikation von Landformen ähnlich dem Höhenperzentil, (5) mehrbandige Texturanalyse (Perzentil auf jedes Band anwenden, Muster vergleichen).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Fensterbreite in Pixeln (ungerade Ganzzahl, Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Fensterhöhe in Pixeln (ungerade Ganzzahl, Standard = filter_size_x). Alias: filtery."
              },
              "sig_digits": {
                "label": "Signifikante Stellen",
                "description": "Anzahl der signifikanten Stellen für die quantisierte Rangfilterung (Standard 2)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "range_filter": {
            "name": "Spannweitenfilter",
            "description": "Berechnet die Spannweite (Maximum - Minimum) in einem gleitenden Fenster und zeigt die lokale Werteausbreitung unabhängig vom mittleren Niveau. Einfaches Heterogenitätsmaß: hohe Spannweite = vielfältige Werte, geringe Spannweite = gleichförmige Werte. Einfacher als die Standardabweichung, für viele Anwendungen aber ebenso aussagekräftig und robuster gegenüber der Verteilungsform.\n\nDie Spannweite ist recheneffizient (erfordert nur zwei Vergleiche). Besonders nützlich zur Erkennung von Übergängen/Grenzen, an denen Spitzen der Spannweite Kontrastzonen anzeigen. Weniger empfindlich gegenüber der Verteilungsform als die Standardabweichung (die Standardabweichung betont Ausreißer, die Spannweite nutzt nur die Extremwerte). Die normierte Spannweite (Spannweite/Mittelwert) ermöglicht bandübergreifende Vergleiche, so wie der Variationskoeffizient maßstabsübergreifende Vergleiche ermöglicht.\n\nAnwendungen: (1) Textur-/Kontrastkartierung (einfache Interpretation: hohe Spannweite = rau/kontrastreich), (2) Grenzerkennung über Spitzen der Spannweite, (3) recheneffiziente Alternative zur Standardabweichung, (4) Qualitätskontrolle (gleichförmiger Hintergrund mit geringer Spannweite, Merkmalsbereiche mit hoher Spannweite), (5) Rauheit/Variabilität in allgemeinen Daten. Typischer Arbeitsablauf: Spannweite berechnen→Schwellenwert zur Identifikation von Übergangszonen→Grenzen hoher Spannweite vektorisieren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Fensterbreite in Pixeln (ungerade Ganzzahl, Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Fensterhöhe in Pixeln (ungerade Ganzzahl, Standard = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "remove_spurs": {
            "name": "Sporne entfernen",
            "description": "Entfernt kurze Ausläuferartefakte aus binären Rasterobjekten durch iteratives Beschneiden.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "max_iterations": {
                "label": "Maximale Iterationen",
                "description": "Maximale Anzahl der Ausdünnungsiterationen (Standard 10)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "savitzky_golay_2d_filter": {
            "name": "Savitzky-Golay-2D-Filter",
            "description": "Führt eine 2D-Savitzky-Golay-Glättung durch – ein auf Polynomanpassung beruhender Filter, der lokale polynomiale Merkmale bewahrt. Passt ein lokales Polynom an die Nachbarschaft an und ersetzt das Zentrum durch den angepassten Wert. Bewahrt Spitzen/Täler besser als ein Gauß-Filter. Nützlich für verrauschte Daten, bei denen der Merkmalserhalt wichtig ist. Bei Polynomen niedriger Ordnung weniger Verwischung als beim Gauß-Filter; die Glättung nimmt mit der Polynomordnung zu. Die Savitzky-Golay-Filterung passt ein lokales Polynom (typischerweise quadratisch/kubisch) per Kleinste-Quadrate-Verfahren an die Nachbarschaft an. Der Zentrumswert wird durch den Polynomwert ersetzt. Anders als Median-/Gauß-Filter bewahrt sie Merkmale, die als polynomiale Strukturen auftreten (Spitzen, Täler, Rücken). Rechnerisch unkompliziert, aber langsamer als eine einfache Faltung. Die Polynomordnung steuert den Kompromiss zwischen Glättung und Erhalt. Anwendungen: (1) Glättung verrauschter Daten unter Erhalt von Spitzenstrukturen, (2) Verarbeitung von Höhengittern (bewahrt die Topografie von Rücken/Tälern), (3) Glättung spektraler Daten (bewahrt Absorptionsmerkmale), (4) merkmalserhaltende Vorverarbeitung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "window_size": {
                "label": "Fenstergröße",
                "description": "Ungerade Fenstergröße (Standard 5). Derzeit wird 5 für Polynomgrad 2 unterstützt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "scharr_filter": {
            "name": "Scharr-Filter",
            "description": "Der Scharr-Filter ist ein Kantenerkennungsoperator, der den Sobel-Filter verbessert, indem er optimierte Kernelkoeffizienten verwendet, die speziell darauf ausgelegt sind, die Richtungsverzerrung zu verringern und eine bessere Rotationsinvarianz zu bieten. Der Scharr-Operator verwendet 3×3-Faltungskernel mit ganzzahligen Koeffizienten (3, 10, 3), die empirisch für Kantenrichtungen von 0°, 45°, 90° und 135° optimiert sind, und liefert eine genauere Gradientenschätzung als herkömmliche Sobel-Filter, insbesondere bei kreisförmigen Merkmalen und gedrehten Kanten. Der Filter berechnet horizontale Komponente und Gradientenbetrag gleichzeitig und ermöglicht so eine robuste Kantenlokalisierung. Zu den wichtigsten Vorteilen gehören eine höhere Genauigkeit richtungsbezogener Gradienten, eine geringere Rotationsverzerrung als bei Sobel und eine effiziente 3×3-Kernelberechnung mit minimalem Speicheraufwand. Die Ausgabe umfasst sowohl den Betrag als auch optionale Richtungskomponenten. Der Scharr-Filter ist besonders stark in Abläufen der Merkmalsextraktion, Grenzerkennung und Qualitätssicherung, die eine hohe Richtungsgenauigkeit erfordern. Anwendungsfälle sind die Extraktion von Gebäudegrundrissen aus Luftbildern, die Erkennung von Straßennetzen, die Abgrenzung von Gewässergrenzen mit minimaler Verzerrung und die Identifikation geologischer Lineamente in Satellitendaten. Der Filter leistet in der Stadtkartierung, der Erkennung landwirtschaftlicher Grenzen und in Anwendungen der autonomen Navigation hervorragende Dienste. Zur Interpretation der Ausgabe ist zu beachten, dass die Betragswerte die Kantenstärke darstellen – höhere Werte weisen auf schärfere Übergänge zwischen unterschiedlichen Spektralklassen hin. Die Richtungskomponenten zeigen die vorherrschende Kantenausrichtung (horizontal, diagonal oder vertikal), was für die Lineamentanalyse nützlich ist. Wenden Sie den Filter bei Mehrbandrastern auf jedes Band einzeln an oder verwenden Sie einen berechneten Index. Hintergrundwerte erscheinen in der Ausgabe dunkel; starke Kanten erscheinen hell. Ein RMSE-Vergleich mit Referenzkanten validiert die Leistung des Filters. Skalieren Sie die Ausgabe für die Standarddarstellung auf 0-255 oder behalten Sie für quantitative Analysen Gleitkommawerte bei.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "clip_tails": {
                "label": "Ränder beschneiden",
                "description": "Optionaler symmetrischer Beschneidungsprozentsatz der Randbereiche (0-40)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "standard_deviation_filter": {
            "name": "Standardabweichungsfilter",
            "description": "Berechnet die Standardabweichung in einem gleitenden Fenster und misst so die lokale Wertvariation/Streuung. Hohe Standardabweichung = vielfältige Werte (rau/heterogen), geringe Standardabweichung = gleichförmige Werte (glatt/homogen). Zeigt Muster von Textur, Rauheit und Variabilität. Entscheidend für die Quantifizierung von Unsicherheit und die Qualitätsbewertung.\n\nDie Standardabweichung ist zur Charakterisierung lokaler Variation robuster als die Spannweite (nicht durch einzelne Ausreißer verzerrt). Ermöglicht die Klassifikation von Bereichen nach Textur: steile Hänge (hohe Standardabweichung), flache Hänge (geringe Standardabweichung); Wälder (hohe Standardabweichung), Grünland (geringe Standardabweichung). Wird häufig normiert (Variationskoeffizient = Standardabweichung/Mittelwert), um Vergleiche zwischen Daten mit unterschiedlichen Wertebereichen zu ermöglichen. Kann aus dem Histogramm berechnet werden (Varianz = Mittelwert der Quadrate - Quadrat des Mittelwerts).\n\nAnwendungen: (1) Texturkartierung (Analyse von Rauheit/Heterogenität), (2) Quantifizierung der Unsicherheit in verrauschten Daten, (3) Qualitätsbewertung (gleichförmiger Hintergrund = geringe Standardabweichung, merkmalsreiche Bereiche = hohe), (4) Klassifikationskonfidenz (hohe Standardabweichung = gemischte/unsichere Klassen), (5) mehrbandige Heterogenität (Standardabweichungen jedes Bands stapeln). Typischer Arbeitsablauf: Standardabweichung in mehreren Maßstäben berechnen→Musteränderungen über die Maßstäbe vergleichen→charakteristische Maßstäbe identifizieren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Fensterbreite in Pixeln (ungerade Ganzzahl, Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Fensterhöhe in Pixeln (ungerade Ganzzahl, Standard = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "thicken_raster_line": {
            "name": "Rasterlinien verdicken",
            "description": "Verdickt diagonale Rasterliniensegmente, um ein diagonales Durchsickern zu verhindern.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "tophat_transform": {
            "name": "Top-Hat-Transformation",
            "description": "Führt eine weiße oder schwarze morphologische Top-Hat-Transformation durch.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Ungerade Nachbarschaftsbreite (Standard 11)."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Ungerade Nachbarschaftshöhe (Standard wie filter_size_x)."
              },
              "variant": {
                "label": "Variante",
                "description": "Top-Hat-Variante: white (Standard) oder black."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "total_filter": {
            "name": "Summenfilter",
            "description": "Berechnet die Summe (Gesamtwert) der Pixelwerte in der Nachbarschaft eines gleitenden Fensters. Integriert die lokale Signalstärke. Die Anwendungen hängen von der Bedeutung der Daten ab: bei Zählungen/Dichten zeigt die Summe lokale Dichtemuster; bei Niederschlag zeigt sie die Akkumulation im Einzugsgebietsmaßstab; bei Reflexion ist die Summe proportional zur lokalen Zielgröße.\n\nDie Summenfilterung wird je nach Fachgebiet unterschiedlich interpretiert. Bei Zähl-/Bevölkerungsdaten zeigt die Summe Clusterbildung und Hotspots. Bei Höhendaten wird die Summe selten verwendet (sie hat keine geomorphologische Bedeutung). In der Spektralanalyse kann die Summe die Signalstärke über mehrere Bänder zeigen. Wird häufig als Zwischenschritt verwendet (z. B. Division durch die Zellenanzahl der Nachbarschaft zur Berechnung des Mittelwerts oder Vergleich mit benachbarten Summen zur Erkennung lokaler Heterogenität).\n\nAnwendungen: (1) Hotspot-Erkennung in Zähldaten (hohe Summe = Cluster), (2) Akkumulationsmodelle für Becken/Einzugsgebiete, (3) Integration verteilter Messungen, (4) Zwischenberechnung (Summe/N = Mittelwert), (5) Aggregation der Signalstärke in Mosaiken aus mehreren Sensoren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Fensterbreite in Pixeln (ungerade Ganzzahl, Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Fensterhöhe in Pixeln (ungerade Ganzzahl, Standard = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "unsharp_masking": {
            "name": "Unscharfmaskierung",
            "description": "Unscharfmaskierung schärft Bilder, indem eine geglättete (Tiefpass-)Version vom Originalbild subtrahiert wird, wodurch Kanten und feine Details verstärkt werden. Die mathematische Transformation lautet I_sharp = I_original + w·(I_original - I_smooth), wobei w die Schärfungsgewichtung ist, die die Stärke der Verstärkung steuert. Das Verfahren isoliert hochfrequente Komponenten und verstärkt sie, wodurch Details wirksam von großräumigen Tonwertvariationen getrennt werden. Zu den Hauptmerkmalen gehören eine flexible Parametersteuerung (Weichzeichnungsradius und Gewichtung zur Detailsteuerung), Recheneffizienz durch Wiederverwendung der Gauß-Glättung, eine interpretierbare Verstärkung (Gewichtung=0 ergibt das Original; Gewichtung=1 einen echten Hochpass; Gewichtung>1 eine starke Schärfung) sowie die Wirksamkeit bei multispektralen Daten. Die Unscharfmaskierung ist besonders stark bei der Aufbereitung von Satellitenbildern für die manuelle Interpretation (verstärkt subtiles Gelände, Vegetation, Infrastruktur), bei der Verbesserung LiDAR-abgeleiteter Produkte (schärft DEMs, Vegetationskennzahlen), bei der Qualitätsverbesserung von Orthofotos zur besseren Sichtbarkeit von Objekten und bei der Verbesserung archäologischer Bilder und Vermessungsbilder. Zur Interpretation der Ausgabe ist zu beachten, dass sich geschärfte Werte auf Kanten konzentrieren; homogene Bereiche bleiben unverändert. Der Gewichtungsparameter steuert das Ausmaß der Verstärkung: w=0.5-1.0 bietet eine dezente Verstärkung; w=1.0-2.0 eine mäßige Schärfung; w>2.0 erzeugt starke, möglicherweise artefaktbehaftete Ergebnisse. Der Weichzeichnungsradius steuert den Merkmalsmaßstab: ein kleinerer Radius (3-5 Pixel) verstärkt feine Texturen; ein größerer Radius (10-20 Pixel) verstärkt mittlere Merkmale. Die Ausgabewerte können den Eingabebereich überschreiten; ein Abschneiden ist in der Regel erforderlich. Zu den Artefakten gehören Halos um starke Kanten (je größer Gewichtung oder Radius, desto ausgeprägter), verstärktes Rauschen bei verrauschter Quelle und mögliche Falschfarben beim multispektralen Schärfen. Überprüfen Sie die Verstärkung anhand von Differenzbildern. Setzen Sie das Verfahren gezielt in Visualisierungsabläufen ein; vermeiden Sie es vor automatisierten Analysen, die auf Änderungen des Ausgabebereichs empfindlich reagieren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Gauß-Sigma der Unschärfemaske (0.5-20.0, Standard 0.75)."
              },
              "amount": {
                "label": "Betrag",
                "description": "Multiplikator der Schärfungsstärke, der auf das Residuum angewendet wird (Standard 100.0)."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Minimales absolutes Residuum für die Schärfung (Standard 0.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "user_defined_weights_filter": {
            "name": "Filter mit benutzerdefinierten Gewichten",
            "description": "Der Filter mit benutzerdefinierten Gewichten bietet maximale Flexibilität für eigene Faltungsanalysen, indem er beliebige gewichtete Koeffizienten für die Nachbarschaftspixel akzeptiert, was die Umsetzung spezialisierter Operatoren, fachspezifischer Kernel und forschungstauglicher Algorithmen ermöglicht, ohne dass Werkzeuganpassungen oder Spezialsoftware erforderlich sind. Benutzer legen die Kernelabmessungen fest (typischerweise 3×3 oder 5×5), weisen jeder Position Gleitkommagewichte zu und bestimmen optional die Randbehandlung (Spiegelung, Umbruch, konstante Füllung). Dieser Filter wendet den eigenen Kernel mit der üblichen Faltungsmathematik auf das gesamte Raster an: jedes Ausgabepixel entspricht der Summe der gewichteten Nachbarn, was sowohl herkömmliche Bildverarbeitungsfilter als auch eigene analytische Kernel ermöglicht. Zu den Hauptmerkmalen gehören eine vollständige Anpassbarkeit für Forschungsanwendungen, die Unterstützung von Verbesserungs- und Analyseoperationen, die Kompatibilität mit normierten und nicht normierten Kerneln sowie der Erhalt der Gleitkommagenauigkeit während der gesamten Berechnung. Die Anwendungsfälle reichen von fortgeschrittener räumlicher Filterung für spezialisierte spektrale Indizes über die Umsetzung experimenteller Operatoren zur Algorithmusvalidierung, eigene Kernel für die Texturanalyse und gewichtete Nachbarschaftsaggregationen für multikriterielle Analysen bis zur standardisierten Anwendung von Kerneln auf unterschiedliche Datensätze. Anwendungen sind das Prototyping in der akademischen Forschung, die Evaluierung von Algorithmen in der Industrie, die regionale Anpassung von Verarbeitungspipelines und vergleichende Leistungsstudien. Die Interpretation der Ausgabe hängt vollständig von den benutzerdefinierten Koeffizienten ab; verschiedene Kernel liefern grundlegend verschiedene Ergebnisse. Normierte Kernel (Summe der Gewichte gleich 1.0) bewahren die Wertebereiche und eignen sich zur Glättung; nicht normierte Kernel (typischerweise mit Summe null) betonen Unterschiede und eignen sich zur Kanten-/Ableitungserkennung. Benutzer müssen die Kerneleigenschaften – Vorzeichen, Betrag und Summe der Koeffizienten – vor dem produktiven Einsatz validieren. Die Dokumentation der Kernelspezifikationen ist für reproduzierbare Arbeitsabläufe unerlässlich. Die Wertebereiche der Ausgabe hängen vom Kernelentwurf ab; die Dokumentation sollte die erwarteten Ausgabeeigenschaften und Skalierungsanforderungen angeben.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "weights": {
                "label": "Gewichte",
                "description": "2D-Kernelgewichte als verschachtelte Arrays."
              },
              "kernel_center": {
                "label": "Kernelzentrum",
                "description": "Modus des Kernelzentrums: center, upper-left, upper-right, lower-left, lower-right."
              },
              "normalize_weights": {
                "label": "Gewichte normalisieren",
                "description": "Wenn wahr, wird durch die lokale Summe der aktiven Gewichte normalisiert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "wiener_filter": {
            "name": "Wiener-Filter",
            "description": "Der Wiener-Filter führt eine adaptive Rauschminderung durch, indem er den mittleren quadratischen Fehler zwischen gefilterter Ausgabe und wahrem Signal minimiert, wobei die statistischen Eigenschaften von Signal und Rauschen als bekannt vorausgesetzt werden. Die Implementierung schätzt lokale Signal- und Rauschvarianzen innerhalb gleitender Fenster und berechnet Filterkoeffizienten, die Rauschunterdrückung und Detailerhalt abwägen: F = μ + (σ² - σₙ²)/σ² · (I - μ), wobei μ der lokale Mittelwert, σ² die Signalvarianz und σₙ² die Rauschvarianz ist. Diese datengetriebene Anpassung sorgt dafür, dass die Filterstärke auf lokale Bildeigenschaften reagiert. Zu den Hauptmerkmalen gehören eine automatische Anpassung an lokale Statistiken (flache Bereiche werden stark geglättet; detailreiche Bereiche behalten ihre Struktur), eine erwiesene Wirksamkeit bei optischen und SAR-Bildern, interpretierbare Parameter auf Basis der Annahmen des Rauschmodells sowie rechnerische Machbarkeit durch separierbare Näherungen. Die Wiener-Filterung ist besonders stark bei der Vorverarbeitung von Satellitenbildern mit räumlich variierendem Rauschen, bei der Speckle-Reduktion in SAR-Daten unter Erhalt von Punktzielen, bei entfleckten multispektralen Daten für die Vegetationskartierung und beim Entrauschen in der Radar-Optik-Fusion. Die Interpretation der Ausgabe zeigt, dass Bereiche hoher Varianz (detailreich) minimal gefiltert werden, Bereiche geringer Varianz (verrauscht) dagegen stark. Die Schätzung der Rauschvarianz beeinflusst die Ausgabe: eine unterschätzte Rauschvarianz führt zu Unterglättung; eine überschätzte Varianz zu Überglättung und Detailverlust. Die Ausgabebereiche nähern sich den Eingabebereichen an; prüfen Sie Differenzbilder (Original - gefiltert), um die Rauschminderung zu überprüfen. Peak Signal-to-Noise Ratio (PSNR) und Structural Similarity Index (SSIM) quantifizieren die Wirksamkeit der Filterung. Lokale Varianzschwellen zeigen die Auswirkung der Verarbeitung: Bereiche mit einem ermittelten Varianzverhältnis > 5 werden erheblich gefiltert; Verhältnisse < 1 werden minimal gefiltert. Häufige Fallstricke sind eine ungenaue Schätzung der Rauschvarianz (für die Schätzung eine Dunkelbild- oder Homogenbereichsanalyse durchführen) und eine Wahl der Fenstergröße, die die Lokalisierung beeinflusst. Wenden Sie den Filter vor der Klassifikation oder Merkmalsextraktion an, um rauschbedingte Fehlklassifikationen zu verringern.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "radius": {
                "label": "Radius",
                "description": "Lokaler Fensterradius des Wiener-Filters in Pixeln (Standard 2)."
              },
              "noise_variance": {
                "label": "Rauschvarianz",
                "description": "Optionale Varianz des additiven Rauschens. Wenn nicht angegeben, wird sie aus der lokalen Varianzkarte geschätzt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "cloude_pottier_decomposition": {
            "name": "Cloude-Pottier-Zerlegung",
            "description": "Die Cloude-Pottier-Zerlegung diagonalisiert die Kohärenzmatrix aus quadpolarimetrischen SAR-Daten und extrahiert Eigenwerte und Eigenvektoren, die die Streumechanismen charakterisieren. Aus den Eigenvektoren berechnete Entropie, Anisotropie und mittlerer Alpha-Winkel charakterisieren die Unordnung der Streuung, die Dominanz des Mechanismus bzw. den Streutyp. Der H-Alpha-Parameterraum ermöglicht eine physikalische Klassifikation der Streumechanismen unabhängig von Amplitudenschwankungen und nutzt die polarimetrische Phaseninformation. Hauptmerkmale: Zerlegung quadpolarimetrischer SAR-Daten; Nutzung der Phaseninformation; physikalisch aussagekräftige Streuparameter; trennt Streumechanismen; robust gegenüber Amplituden-Speckle; ermöglicht Zielklassifikation und -interpretation. Anwendungsfälle: SAR-Zielerkennung; Schätzung der Waldbiomasse; Charakterisierung von Feuchtgebieten; Schiffs-/Fahrzeugerkennung; Landbedeckungsklassifikation; Interpretation polarimetrischer SAR-Daten. Interpretation der Ausgabe: Die Ausgabe umfasst die Entropie (Grad der Unordnung; 0=geordnete Streuung, 1=zufällig), die Anisotropie (Dominanz des Mechanismus 0-1) und den Alpha-Winkel (Streutyp: ~45°=Dipol, ~30°=Oberfläche, ~60°=Volumen). H-Alpha-Streudiagramme zeigen Clustermuster, die auf Streutypen hinweisen. Doppelreflexion (Siedlung) weist ein hohes Alpha auf; Oberflächenstreuung (Wasser) ein niedriges Alpha; Volumenstreuung (Wald) mittlere Werte.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Matrixraster: diag3 [m11,m22,m33], kompaktes full3x3 [m11,m22,m33,m12,m13,m23] oder vollständige 9 Raster in Zeilenreihenfolge."
              },
              "matrix_format": {
                "label": "Matrixformat",
                "description": "Format der Eingabematrix: diag3 (Standard bei 3 Rastern) oder full3x3."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionales 3-Band-Ausgaberaster [H, A, alpha_deg]."
              }
            }
          },
          "enhanced_lee_filter": {
            "name": "Verbesserter Lee-Filter",
            "description": "Der Enhanced-Lee-Filter kombiniert Lees multiplikatives Modell mit einer verfeinerten Varianzschätzung und mehrskaliger Verarbeitung und erreicht so eine überlegene Speckle-Reduktion unter Erhalt feiner Details und Kanten in SAR-Bildern. Die Implementierung verwendet lokale Statistiken, die über Fenster adaptiver Größe berechnet werden, bezieht eine Laplace-basierte Kantenerkennung ein und wendet räumlich variierende Filterparameter an. Die erweiterte Formulierung lautet: F = μ + w·(I - μ), wobei sich w an die Kantennähe anpasst: w→0 nahe Kanten (minimale Filterung), w→1 in homogenen Bereichen (starke Filterung). Zu den Hauptmerkmalen gehören eine kantenadaptive Verarbeitung (Erhalt von Grenzen), eine mehrskalige Parameteranpassung, ein besserer Erhalt von Zielen als beim Standard-Lee-Filter und die Wirksamkeit bei stark verrauschten SAR-Daten. Die Enhanced-Lee-Filterung ist besonders stark in komplexen SAR-Szenen mit zahlreichen Merkmalen, in Anwendungen der Hochwasserkartierung, bei denen die Kantenlokalisierung entscheidend ist, bei der Gebäudeerkennung aus städtischen SAR-Daten und bei multitemporalen Veränderungsanalysen. Die Interpretation der Ausgabe zeigt den Kantenerhalt durch verringerte Filterung nahe Übergängen: Grenzpixel behalten eine größere Varianz als entfernte Pixel. Die mehrskalige Anpassung wird in der Histogrammanalyse sichtbar, die ausgeprägte Spitzen entsprechend den Szenenklassen zeigt. Die Ausgabebereiche entsprechen der Eingabe; der Vergleich mit dem Standard-Lee-Filter zeigt weniger verwischte Kanten und erhaltene Zielschärfe. Die Qualität der Kantenerkennung beeinflusst die Ausgabe direkt: starke Kanten ermöglichen einen guten Grenzerhalt; schwache Kanten können zu Überglättung führen. Die Statistiken zeigen eine kontrollierte Varianzabnahme, die Rauschunterdrückung und Detailerhalt ausbalanciert. Häufige Artefakte sind ein mögliches blockartiges Erscheinungsbild, wenn mehrskalige Übergänge sichtbar werden, und ein übermäßiger Erhalt, wenn die Kantenerkennung zu aggressiv ist. Überwachen Sie die Qualität der Kantenkarte, um das Filterverhalten zu validieren. Setzen Sie den Filter in umfassenden SAR-Analysepipelines ein, in denen mehrere Merkmale erhalten und Kanten scharf bleiben müssen; dies ist besonders wichtig für die Vorverarbeitung im maschinellen Lernen, die Trainingsdaten mit klaren Merkmalsgrenzen erfordert.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Nachbarschaftsbreite in Pixeln (ungerade Ganzzahl, Standard 11)."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Nachbarschaftshöhe in Pixeln (ungerade Ganzzahl, Standard 11)."
              },
              "enl": {
                "label": "ENL",
                "description": "Parameter der äquivalenten Anzahl von Looks für die Sigma-Verhältnis-Gewichtung (Standard 4.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "freeman_durden_decomposition": {
            "name": "Freeman-Durden-Zerlegung",
            "description": "Die Freeman-Durden-Zerlegung quantifiziert die Beiträge der Streumechanismen aus quadpolarimetrischen SAR-Daten durch Zerlegung in eine orthogonale Basis aus Oberflächenreflexion, Doppelreflexion (Siedlung/Dieder) und Volumenstreuung (Vegetation/zufällige Medien). Eine nichtnegative Kleinste-Quadrate-Optimierung beschränkt die Leistungsanteile und stellt so physikalische Realisierbarkeit und Interpretierbarkeit sicher. Die ausgegebenen Leistungskarten sind direkt mit Geländeeigenschaften verknüpft: eine hohe Oberflächendominanz weist auf offenen Boden/Wasser hin, eine hohe Doppelreflexion auf städtische Strukturen, eine hohe Volumenstreuung auf Wald/Vegetation. Hauptmerkmale: physikalisch interpretierbare Streukomponenten; geländespezifische Signaturen; beschränkte Optimierung; unterstützt quadpolarimetrische SAR-Daten; robust gegenüber Speckle; ermöglicht zielspezifische Klassifikation. Anwendungsfälle: Klassifikation Stadt-Land; Schätzung der Waldbiomasse; Erkennung der Bodenfeuchte; Hochwassererkennung; Überwachung der Pflanzenphänologie; Landbedeckungskartierung. Interpretation der Ausgabe: Die Oberflächenleistung weist auf spiegelnde Reflexion von trockenem Gelände/Wasser hin; die Doppelreflexionsleistung auf menschengemachte Strukturen/Siedlungsgebiete; die Volumenleistung auf Vegetation/Wald. Kombinationen der Komponenten ermöglichen die Unterscheidung von Landbedeckungen: hohes Volumen + geringe Doppelreflexion weist auf Wald hin; hohe Doppelreflexion + geringes Volumen auf Siedlung; ausgewogene Oberfläche/Volumen auf gemischtes Gelände.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Matrixraster: diag3 [m11,m22,m33], kompaktes full3x3 [m11,m22,m33,m12,m13,m23] oder vollständige 9 Raster in Zeilenreihenfolge."
              },
              "matrix_format": {
                "label": "Matrixformat",
                "description": "Format der Eingabematrix: diag3 (Standard bei 3 Rastern) oder full3x3."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionales 3-Band-Ausgaberaster [surface, double_bounce, volume]."
              },
              "output_clip_mask": {
                "label": "Beschneidungsmaske ausgeben",
                "description": "Optionales Ausgaberaster der Clipping-Maske (1, wo nicht-physikalisches Clipping/Renormalisierung auftrat)."
              }
            }
          },
          "frost_filter": {
            "name": "Frost-Filter",
            "description": "Der Frost-Filter realisiert eine Speckle-Reduktion für SAR-Daten mithilfe eines multiplikativen Rauschmodells und adaptiver lokaler Statistiken; er ist speziell für Radarbilder konzipiert, bei denen Speckle einer Gamma-Verteilung statt gaußschem Rauschen folgt. Die Implementierung berechnet lokalen Mittelwert und lokale Varianz und wendet dann eine adaptive multiplikative Gewichtung an: F = I · exp(-variance/(2·mean²)·distance²), wobei distance die Abweichung des Pixels vom lokalen Mittelwert misst. Diese Formulierung verringert die Speckle-Intensität umgekehrt proportional zur geschätzten Kohärenz. Zu den Hauptmerkmalen gehören eine SAR-spezifische Anpassung (multiplikatives statt additives Rauschmodell), der Erhalt von Punktzielen und Kanten (kohärente Merkmale), eine von der lokalen Varianz gesteuerte Anpassung der Filterstärke sowie eine erwiesene Wirksamkeit bei SAR-Daten mit Einfach- und Mehrfachpolarisation. Die Frost-Filterung ist besonders stark bei der Vorverarbeitung von SAR-Bildern für die Klassifikation (landwirtschaftliches Monitoring, Landnutzungskartierung), bei der kohärenzgewichteten SAR-Optik-Fusion, bei der Hochwasserkartierung aus Radardaten bei Wolkenbedeckung und in Abläufen der Veränderungserkennung mit Radar mit synthetischer Apertur. Die Interpretation der Ausgabe zeigt, dass Bereiche hoher Varianz (potenziell kohärente Ziele) minimal gefiltert werden, speckledominierte Bereiche geringer Varianz dagegen stark. Die typischen Ausgabebereiche entsprechen der Eingabe; für die Darstellung wird vor oder nach der Filterung häufig eine logarithmische Skalierung (Dezibel) angewendet. Das Verhältnis von Varianz zu Mittelwert steuert die Filterstärke direkt: ein Verhältnis > 0.5 weist auf wahrscheinliches Speckle hin; ein Verhältnis < 0.1 deutet auf kohärente Ziele hin. Zu den Ausgabeartefakten gehören ein möglicher Detailverlust bei unzuverlässiger Varianzschätzung und eine Richtungsverzerrung bei orientierten Merkmalen. Eine Überprüfung anhand von Kohärenzkarten bestätigt den Kantenerhalt in Zonen hoher Kohärenz. Überwachen Sie die Ausgabestatistiken: der Mittelwert sollte sich über die Filteriterationen stabilisieren; die Varianz sollte deutlich abnehmen. Wenden Sie den Filter vor der Klassifikation an, um die kategoriale Genauigkeit zu verbessern. Kombinieren Sie ihn mit einer morphologischen Nachbearbeitung, um Objektgrenzen zu verfeinern und verbleibende Speckle-Flecken zu entfernen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "radius": {
                "label": "Radius",
                "description": "Lokaler Fensterradius in Pixeln (Standard 2)."
              },
              "damping_factor": {
                "label": "Dämpfungsfaktor",
                "description": "Frost-Dämpfungsfaktor, der den exponentiellen Abfall steuert (Standard 2.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "gamma_map_filter": {
            "name": "Gamma-MAP-Filter",
            "description": "Der Gamma-Map-Filter führt eine Speckle-Reduktion für SAR-Daten mithilfe eines statistischen Modells der Gamma-Verteilung durch und berücksichtigt die multiplikativen Speckle-Eigenschaften des Radarsignals explizit durch parametrische Anpassung. Die Implementierung schätzt lokale Parameter der Gamma-Verteilung (Form α und Skala β) aus Bildstatistiken und filtert dann über eine Gewichtungsfunktion, die die Verteilung berücksichtigt: F = I · [1 - (1-L/N)/(1 + L/N)·√(1 + N/L²)], wobei L die äquivalente Anzahl der Looks (Kohärenzmaß) und N der geschätzte Parameter ist. Zu den Hauptmerkmalen gehören eine theoretisch fundierte SAR-Statistik (die Gamma-Verteilung ist Standard für Radar), eine automatische Schätzung der Look-Anzahl mit minimalen Benutzereingaben, ein besserer Kantenerhalt als bei gleichförmigen Filtern sowie die Anwendbarkeit auf Single- und Multi-Look-SAR. Die Gamma-Map-Filterung ist besonders stark beim Entrauschen multitemporaler SAR-Stapel für die Veränderungserkennung in Zeitreihen, bei der Verbesserung der Phasenkohärenz in interferometrischem SAR (InSAR), bei der Vorverarbeitung für polarimetrische SAR-Zerlegungen und bei der Normierung der SAR-Rückstreuung in der Forstwirtschaft. Die Interpretation der Ausgabe zeigt, dass sich die Filterstärke an die Kohärenz der Szene anpasst: Bereiche hoher Kohärenz (großes α) werden sanft gefiltert und Ziele bleiben erhalten; Bereiche geringer Kohärenz (kleines α) werden stark gefiltert und Speckle wird unterdrückt. Die äquivalente Look-Anzahl L zeigt die Wirksamkeit der Filterung an: L=1 (minimale Filterung) bewahrt alle Details; L>5 erzeugt eine deutliche Glättung. Die Ausgabeskalierung bleibt in den Eingabeeinheiten; eine logarithmische Umrechnung erleichtert die Darstellung. Die typische Varianzabnahme der Ausgabe liegt je nach Szenencharakter und gewählter Look-Anzahl bei 50-80%. Überwachen Sie die Ausgabehistogramme auf eine verbleibende Speckle-Signatur; bimodale Verteilungen deuten auf eine gute Trennung der Szenenkomponenten hin. Zu den Artefakten gehören mögliche Streifen bei orientierten Merkmalen oder eine leichte Texturverschlechterung, wenn L überschätzt wird. Validieren Sie die Filterung anhand von Ground Truth in Trainingsgebieten. Setzen Sie den Filter gezielt in der polarimetrischen SAR-Klassifikation oder der InSAR-Phasenfilterung ein, die eine kohärenzgewichtete Verbesserung erfordern.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "radius": {
                "label": "Radius",
                "description": "Lokaler Fensterradius in Pixeln (Standard 2)."
              },
              "enl": {
                "label": "ENL",
                "description": "Äquivalente Anzahl von Looks (Standard 1.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "h_alpha_wisart_classification": {
            "name": "H-Alpha-Wisart-Klassifikation",
            "description": "Die H/α/A-Wisart-Klassifikation kombiniert eine unüberwachte Zonierung durch Unterteilung des H/α/A-Parameterraums mit statistischem Wishart-Clustering, um polarimetrische SAR-Daten automatisch in 9 physikalisch aussagekräftige Zonen zu klassifizieren, die Klassen von Streumechanismen entsprechen. Der Algorithmus übernimmt die Parameter Entropie (H), Anisotropie (A) und Alpha (α) aus der Cloude-Pottier-Zerlegung und unterteilt den 3D-Merkmalsraum (H,A,α) mit festen Schwellenwerten in 9 Bereiche: Zone 1 (niedriges H, α~20°) steht für Bragg-Reflexion an trockenen Oberflächen; Zone 5 (H~0.7, α~45°) weist auf isotrope Volumenstreuung in Wäldern hin; Zone 9 (hohes H, α~80°) steht für Dieder-Streuung (Doppelreflexion) an städtischen Strukturen. Innerhalb jeder Zone verfeinert ein Wishart-Clustering optional die Klassifikation, indem statistische Distanzen im multivariaten polarimetrischen Raum berechnet werden, was die Unterscheidung ähnlicher Mechanismen verbessert. Zu den Hauptmerkmalen gehören eine automatische, unüberwachte Klassifikation ohne Trainingsstichproben; 9 physikalisch interpretierbare Klassen mit standardisierten Definitionen, die eine globale Vergleichbarkeit ermöglichen; ein optionaler Zweimodusbetrieb (nur Schwellenwerte für Geschwindigkeit, Schwellenwerte+Wishart für Genauigkeit); sowie integrierte Konfidenzkennzahlen auf Basis der Distanz zu den Zonengrenzen und der Wishart-Likelihood. Das Werkzeug akzeptiert vorberechnete (H,A,α)-Bilder oder ruft automatisch die Cloude-Pottier-Zerlegung auf, wenn Rohmatrizen bereitgestellt werden. Die Hauptanwendungsfälle umfassen die Segmentierung von SAR-Bildern und die Kartenerstellung aus polarimetrischen Daten, die unüberwachte Klassifikation von Landbedeckungstypen (Wasser, Landwirtschaft, Wald, Siedlung) direkt aus SAR-Kohärenzmatrizen, die schnelle Bewertung der Qualität polarimetrischer Daten über die Belegungsverteilung der Zonen sowie die Veränderungserkennung, die Übergänge der Streumechanismen als Hinweis auf veränderte Landbedeckung aufdeckt. Interpretation der Ausgabe: Die 9-Klassen-Karte entspricht direkt Geländetypen; die Zonen lassen sich zu breiteren Kategorien zusammenfassen (Wasser/spiegelnd = Zonen 1-2, Vegetation/Volumen = Zonen 4-6, Siedlung/Dieder = Zonen 7-9). Nicht klassifizierte Pixel (Klasse 0) weisen auf ungewöhnliche polarimetrische Signaturen hin, die untersucht werden sollten.",
            "params": {
              "h_raster": {
                "label": "H-Raster",
                "description": "Eingaberaster der Entropie (H) aus der Cloude-Pottier-Zerlegung (Bereich 0-1)."
              },
              "alpha_raster": {
                "label": "Alpha-Raster",
                "description": "Eingaberaster des Alpha-Winkels (α) aus der Cloude-Pottier-Zerlegung (Grad, 0-90)."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), wird Alpha bei abweichendem KBS passend zu H umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings bei der Umprojektion: nearest, bilinear, cubic, lanczos."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionales Ausgaberaster mit 9-Klassen-Labels (1-9)."
              }
            }
          },
          "kuan_filter": {
            "name": "Kuan-Filter",
            "description": "Führt eine Kuan-Speckle-Filterung für SAR-/Radarbilder mit einem parametrischen Ansatz durch, der lokale Mittelwerte und Varianzen schätzt. Adaptive Gewichtung auf Basis der Rauschvarianz und der lokalen Bildvarianz. Ähnlich wie Lee, jedoch mit anderen statistischen Annahmen. Weit verbreitetes Verfahren der operationellen SAR-Verarbeitung. Ausgewogenes Verhältnis von Recheneffizienz und guten Ergebnissen bei unterschiedlichen SAR-Daten. Die Kuan-Filterung setzt eine gaußsche Statistik mit multiplikativem Speckle-Modell voraus. Passt sich an die lokale Varianz an – unterscheidet zwischen Signalvariation und Speckle. Besonders wirksam bei heterogenen SAR-Bildern (gemischte helle und dunkle Merkmale). Vertretbarer Rechenaufwand. Stellt einen praktischen Kompromiss zwischen Ausgefeiltheit und Rechenaufwand dar. Standard in vielen SAR-Verarbeitungssystemen. Anwendungen: (1) operationelles Entflecken von SAR-Daten, (2) Vorverarbeitung von SAR-Daten mit gemischter Rückstreuung, (3) RadarSat-/Sentinel-1-Vorverarbeitung, (4) routinemäßige SAR-Verarbeitung. Typische Parameter: filter_size=5×7 bis 7×7.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "radius": {
                "label": "Radius",
                "description": "Lokaler Fensterradius in Pixeln (Standard 2)."
              },
              "enl": {
                "label": "ENL",
                "description": "Äquivalente Anzahl von Looks (Standard 1.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "refined_lee_filter": {
            "name": "Verfeinerter Lee-Filter",
            "description": "Der Refined-Lee-Filter verbessert die Standard-Lee-Filterung durch eine verbesserte Kohärenzschätzung und kantenerhaltende Anpassungen und nutzt verfeinerte lokale Statistiken sowie eine Richtungsanalyse für eine überlegene Speckle-Reduktion. Die Implementierung erweitert Lees Modell, indem sie die Kantenausrichtung erkennt, an Grenzen ausgerichtete Richtungsfenster anwendet und verfeinerte Kohärenzschätzungen berechnet. Mathematisch: F = μ + √(σ_p²/(σ_I²))·(I - μ) mit richtungsausgerichteter Varianzberechnung. Diese Verfeinerung verbessert den Kantenerhalt bei gleichbleibender Speckle-Unterdrückung. Zu den Hauptmerkmalen gehören Richtungsempfindlichkeit (passt die Filterrichtung an Bildstrukturen an), eine verbesserte Kohärenzschätzung (verwendet anisotrope Fenster), ein besserer Kantenerhalt als beim Standard-Lee-Filter und die Wirksamkeit bei komplexen SAR-Szenen. Die Refined-Lee-Filterung ist besonders stark bei der Veränderungserkennung, die scharfe Grenzen erfordert, bei der Aufbereitung von InSAR-Kohärenzkarten, bei der polarimetrischen SAR-Verarbeitung, bei der der Erhalt von Zielen entscheidend ist, und bei forstlichen SAR-Analysen zur Unterscheidung von Bäumen und Hintergrund. Die Interpretation der Ausgabe zeigt, dass die Filterung die Kantenausrichtung berücksichtigt: horizontale Kanten werden horizontal gefiltert, vertikale Kanten vertikal und diagonale Kanten diagonal. Diese Richtungsanpassung minimiert die Filterung über echte Grenzen hinweg. Die Kohärenzschätzungen sind typischerweise genauer als beim Standard-Lee-Filter, was Filterartefakte verringert. Die Ausgabebereiche entsprechen der Eingabe; die Richtungsanpassung wird bei visueller Prüfung sichtbar (Kanten bleiben schärfer als beim Standard-Lee-Filter). Die Statistiken zeigen einen stärkeren Erhalt kontrastreicher Bereiche. Die Richtungskomponenten zeigen die Ausrichtung der Szenenstruktur; eine starke Richtungsverzerrung weist auf eine vorherrschende Merkmalsausrichtung hin. Häufige Artefakte nehmen gegenüber dem Standard-Lee-Filter ab, insbesondere nahe Kanten und komplexen Merkmalen. Zu den Artefakten gehören eine mögliche Überanpassung, wenn die Richtungsschätzung fehlschlägt, und Artefakte der Richtungsfenster an schwachen Grenzen. Überwachen Sie Kohärenzkarten, um die Genauigkeit der Kantenerkennung zu validieren. Setzen Sie den Filter gezielt in der SAR-Klassifikation ein, wenn gerichtete Strukturen (z. B. Wälder, ausgerichtete landwirtschaftliche Felder) erhalten bleiben müssen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Nachbarschaftsbreite in Pixeln (ungerade Ganzzahl, Standard 11)."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Nachbarschaftshöhe in Pixeln (ungerade Ganzzahl, Standard 11)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "wisart_iterative_clustering": {
            "name": "Iteratives Wisart-Clustering",
            "description": "Das iterative Wishart-Clustering führt eine unüberwachte Klassifikation polarimetrischer SAR-Daten durch, indem die Clusterzentren iterativ mit dem komplexen statistischen Wishart-Distanzmaß verfeinert werden, das die Ähnlichkeit multivariater polarimetrischer Wahrscheinlichkeitsverteilungen misst. Der Algorithmus wird aus den Zonen der H/α-Zerlegung initialisiert (die 9 Saatcluster mit bekannter physikalischer Interpretation liefern) und durchläuft dann eine Schleife ähnlich der Expectation-Maximization: (1) Berechnung der Wishart-Distanz von der geschätzten Kohärenzmatrix jedes Pixels zu jedem Clusterprototyp; (2) Neuzuweisung der Pixel zum nächstgelegenen Cluster; (3) Aktualisierung der Clusterprototypen durch Mittelung der Matrizen der zugewiesenen Pixel; (4) Wiederholung bis zur Konvergenz (Rate der Pixelneuzuweisung <convergence_threshold) oder bis max_iterations erreicht ist. Zu den Hauptmerkmalen gehören ein komplexwertiger statistischer Rahmen, der die Struktur polarimetrischer Daten anders als die euklidische Distanz korrekt behandelt; eine automatische Initialisierung aus interpretierbaren H/α-Zonen, die die Abhängigkeit von zufälligen Startwerten verringert; eine Konvergenzüberwachung je Pixel, die eine adaptive Steuerung der Iterationen ermöglicht; eine optionale Eingabe vorberechneter (H,α)-Werte oder eine automatische Matrixberechnung aus rohen Kohärenzeingaben; sowie eine integrierte Robustheit gegenüber Single-Look-Speckle durch Kompatibilität mit Multi-Look-Verarbeitung. Das Werkzeug unterstützt sowohl konventionelle als auch kompakte Matrixformate. Die Hauptanwendungsfälle umfassen die Klassifikation polarimetrischer SAR-Bilder zur Erstellung verfeinerter Landbedeckungskarten über die 9-Zonen-Unterteilung von H/α hinaus, die iterative Verfeinerung einer anfänglichen unüberwachten Klassifikation für die Kartografie, die automatische Bewertung der Qualität polarimetrischer Daten über Kennzahlen der Clusterstabilität sowie die SAR-Zeitreihenklassifikation, die eine zeitliche Veränderungserkennung durch Analyse von Clusterübergängen ermöglicht. Interpretation der Ausgabe: Verfeinerte Clusterkarte (je nach Konvergenz typischerweise 3-9 Klassen), die klar getrennte Gruppen von Streumechanismen zeigt. Der Konvergenzverlauf liefert ein Konfidenzmaß – eine schnelle frühe Konvergenz weist auf eine stabile Klassentrennung hin; eine langsame Konvergenz deutet auf mehrdeutige Pixel hin, die von Mehrfachansichts- oder Veränderungsanalysen profitieren. Die Verknüpfung mit den H/α-Zonen ermöglicht die Entwicklung einer Legende: Behalten Sie die Entsprechung zu den H/α-Zonen nach Möglichkeit bei, um die Interpretierbarkeit zu wahren.",
            "params": {
              "h_raster": {
                "label": "H-Raster",
                "description": "Eingaberaster der Entropie (H) (Bereich 0-1)."
              },
              "alpha_raster": {
                "label": "Alpha-Raster",
                "description": "Eingaberaster des Alpha-Winkels (α) (Grad, 0-90)."
              },
              "max_iterations": {
                "label": "Maximale Iterationen",
                "description": "Maximale Anzahl der Clustering-Iterationen (Standard 10)."
              },
              "convergence_threshold": {
                "label": "Konvergenzschwellenwert",
                "description": "Konvergenzkriterium: Anteil der unveränderten Pixel (Standard 0.99)."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), wird Alpha bei abweichendem KBS passend zu H umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings bei der Umprojektion: nearest, bilinear, cubic, lanczos."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionales Ausgaberaster der Clusterlabels."
              }
            }
          },
          "yamaguchi_4component_decomposition": {
            "name": "Yamaguchi-4-Komponenten-Zerlegung",
            "description": "Die Yamaguchi-4-Komponenten-SAR-Zerlegung zerlegt dualpolarisierte Daten eines Radars mit synthetischer Apertur in physikalisch interpretierbare Komponenten für Oberflächenstreuung, Doppelreflexion (Volumen), Helixstreuung und Volumenstreuung, mithilfe einer modellbasierten polarimetrischen Analyse mit optionaler Einbeziehung eines DEM. Die Zerlegung trennt verschiedene Rückstreumechanismen durch Eigenwertanalyse polarimetrischer Kovarianzmatrizen und interpretiert die Komponenten als Oberflächenreflexion (Bragg-Streuung), Doppelreflexion an Winkelreflektoren, helikale Polarisationsdrehung (selten) und diffuse Volumenstreuung an Vegetation oder rauen Oberflächen. Die Einbeziehung eines externen DEM schätzt den topografischen Streubeitrag und ermöglicht eine bessere Unterscheidung echter Volumenstreuung von topografischen Effekten. Zu den Hauptmerkmalen gehören eine modellbasierte physikalische Interpretation, die eine aussagekräftige Extraktion geophysikalischer Parameter ermöglicht, eine optionale DEM-basierte topografische Korrektur, die die Genauigkeit der Komponenten im Gelände verbessert, Nichtnegativitätsbedingungen für die Komponenten, die unphysikalische Zerlegungsergebnisse verhindern, sowie eine automatische Behandlung von Datenlücken und Layover-Bereichen. Anwendungen sind die Schätzung der Waldbiomasse aus der Volumenstreukomponente, die Stadtkartierung unter Nutzung der dominanten Doppelreflexion in bebauten Gebieten, die Schätzung der Bodenfeuchte aus dem Verhalten der Oberflächenstreuung sowie die Erkennung von Hangrutschungen/Veränderungen über Änderungen der Komponentenverhältnisse. Die Ausgabe der Yamaguchi-Zerlegung ermöglicht eine geophysikalische Interpretation. Sie umfasst Bilder der vier Komponenten (Streuleistung von Oberfläche, Doppelreflexion, Helix und Volumen), Qualitätskennzahlen der Zerlegung zur Quantifizierung der Anpassungsgenauigkeit, Indizes des mittleren Streutyps zur Charakterisierung der Landbedeckung sowie optionale Kohärenz-/Entropiediagnosen zur Bewertung der Datenqualität.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Matrixraster: 6 kompakte [m11,m22,m33,m12,m13,m23] oder 9 Elemente der vollständigen komplexen 3x3-Matrix in Zeilenreihenfolge."
              },
              "matrix_format": {
                "label": "Matrixformat",
                "description": "Format der Eingabematrix: full3x3 (Standard) für hermitesche Matrizen mit Real-/Imaginärteilen."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung des Resamplings für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionales 4-Band-Ausgaberaster [surface, double_bounce, volume, helix]."
              }
            }
          },
          "ascii_to_las": {
            "name": "ASCII zu LAS",
            "description": "Formatkonvertierung: Stapelverarbeitung CSV→LAS. Liest durch Leerzeichen, Komma oder Tabulator getrennte Textdateien (x,y,z,intensity,class,returns,angle,time) ein und schreibt LAS mit EPSG-Metadaten.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array der ASCII-Eingabedateipfade."
              },
              "pattern": {
                "label": "Muster",
                "description": "Feldmuster, z. B. 'x,y,z,i,c,rn,nr,sa'."
              },
              "epsg_code": {
                "label": "EPSG-Code",
                "description": "EPSG-Code für die KBS-Metadaten der LAS-Ausgabe."
              },
              "output_directory": {
                "label": "Ausgabeverzeichnis",
                "description": "Optionales Ausgabeverzeichnis für die erzeugten LAS-Dateien."
              }
            }
          },
          "las_to_ascii": {
            "name": "LAS zu ASCII",
            "description": "Formatkonvertierung: Ausgabe LAS→CSV. Exportiert alle Punktattribute in getrennten Text für den Import in Tabellenkalkulationen/Datenbanken oder für Skripte.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Optionaler Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-CSV-Pfad (nur im Einzeleingabemodus)."
              }
            }
          },
          "las_to_shapefile": {
            "name": "LAS zu Shapefile",
            "description": "Wandelt LAS/LAZ-Punktwolken in Vektorpunkt-Shapefiles um.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Optionaler Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad für den Einzeleingabemodus."
              },
              "output_multipoint": {
                "label": "Multipoint ausgeben",
                "description": "Wenn wahr, wird eine Multipunkt-Geometrie mit einem Objekt ausgegeben; andernfalls wird pro Punkt ein Punktobjekt ausgegeben."
              }
            }
          },
          "lidar_colourize": {
            "name": "LiDAR einfärben",
            "description": "Weist Punkten Farben aus einem Bild zu: tastet ein überlappendes Orthofoto/georeferenziertes Bild an jeder Punktposition ab und speichert den Wert als RGB. Fotorealistische Darstellung von Punktwolken.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "image": {
                "label": "Bild",
                "description": "Pfad des Eingabebildrasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "lidar_join": {
            "name": "LiDAR zusammenführen",
            "description": "Führt mehrere LiDAR-Dateien zusammen: verkettet Punktwolken unter Beibehaltung der Attribute und der Konsistenz der Header. Stapelverarbeitung über Kachelsammlungen.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array der Eingabe-LiDAR-Pfade oder typisierten LiDAR-Objekte."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "lidar_shift": {
            "name": "LiDAR verschieben",
            "description": "Verschiebt Punktwolkenkoordinaten: x/y/z-Versätze für Datumsverschiebungen, Registrierungskorrekturen oder Koordinatensystemtransformationen. Massenanpassung von Koordinaten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "x_shift": {
                "label": "X-Verschiebung",
                "description": "Verschiebung, die zu den X-Koordinaten addiert wird."
              },
              "y_shift": {
                "label": "Y-Verschiebung",
                "description": "Verschiebung, die zu den Y-Koordinaten addiert wird."
              },
              "z_shift": {
                "label": "Z-Verschiebung",
                "description": "Verschiebung, die zu den Z-Koordinaten addiert wird."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "lidar_tile": {
            "name": "LiDAR kacheln",
            "description": "Teilt eine Punktwolke in regelmäßige Gitterkacheln: unterteilt nach x/y-Ausdehnung mit einstellbaren Abmessungen und Mindestpunktzahl. Standardverfahren für Datenverteilung und -verarbeitung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "tile_width": {
                "label": "Kachelbreite",
                "description": "Kachelbreite in X-Einheiten (Standard 1000)."
              },
              "tile_height": {
                "label": "Kachelhöhe",
                "description": "Kachelhöhe in Y-Einheiten (Standard 1000)."
              },
              "origin_x": {
                "label": "Ursprung X",
                "description": "X-Koordinate des Gitterursprungs (Standard 0)."
              },
              "origin_y": {
                "label": "Ursprung Y",
                "description": "Y-Koordinate des Gitterursprungs (Standard 0)."
              },
              "min_points_in_tile": {
                "label": "Minimale Punkte pro Kachel",
                "description": "Mindestanzahl der Punkte, damit eine Kachel geschrieben wird (Standard 2)."
              },
              "output_laz_format": {
                "label": "LAZ-Format ausgeben",
                "description": "Wenn wahr, werden .laz-Ausgaben geschrieben; andernfalls .las (Standard wahr)."
              },
              "output_directory": {
                "label": "Ausgabeverzeichnis",
                "description": "Optionales Verzeichnis für die Kachelausgaben; Standard ist <input_dir>/<input_stem>/."
              }
            }
          },
          "lidar_tophat_transform": {
            "name": "LiDAR-Top-Hat-Transformation",
            "description": "Extrahiert die Höhe über Grund mittels morphologischer weißer Top-Hat-Transformation: Erosion + Dilatation nähern den lokalen Boden an, das Residuum ist die Höhe. Normierung ohne Bodenpunkte.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius für Erosion und Dilatation."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "recover_flightline_info": {
            "name": "Fluglinieninformationen wiederherstellen",
            "description": "Rekonstruiert Fluglinien-IDs aus Lücken in der GPS-Zeit: leitet Fluglinien-Grenzen ab und kennzeichnet sie in Point-Source-ID/User-Data/RGB. Wiederherstellung der Flugpfade.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "max_time_diff": {
                "label": "Maximale Zeitdifferenz",
                "description": "Maximale GPS-Zeitlücke innerhalb eines Flugstreifens, bevor ein neuer Flugstreifen begonnen wird."
              },
              "pt_src_id": {
                "label": "Punktquellen-ID",
                "description": "Wenn wahr, werden die abgeleiteten Flugstreifen-IDs in point_source_id geschrieben."
              },
              "user_data": {
                "label": "Benutzerdaten",
                "description": "Wenn wahr, werden die abgeleiteten Flugstreifen-IDs in user_data geschrieben (modulo 256)."
              },
              "rgb": {
                "label": "RGB",
                "description": "Wenn wahr, wird jedem abgeleiteten Flugstreifen eine zufällige Farbe zugewiesen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "select_tiles_by_polygon": {
            "name": "Kacheln nach Polygon auswählen",
            "description": "Stapelauswahl von Kacheln: kopiert LAS/LAZ-Kacheln aus einem Verzeichnis in die Ausgabe, wenn Stichprobenpunkte der Kachel Polygongrenzen schneiden. AOI-basierte Datenextraktion.",
            "params": {
              "input_directory": {
                "label": "Eingabeverzeichnis",
                "description": "Eingabeverzeichnis mit den LiDAR-Kacheln."
              },
              "output_directory": {
                "label": "Ausgabeverzeichnis",
                "description": "Ausgabeverzeichnis für die ausgewählten LiDAR-Kacheln."
              },
              "polygons": {
                "label": "Polygone",
                "description": "Pfad der Eingabe-Polygonvektordatei oder typisiertes Vektorobjekt."
              }
            }
          },
          "sort_lidar": {
            "name": "LiDAR sortieren",
            "description": "Ordnet Punkte nach mehreren Kriterien: x/y/z mit Klassengrößen sowie abgeleitete Attribute. Optimiert die räumliche Kohärenz für Komprimierung und Kachelverarbeitung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "sort_criteria": {
                "label": "Sortierkriterien",
                "description": "Ausdruck der Sortierkriterien, z. B. 'x 100, y 100, z 10, scan_angle'."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "split_lidar": {
            "name": "LiDAR aufteilen",
            "description": "Teilt Punkte nach Attribut in separate Dateien auf: gruppiert nach Klasse, Source-ID, Zeitfenster, räumlicher Klasse oder Punktanzahl. Datenstratifizierung und -verteilung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "split_criterion": {
                "label": "Aufteilungskriterium",
                "description": "Gruppierungskriterium: num_pts, x, y, z, intensity, class, user_data, point_source_id, scan_angle oder time."
              },
              "interval": {
                "label": "Intervall",
                "description": "Klassenbreite für numerische Kriterien; bei num_pts ist dies die Anzahl der Punkte pro Ausgabedatei."
              },
              "min_pts": {
                "label": "Minimale Punkte",
                "description": "Mindestanzahl der Punkte, bevor eine geteilte Ausgabedatei geschrieben wird (Standard 5)."
              },
              "output_directory": {
                "label": "Ausgabeverzeichnis",
                "description": "Optionales Verzeichnis für die geteilten Ausgaben."
              }
            }
          },
          "classify_buildings_in_lidar": {
            "name": "Gebäude im LiDAR klassifizieren",
            "description": "Kennzeichnet Punkte innerhalb von Gebäudegrundrissen: weist allen Punkten, die räumlich innerhalb der Polygongrenzen liegen, die Klasse 6 zu. Vektorbasierte Gebäudeextraktion.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "buildings": {
                "label": "Gebäude",
                "description": "Pfad der Eingabe-Polygonvektordatei mit Gebäudegrundrissen oder typisiertes Vektorobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "classify_lidar": {
            "name": "LiDAR klassifizieren",
            "description": "Automatische Punktklassifikation: Boden, Vegetation und Gebäude anhand lokaler Geometrie (Linearität, Planarität) und RANSAC-Ebenenanpassung. Geometriebasierte Segmentierung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius (Standard 2.5)."
              },
              "grd_threshold": {
                "label": "GRD-Schwellenwert",
                "description": "Höhe über dem lokalen Minimum, die als Boden gilt (Standard 0.1)."
              },
              "oto_threshold": {
                "label": "OTO-Schwellenwert",
                "description": "Höhe über dem lokalen Minimum, die als Nicht-Geländeobjekt gilt (Standard 1.0)."
              },
              "linearity_threshold": {
                "label": "Linearitätsschwellenwert",
                "description": "Linearitätsschwellenwert für die abschließende Prüfung nicht klassifizierter Punkte (Standard 0.5)."
              },
              "planarity_threshold": {
                "label": "Planaritätsschwellenwert",
                "description": "Planaritätsschwellenwert für Segmentierung und Verfeinerung (Standard 0.85)."
              },
              "num_iter": {
                "label": "Anzahl Iterationen",
                "description": "Anzahl der lokalen RANSAC-Iterationen für die Planaritäts-/Linearitätsschätzung (Standard 30)."
              },
              "facade_threshold": {
                "label": "Fassadenschwellenwert",
                "description": "Nachbarabstand beim Kennzeichnen von Gebäudefassaden (Standard 0.5)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "classify_overlap_points": {
            "name": "Überlappungspunkte klassifizieren",
            "description": "Identifiziert Überlappungen von Fluglinien: erkennt Gitterzellen mit mehreren Point-Source-IDs und kennzeichnet oder entfernt Überlappungspunkte. Qualitätskontrolle zur Validierung der Befliegung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Gitterzellengröße für die Überlappungsanalyse."
              },
              "overlap_criterion": {
                "label": "Überlappungskriterium",
                "description": "Maximaler Scanwinkel, nicht minimale Point-Source-ID, nicht minimale Zeit oder mehrere Point-Source-IDs."
              },
              "filter": {
                "label": "Filter",
                "description": "Wenn wahr, werden Überlappungspunkte entfernt; andernfalls werden sie als Klasse 12 klassifiziert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "clip_lidar_to_polygon": {
            "name": "LiDAR auf Polygon zuschneiden",
            "description": "Räumliche Teilmenge einer Punktwolke: behält Punkte innerhalb von Polygongrenzen bei. Vektorbasierte Punktauswahl zur Extraktion des Untersuchungsgebiets.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "polygons": {
                "label": "Polygone",
                "description": "Pfad der Eingabe-Polygonvektordatei oder typisiertes Vektorobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "erase_polygon_from_lidar": {
            "name": "Polygon aus LiDAR löschen",
            "description": "Entfernt LiDAR-Punkte, die innerhalb einer Polygongeometrie liegen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "polygons": {
                "label": "Polygone",
                "description": "Pfad der Eingabe-Polygonvektordatei oder typisiertes Vektorobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "filter_lidar": {
            "name": "LiDAR filtern",
            "description": "Entfernt Punkte per Ausdruck: boolesche Logik auf Attributen (class, elevation, return_number, scan_angle, noise_flag usw.). Flexible Punktauswahl.",
            "params": {
              "statement": {
                "label": "Anweisung",
                "description": "Boolescher Ausdruck, z. B. '!is_noise && class == 2' oder 'NOT is_noise AND class == 2'."
              },
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad für den Einzeleingabemodus."
              }
            }
          },
          "filter_lidar_by_percentile": {
            "name": "LiDAR nach Perzentil filtern",
            "description": "Wählt je Zelle den Punkt eines Perzentilrangs: behält je Gitterblock einen Punkt beim angegebenen Höhenperzentil bei. Ausdünnung auf eine repräsentative Stichprobe.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "percentile": {
                "label": "Perzentil",
                "description": "Perzentil in [0, 100] (0=niedrigster, 100=höchster)."
              },
              "block_size": {
                "label": "Blockgröße",
                "description": "Gitterblockgröße für die lokale Perzentilauswahl (Standard 1.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "filter_lidar_by_reference_surface": {
            "name": "LiDAR nach Referenzfläche filtern",
            "description": "Extrahiert Punkte relativ zu einer Referenzfläche: z<Fläche, z>Fläche oder innerhalb eines Schwellenwerts. Identifiziert Vegetation über dem DTM oder Punkte unter der Oberfläche.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "ref_surface": {
                "label": "Referenzoberfläche",
                "description": "Pfad des Referenzrasters oder typisiertes Rasterobjekt."
              },
              "query": {
                "label": "Abfrage",
                "description": "Abfragetyp: within, <, <=, >, >= (Standard within)."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Absoluter Z-Distanz-Schwellenwert für query=within."
              },
              "classify": {
                "label": "Klassifizieren",
                "description": "Wenn wahr, werden Punkte klassifiziert; andernfalls wird gefiltert und nur Treffer werden behalten."
              },
              "true_class_value": {
                "label": "Klassenwert für wahr",
                "description": "Klassenwert, der im Klassifikationsmodus den passenden Punkten zugewiesen wird."
              },
              "false_class_value": {
                "label": "Klassenwert für falsch",
                "description": "Klassenwert, der im Klassifikationsmodus den nicht passenden Punkten zugewiesen wird."
              },
              "preserve_classes": {
                "label": "Klassen beibehalten",
                "description": "Wenn wahr, werden im Klassifikationsmodus die Klassen nicht passender Punkte beibehalten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "filter_lidar_classes": {
            "name": "LiDAR-Klassen filtern",
            "description": "Entfernt Punkte nach Klassifikation: filtert unerwünschte LAS-Klassen heraus (Rauschen, Wasser, Gebäude usw.). Unverzichtbare Vorverarbeitung für Abläufe der Geländeaufbereitung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "excluded_classes": {
                "label": "Ausgeschlossene Klassen",
                "description": "Auszuschließende Klassen (Array oder kommagetrennte Zeichenkette)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "filter_lidar_noise": {
            "name": "LiDAR-Rauschen filtern",
            "description": "Entfernt ASPRS-Rauschklassen: filtert Klasse 7 (niedriges Rauschen) und Klasse 18 (hohes Rauschen). Standardbereinigung von Punktwolken für LAS-1.4-konforme Daten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "filter_lidar_scan_angles": {
            "name": "LiDAR-Scanwinkel filtern",
            "description": "Entfernt schräge LiDAR-Rückstreuungen: filtert Punkte nach einem Scanwinkel-Schwellenwert. Verbessert die vertikale Genauigkeit durch Entfernen streifender Rückstreuungen mit Lagefehlern.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Maximaler absoluter Scanwinkel (ganzzahlige LAS-Einheiten; 1 Einheit = 0.006°). Erforderlich."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "height_above_ground": {
            "name": "Höhe über Grund",
            "description": "Normalisiert über die Geometrie der Punktwolke: berechnet die Höhe jedes Punkts über dem nächstgelegenen tiefer liegenden Nachbarn der Bodenklasse. Lokale Geländeoberfläche ohne Rasterreferenz.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "improved_ground_point_filter": {
            "name": "Verbesserter Bodenpunktfilter",
            "description": "Mehrstufige Pipeline zur Filterung von Bodenpunkten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad."
              },
              "block_size": {
                "label": "Blockgröße",
                "description": "Gitterzellengröße in XY-Einheiten."
              },
              "max_building_size": {
                "label": "Maximale Gebäudegröße",
                "description": "Maximal erwartete Gebäudebreite in XY-Einheiten."
              },
              "slope_threshold": {
                "label": "Neigungsschwellenwert",
                "description": "Minimale Kantenneigung in Grad."
              },
              "elev_threshold": {
                "label": "Höhenschwellenwert",
                "description": "Höhendistanz-Schwellenwert."
              },
              "classify": {
                "label": "Klassifizieren",
                "description": "Punkte klassifizieren statt filtern."
              },
              "preserve_classes": {
                "label": "Klassen beibehalten",
                "description": "Vorhandene Klassen im Klassifikationsmodus beibehalten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "individual_tree_segmentation": {
            "name": "Einzelbaumsegmentierung",
            "description": "Segmentiert Vegetationspunkte in Baumkronen: Mean-Shift-Clustering mit adaptiver Bandbreite aus der lokalen Kronendachgeometrie. Abgrenzung von Einzelbäumen auf Inventurniveau.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "only_use_veg": {
                "label": "Nur Vegetation verwenden",
                "description": "Wenn wahr, werden nur Vegetationsklassen verarbeitet (Standard wahr)."
              },
              "veg_classes": {
                "label": "Vegetationsklassen",
                "description": "Vegetationsklassen als kommagetrennter Text oder Ganzzahl-Array (Standard '3,4,5')."
              },
              "min_height": {
                "label": "Minimale Höhe",
                "description": "Minimale Punkthöhe für die Segmentierung (Standard 2.0)."
              },
              "max_height": {
                "label": "Maximale Höhe",
                "description": "Optionale maximale Punkthöhe."
              },
              "bandwidth_min": {
                "label": "Minimale Bandbreite",
                "description": "Minimale horizontale Bandbreite (Standard 1.0)."
              },
              "bandwidth_max": {
                "label": "Maximale Bandbreite",
                "description": "Maximale horizontale Bandbreite (Standard 6.0)."
              },
              "adaptive_bandwidth": {
                "label": "Adaptive Bandbreite",
                "description": "Horizontale Bandbreite je Saatpunkt aus der lokalen Kronengeometrie schätzen (Standard wahr)."
              },
              "adaptive_neighbors": {
                "label": "Adaptive Nachbarn",
                "description": "Anzahl der Nachbarn für die adaptive lokale Dichteskala (Standard 24)."
              },
              "adaptive_sector_count": {
                "label": "Adaptive Sektoranzahl",
                "description": "Anzahl der Winkelsektoren für die lokale Kronenradiusschätzung (Standard 8)."
              },
              "grid_acceleration": {
                "label": "Gitterbeschleunigung",
                "description": "Gitterapproximation im Stil von MeanShift++ für schnellere Modus-Aktualisierungen verwenden (Standard falsch)."
              },
              "grid_cell_size": {
                "label": "Gitterzellengröße",
                "description": "Gitterzellengröße für beschleunigte Modus-Aktualisierungen (Standard 0.5)."
              },
              "grid_refine_exact": {
                "label": "Exakte Gitterverfeinerung",
                "description": "Kurze exakte Nachbarschaftsverfeinerung nach der Gitterbeschleunigung ausführen (Standard falsch)."
              },
              "grid_refine_iterations": {
                "label": "Iterationen der Gitterverfeinerung",
                "description": "Obergrenze der exakten Verfeinerungsiterationen nach den Gitter-Modus-Aktualisierungen (Standard 2)."
              },
              "tile_size": {
                "label": "Kachelgröße",
                "description": "Optionale Kachelgröße für die Saatpunktplanung; <=0 deaktiviert die Kachelung (Standard 0.0)."
              },
              "tile_overlap": {
                "label": "Kachelüberlappung",
                "description": "Überlappungsbreite der Kacheln für die gekachelte Saatpunktplanung (Standard 0.0)."
              },
              "vertical_bandwidth": {
                "label": "Vertikale Bandbreite",
                "description": "Vertikale Kernelbandbreite (Standard 5.0)."
              },
              "max_iterations": {
                "label": "Maximale Iterationen",
                "description": "Maximale Anzahl der Mean-Shift-Iterationen pro Saatpunkt (Standard 30)."
              },
              "convergence_tol": {
                "label": "Konvergenztoleranz",
                "description": "Konvergenztoleranz für die Verschiebungsgröße (Standard 0.05)."
              },
              "min_cluster_points": {
                "label": "Minimale Clusterpunkte",
                "description": "Mindestanzahl der Punkte pro beibehaltenem Baumcluster (Standard 50)."
              },
              "mode_merge_dist": {
                "label": "Modus-Zusammenführungsdistanz",
                "description": "Distanzschwellenwert für das Zusammenführen konvergierter Modi (Standard 0.8)."
              },
              "threads": {
                "label": "Threads",
                "description": "Überschreibung der Thread-Anzahl (0 verwendet den Standard-Rayon-Pool)."
              },
              "simd": {
                "label": "SIMD",
                "description": "SIMD-gestützte Arithmetik in den Gewichtungsschleifen aktivieren (Standard wahr)."
              },
              "output_id_mode": {
                "label": "ID-Ausgabemodus",
                "description": "Kodierung der Segment-ID in der Ausgabe {rgb|user_data|point_source_id|rgb+user_data|rgb+point_source_id} (Standard rgb)."
              },
              "output_sidecar_csv": {
                "label": "Sidecar-CSV ausgeben",
                "description": "Wenn wahr, wird neben der LiDAR-Ausgabe eine CSV-Datei mit point_index,segment_id geschrieben."
              },
              "seed": {
                "label": "Seed",
                "description": "Deterministischer Seed für die Farbzuordnung (Standard 1)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "lidar_classify_subset": {
            "name": "LiDAR-Teilmenge klassifizieren",
            "description": "Überträgt eine Klassifikation: kennzeichnet Basispunkte, die mit den Positionen der Teilmengen-Punktwolke übereinstimmen. Ermöglicht eine räumliche Neuklassifikation anhand zusätzlicher Punktmengen.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Basis-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "subset": {
                "label": "Teilmenge",
                "description": "Teilmengen-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "subset_class_value": {
                "label": "Klassenwert der Teilmenge",
                "description": "Klassifikationswert, der den passenden Teilmengenpunkten zugewiesen wird (0-18)."
              },
              "nonsubset_class_value": {
                "label": "Klassenwert außerhalb der Teilmenge",
                "description": "Optionale Klasse für nicht passende Punkte (0-18). 255 verwenden, um vorhandene Klassen beizubehalten."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Toleranz der 3D-Nächste-Nachbarn-Zuordnung in Karteneinheiten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "lidar_elevation_slice": {
            "name": "LiDAR-Höhenschnitt",
            "description": "Extrahiert Punkte eines Höhenbands: filtert oder klassifiziert Punkte innerhalb eines z-Bereichs neu. Isoliert bestimmte Schichten (Boden, Unterwuchs, Kronendach) oder Höhenzonen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "minz": {
                "label": "Min. Z",
                "description": "Untere Grenze der Höhenscheibe (Standard -unendlich)."
              },
              "maxz": {
                "label": "Max. Z",
                "description": "Obere Grenze der Höhenscheibe (Standard +unendlich)."
              },
              "classify": {
                "label": "Klassifizieren",
                "description": "Wenn wahr, werden Punkte neu klassifiziert statt gefiltert (Standard falsch)."
              },
              "in_class_value": {
                "label": "Klassenwert innerhalb",
                "description": "Klassifikation, die Punkten innerhalb der Scheibe zugewiesen wird, wenn classify=true (Standard 2)."
              },
              "out_class_value": {
                "label": "Klassenwert außerhalb",
                "description": "Klassifikation, die Punkten außerhalb der Scheibe zugewiesen wird, wenn classify=true (Standard 1)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "lidar_remove_outliers": {
            "name": "LiDAR-Ausreißer entfernen",
            "description": "Erkennt Ausreißerpunkte über lokale Höhenresiduen: vergleicht einen Punkt mit Mittelwert/Median der Nachbarschaft und kennzeichnet Anomalien. Entfernt grobe Fehlmessungen und Rauschen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius für die lokale Residuenberechnung (Standard 2.0)."
              },
              "elev_diff": {
                "label": "Höhendifferenz",
                "description": "Absoluter Höhenresiduen-Schwellenwert für die Ausreißererkennung (Standard 50.0)."
              },
              "use_median": {
                "label": "Median verwenden",
                "description": "Median statt Mittelwert der Nachbarschaftshöhe verwenden."
              },
              "classify": {
                "label": "Klassifizieren",
                "description": "Wenn wahr, werden Ausreißer als Klasse 7/18 klassifiziert, statt entfernt zu werden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "lidar_segmentation": {
            "name": "LiDAR-Segmentierung",
            "description": "Unterteilt eine Punktwolke: RANSAC-Ebenenanpassung + Regionenwachstum erzeugen zusammenhängende Komponenten. Weist Segment-IDs zu, die in RGB gespeichert werden. Formbasiertes Punkt-Clustering.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius für das Regionenwachstum."
              },
              "num_iterations": {
                "label": "Anzahl Iterationen",
                "description": "Anzahl der RANSAC-Iterationen zur Erkennung lokaler Ebenenmodelle."
              },
              "num_samples": {
                "label": "Anzahl Stichproben",
                "description": "Anzahl der pro lokaler RANSAC-Modellanpassung gezogenen Punkte."
              },
              "inlier_threshold": {
                "label": "Inlier-Schwellenwert",
                "description": "Residuen-Schwellenwert, um Punkte als Inlier der lokalen Ebene zu klassifizieren."
              },
              "acceptable_model_size": {
                "label": "Akzeptable Modellgröße",
                "description": "Mindestanzahl der Inlier, die für ein akzeptiertes lokales Ebenenmodell erforderlich ist."
              },
              "max_planar_slope": {
                "label": "Maximale Ebenenneigung",
                "description": "Maximal akzeptierte Ebenenneigung in Grad."
              },
              "norm_diff_threshold": {
                "label": "Normalendifferenz-Schwellenwert",
                "description": "Maximale Winkeldifferenz (Grad) zwischen benachbarten Ebenennormalen während des Wachstums."
              },
              "max_z_diff": {
                "label": "Maximale Z-Differenz",
                "description": "Maximal zulässige Z-Differenz beim Wachsen eines Segments."
              },
              "classes": {
                "label": "Klassen",
                "description": "Wenn wahr, werden beim Wachsen der Segmente keine Klassengrenzen überschritten."
              },
              "ground": {
                "label": "Boden",
                "description": "Wenn wahr, wird dem größten Segment class=2 und den übrigen segmentierten Punkten class=1 zugewiesen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "lidar_segmentation_based_filter": {
            "name": "Segmentierungsbasierter LiDAR-Filter",
            "description": "Bodenfilterung durch Segmentierung mit geringem Relief: lässt zusammenhängende Komponenten aus lokal flachen Bereichen wachsen und trennt Gelände von Vegetation. Robuste Bodentrennung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius für das Wachstum zusammenhängender Komponenten."
              },
              "norm_diff_threshold": {
                "label": "Normalendifferenz-Schwellenwert",
                "description": "Kompatibilitätsparameter für ältere Normalenwinkelprüfungen."
              },
              "max_z_diff": {
                "label": "Maximale Z-Differenz",
                "description": "Maximale Höhendifferenz für das zusammenhängende Wachstum."
              },
              "classify_points": {
                "label": "Punkte klassifizieren",
                "description": "Wenn wahr, werden Punkte klassifiziert statt gefiltert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "modify_lidar": {
            "name": "LiDAR ändern",
            "description": "Aktualisiert Punktattribute über Zuweisungen: z=z+offset, class=reclassify_expr, intensity=scale_factor. Flexible Transformationen auf Punktebene.",
            "params": {
              "statement": {
                "label": "Anweisung",
                "description": "Ein oder mehrere durch Semikolons getrennte Zuweisungsausdrücke, z. B. 'z = z + 1; class = if(z > 5, 2, class)'."
              },
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad für den Einzeleingabemodus."
              }
            }
          },
          "normalize_lidar": {
            "name": "LiDAR normalisieren",
            "description": "Wandelt absolute LiDAR-Höhen in Höhen über Grund um: subtrahiert das DTM (Raster-DEM) von den z-Werten der Punkte. Erzeugt eine normalisierte Punktwolke für Strukturanalysen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "dtm": {
                "label": "DTM",
                "description": "Pfad des Eingabe-DTM-Rasters oder typisiertes Rasterobjekt."
              },
              "no_negatives": {
                "label": "Keine negativen Werte",
                "description": "Negative normalisierte Höhen auf null begrenzen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "remove_duplicates": {
            "name": "Duplikate entfernen",
            "description": "Dedupliziert eine Punktwolke: entfernt Punkte mit identischem x/y (optional z). Behandelt Überlappungen mehrerer Scans und verbessert die Verarbeitungseffizienz.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "include_z": {
                "label": "Z einschließen",
                "description": "Wenn wahr, berücksichtigt die Duplikaterkennung auch Z; andernfalls nur X/Y."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "flightline_overlap": {
            "name": "Fluglinienüberlappung",
            "description": "Erkennt Überlappungen von Aufnahmen: zählt je Zelle die unterschiedlichen Point-Source-IDs. Gitterbasierte Visualisierung von Überlappungen zur Bewertung der Fluglinienabdeckung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Optionaler Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Gitterauflösung zum Zählen der unterschiedlichen Flugstreifen pro Zelle."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "lidar_block_maximum": {
            "name": "LiDAR-Blockmaximum",
            "description": "Raster aus dem maximalen LiDAR-Attribut: Zellenwert = höchste Punktrückstreuung (Höhe, Intensität, Klasse usw.). Erzeugung von DSMs, Extraktion der Kronendachoberkante, Pulsstatistiken.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Zellengröße der Ausgabe."
              },
              "interpolation_parameter": {
                "label": "Interpolationsparameter",
                "description": "Punktattribut (elevation/intensity/class/return_number/number_of_returns/scan_angle/time/rgb/user_data)."
              },
              "returns_included": {
                "label": "Berücksichtigte Returns",
                "description": "Return-Filtermodus: all, first oder last."
              },
              "excluded_classes": {
                "label": "Ausgeschlossene Klassen",
                "description": "Auszuschließende Klassen (Array oder kommagetrennte Zeichenkette)."
              },
              "min_elev": {
                "label": "Minimale Höhe",
                "description": "Minimaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "max_elev": {
                "label": "Maximale Höhe",
                "description": "Maximaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "lidar_block_minimum": {
            "name": "LiDAR-Blockminimum",
            "description": "Raster aus dem minimalen LiDAR-Attribut: Zellenwert = niedrigste Punktrückstreuung (Höhe, Intensität, Klasse). Erzeugung von DEMs, Extraktion der Bodenoberfläche, Festlegung einer Geländebasis.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Zellengröße der Ausgabe."
              },
              "interpolation_parameter": {
                "label": "Interpolationsparameter",
                "description": "Punktattribut (elevation/intensity/class/return_number/number_of_returns/scan_angle/time/rgb/user_data)."
              },
              "returns_included": {
                "label": "Berücksichtigte Returns",
                "description": "Return-Filtermodus: all, first oder last."
              },
              "excluded_classes": {
                "label": "Ausgeschlossene Klassen",
                "description": "Auszuschließende Klassen (Array oder kommagetrennte Zeichenkette)."
              },
              "min_elev": {
                "label": "Minimale Höhe",
                "description": "Minimaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "max_elev": {
                "label": "Maximale Höhe",
                "description": "Maximaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "lidar_construct_vector_tin": {
            "name": "LiDAR-Vektor-TIN aufbauen",
            "description": "Erstellt ein 3D-Mesh: Delaunay-Triangulation aus gefilterten Punkten, ausgegeben als Vektor-Polygonlayer. Oberflächendarstellung und topografische Analyse.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Optionaler Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad; im Stapelmodus schreibt jede Eingabe eine zugehörige _tin.shp."
              },
              "returns": {
                "label": "Returns",
                "description": "Return-Filter: all, first oder last."
              },
              "excluded_classes": {
                "label": "Ausgeschlossene Klassen",
                "description": "Optionale auszuschließende Klassenwerte."
              },
              "min_elev": {
                "label": "Minimale Höhe",
                "description": "Minimal zulässige Punkthöhe."
              },
              "max_elev": {
                "label": "Maximale Höhe",
                "description": "Maximal zulässige Punkthöhe."
              },
              "max_triangle_edge_length": {
                "label": "Maximale Dreieckskantenlänge",
                "description": "Optionale maximal zulässige Dreieckskantenlänge."
              }
            }
          },
          "lidar_contour": {
            "name": "LiDAR-Höhenlinien",
            "description": "Extrahiert Höhenlinien als Vektorlinien: TIN-basierte Konturierung mit Interpolation für Höhe, Intensität und Zeit. Einstellbare Intervalle und Filterung nach Kantenlänge.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Optionaler Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (.shp/.geojson). Im Stapelmodus schreibt jede Eingabe eine zugehörige .shp."
              },
              "interval": {
                "label": "Intervall",
                "description": "Höhenlinienintervall (muss > 0 sein)."
              },
              "base_contour": {
                "label": "Basishöhenlinie",
                "description": "Basisversatz der Höhenlinien."
              },
              "smooth": {
                "label": "Glätten",
                "description": "Kompatibilitäts-Glättungsparameter (wird zur Wahrung der Aufrufsignatur akzeptiert)."
              },
              "interpolation_parameter": {
                "label": "Interpolationsparameter",
                "description": "Eines von elevation, intensity, scan_angle, time oder user_data."
              },
              "returns": {
                "label": "Returns",
                "description": "Return-Filter: all, first oder last."
              },
              "excluded_classes": {
                "label": "Ausgeschlossene Klassen",
                "description": "Optionale auszuschließende Klassenwerte."
              },
              "min_elev": {
                "label": "Minimale Höhe",
                "description": "Minimal zulässige Punkthöhe."
              },
              "max_elev": {
                "label": "Maximale Höhe",
                "description": "Maximal zulässige Punkthöhe."
              },
              "max_triangle_edge_length": {
                "label": "Maximale Dreieckskantenlänge",
                "description": "Optionale maximale Dreieckskantenlänge; längere Dreiecke werden übersprungen."
              }
            }
          },
          "lidar_digital_surface_model": {
            "name": "LiDAR-Oberflächenmodell",
            "description": "Erzeugt ein DSM aus den obersten LiDAR-Rückstreuungen über ein TIN: verwendet lokale Kandidaten höchster Punkte innerhalb eines Radius und anschließend eine Triangulation. Darstellung des Vegetationskronendachs und der Oberkanten von Objekten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Zellengröße der Ausgabe."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius für die Auswahl der Kandidaten der Oberfläche."
              },
              "min_elev": {
                "label": "Minimale Höhe",
                "description": "Minimaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "max_elev": {
                "label": "Maximale Höhe",
                "description": "Maximaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "max_triangle_edge_length": {
                "label": "Maximale Dreieckskantenlänge",
                "description": "Optionale maximale Dreieckskantenlänge zur Unterdrückung langkantiger Facetten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "lidar_hex_bin": {
            "name": "LiDAR-Hexagon-Binning",
            "description": "Aggregiert Punkte in Hexagone: Binning-Gitter mit Zusammenfassungen je Zelle (Anzahl, mittleres z, Intensität). Gleichmäßige Stichprobe und statistisches Binning.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "width": {
                "label": "Breite",
                "description": "Sechseckbreite (Abstand zwischen gegenüberliegenden Seiten)."
              },
              "orientation": {
                "label": "Orientierung",
                "description": "Gitterausrichtung: h (Spitze oben) oder v (flache Seite oben)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad."
              }
            }
          },
          "lidar_hillshade": {
            "name": "LiDAR-Schummerung",
            "description": "Stellt eine LiDAR-Oberfläche als Schummerung dar: berechnet Oberflächennormalen je Punkt aus einer lokalen Ebenenanpassung und schattiert dann nach dem Beleuchtungswinkel. Speichert das Ergebnis als RGB für die 3D-Visualisierung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius für die lokale Normalenschätzung. Werte <= 0 verwenden den geschätzten nominalen Punktabstand."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Beleuchtungsazimut in Grad."
              },
              "altitude": {
                "label": "Sonnenhöhe",
                "description": "Beleuchtungshöhe in Grad."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "lidar_idw_interpolation": {
            "name": "LiDAR-IDW-Interpolation",
            "description": "Distanzgewichtete LiDAR-Rasterung: weist den Zellenwert aus dem gewichteten Mittel der umliegenden Punkte zu (inverse Distanzpotenz). Glatte Oberflächen, Steuerung über den Exponentenparameter.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Zellengröße der Ausgabe."
              },
              "weight": {
                "label": "Gewichtung",
                "description": "IDW-Exponent (Potenz)."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius; <=0 wechselt in den k-nächste-Nachbarn-Modus."
              },
              "interpolation_parameter": {
                "label": "Interpolationsparameter",
                "description": "Zu interpolierendes Punktattribut (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Berücksichtigte Returns",
                "description": "Return-Filtermodus: all, first oder last."
              },
              "excluded_classes": {
                "label": "Ausgeschlossene Klassen",
                "description": "Auszuschließende Klassen (Array oder kommagetrennte Zeichenkette)."
              },
              "min_elev": {
                "label": "Minimale Höhe",
                "description": "Minimaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "max_elev": {
                "label": "Maximale Höhe",
                "description": "Maximaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "min_points": {
                "label": "Minimale Punkte",
                "description": "Mindestanzahl der Punkte für den k-nächste-Nachbarn-Rückfall."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "lidar_nearest_neighbour_gridding": {
            "name": "LiDAR-Rasterung nach nächstem Nachbarn",
            "description": "Schnelle LiDAR-Rasterung: weist den Zellenwert vom nächstgelegenen Punkt innerhalb des Suchradius zu. Minimale Interpolationsverzerrung, effizient für Punktwolken hoher Dichte. Schnelle Erzeugung von DSMs/DEMs.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Zellengröße der Ausgabe."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Maximale Distanz zum nächsten Nachbarn; Zellen jenseits davon werden zu NoData."
              },
              "interpolation_parameter": {
                "label": "Interpolationsparameter",
                "description": "Zu interpolierendes Punktattribut (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Berücksichtigte Returns",
                "description": "Return-Filtermodus: all, first oder last."
              },
              "excluded_classes": {
                "label": "Ausgeschlossene Klassen",
                "description": "Auszuschließende Klassen (Array oder kommagetrennte Zeichenkette)."
              },
              "min_elev": {
                "label": "Minimale Höhe",
                "description": "Minimaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "max_elev": {
                "label": "Maximale Höhe",
                "description": "Maximaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "lidar_radial_basis_function_interpolation": {
            "name": "LiDAR-Interpolation mit radialen Basisfunktionen",
            "description": "Glatte LiDAR-Oberfläche über RBF: radiale Basisfunktionen erfassen lokale Krümmung und Mikrotopografie. Hochwertige Rasterung mit stetigen Ableitungen über Grenzen hinweg.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Zellengröße der Ausgabe."
              },
              "num_points": {
                "label": "Anzahl Punkte",
                "description": "Mindestanzahl der Nachbarn für die lokale Interpolation."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius; <=0 verwendet ausschließlich den k-nächste-Nachbarn-Modus."
              },
              "func_type": {
                "label": "Funktionstyp",
                "description": "RBF-Basistyp (thinplatespline, polyharmonic, gaussian, multiquadric, inversemultiquadric)."
              },
              "poly_order": {
                "label": "Polynomgrad",
                "description": "Grad des Polynomtrends für die lokale Korrektur (none, constant, quadratic)."
              },
              "weight": {
                "label": "Gewichtung",
                "description": "Formparameter/Exponent der Basisfunktion, abhängig von func_type."
              },
              "interpolation_parameter": {
                "label": "Interpolationsparameter",
                "description": "Zu interpolierendes Punktattribut (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Berücksichtigte Returns",
                "description": "Return-Filtermodus: all, first oder last."
              },
              "excluded_classes": {
                "label": "Ausgeschlossene Klassen",
                "description": "Auszuschließende Klassen (Array oder kommagetrennte Zeichenkette)."
              },
              "min_elev": {
                "label": "Minimale Höhe",
                "description": "Minimaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "max_elev": {
                "label": "Maximale Höhe",
                "description": "Maximaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "lidar_sibson_interpolation": {
            "name": "LiDAR-Sibson-Interpolation",
            "description": "LiDAR-Rasterung nach natürlichen Nachbarn: Voronoi-basierte Interpolation mit Gewichten der natürlichen Nachbarn. Glatte, natürlich wirkende Oberflächen ohne Neigungsartefakte an den Punktpositionen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Zellengröße der Ausgabe."
              },
              "interpolation_parameter": {
                "label": "Interpolationsparameter",
                "description": "Zu interpolierendes Punktattribut (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Berücksichtigte Returns",
                "description": "Return-Filtermodus: all, first oder last."
              },
              "excluded_classes": {
                "label": "Ausgeschlossene Klassen",
                "description": "Auszuschließende Klassen (Array oder kommagetrennte Zeichenkette)."
              },
              "min_elev": {
                "label": "Minimale Höhe",
                "description": "Minimaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "max_elev": {
                "label": "Maximale Höhe",
                "description": "Maximaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "lidar_thin": {
            "name": "LiDAR ausdünnen",
            "description": "Dünnt die Dichte einer Punktwolke aus: behält ≤1 Punkt je Gitterzelle mit der Strategie erster/letzter/niedrigster/höchster/nächster Punkt bei. Verringert den Speicherbedarf und bewahrt dabei Abdeckung und topografische Komplexität.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Gitterzellengröße für die Ausdünnung (Standard 1.0)."
              },
              "method": {
                "label": "Methode",
                "description": "Methode der Punktauswahl pro Zelle: first, last, lowest, highest, nearest (Standard 'first')."
              },
              "save_filtered": {
                "label": "Gefilterte speichern",
                "description": "Wenn wahr, werden auch die herausgefilterten Punkte geschrieben und ihr Speicherort in outputs.filtered_path zurückgegeben."
              },
              "filtered_output": {
                "label": "Gefilterte Ausgabe",
                "description": "Optionaler Ausgabepfad für herausgefilterte Punkte (Einzeleingabemodus)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "lidar_thin_high_density": {
            "name": "Hochdichtes LiDAR ausdünnen",
            "description": "Adaptive Ausdünnung nach Dichte: verringert die Punktanzahl in überdichten Zonen und bewahrt spärliche Bereiche. Gleicht die Abtastung bei variablen Überlappungsmustern der Fluglinien an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "density": {
                "label": "Dichte",
                "description": "Schwellenwert der Zielpunktdichte in Punkten pro Flächeneinheit."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Gitterauflösung für die X/Y- und Z-Klasseneinteilung (Standard 1.0)."
              },
              "save_filtered": {
                "label": "Gefilterte speichern",
                "description": "Wenn wahr, werden die herausgefilterten Punkte geschrieben und outputs.filtered_path zurückgegeben."
              },
              "filtered_output": {
                "label": "Gefilterte Ausgabe",
                "description": "Optionaler Ausgabepfad für herausgefilterte Punkte im Einzeleingabemodus."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "lidar_tile_footprint": {
            "name": "LiDAR-Kachelumriss",
            "description": "Erzeugt Umrisse: achsenparallele Begrenzungsrahmen oder konvexe Hüllen je Punktwolke. Ausgabe als Vektorpolygone für räumliche Indizierung und Datenkataloge.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Optionaler Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, werden alle LiDAR-Dateien im aktuellen Verzeichnis verarbeitet."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad für die Umrisse."
              },
              "output_hulls": {
                "label": "Hüllen ausgeben",
                "description": "Wenn wahr, werden Umrisse als konvexe Hülle geschrieben; andernfalls achsenparallele Begrenzungsrahmen."
              }
            }
          },
          "lidar_tin_gridding": {
            "name": "LiDAR-TIN-Rasterung",
            "description": "Exakte LiDAR-Interpolation über ein TIN: erstellt eine Delaunay-Triangulation aus den Punkten und interpoliert die Zellenwerte aus den Dreiecksebenen. Berücksichtigt die Punkthöhen, hervorragend für unregelmäßige Abdeckung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Zellengröße der Ausgabe."
              },
              "max_triangle_edge_length": {
                "label": "Maximale Dreieckskantenlänge",
                "description": "Optionale maximale Dreieckskantenlänge zur Unterdrückung langkantiger Facetten."
              },
              "interpolation_parameter": {
                "label": "Interpolationsparameter",
                "description": "Zu interpolierendes Punktattribut (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Berücksichtigte Returns",
                "description": "Return-Filtermodus: all, first oder last."
              },
              "excluded_classes": {
                "label": "Ausgeschlossene Klassen",
                "description": "Auszuschließende Klassen (Array oder kommagetrennte Zeichenkette)."
              },
              "min_elev": {
                "label": "Minimale Höhe",
                "description": "Minimaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "max_elev": {
                "label": "Maximale Höhe",
                "description": "Maximaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              },
              "triangulation_backend": {
                "label": "Triangulations-Backend",
                "description": "Auswahl des Triangulations-Backends: auto, delaunator oder wbtopology."
              },
              "triangulation_auto_threshold": {
                "label": "Automatischer Triangulationsschwellenwert",
                "description": "Bei backend=auto wird ab dieser Stichprobenanzahl zu wbtopology gewechselt (Standard deaktiviert; zum Aktivieren explizit setzen)."
              },
              "triangulation_epsilon": {
                "label": "Triangulations-Epsilon",
                "description": "Epsilon für die Duplikatbehandlung des wbtopology-Backends (Standard 1e-12)."
              },
              "triangulation_thin_cell_size": {
                "label": "Zellengröße für Triangulationsausdünnung",
                "description": "Optionale Zellengröße für die Vorausdünnung der Triangulationsstichproben; Werte > 0 aktivieren die Ausdünnung, 0 deaktiviert sie."
              },
              "triangulation_thin_method": {
                "label": "Methode für Triangulationsausdünnung",
                "description": "Methode des repräsentativen Punkts für die Ausdünnung: nearest_center, min_value oder max_value."
              }
            }
          },
          "colourize_based_on_class": {
            "name": "Nach Klasse einfärben",
            "description": "Färbt Punkte nach Klasse: ASPRS-Standardfarben (Grün=Vegetation, Braun=Boden, Grau=Gebäude usw.). Mischt mit der Intensität für mehr Kontrast. Visualisierung der Klassifikation.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "intensity_blending_amount": {
                "label": "Intensitätsmischungsbetrag",
                "description": "Prozentuale Mischung [0,100] zwischen Klassenfarbe und Intensität."
              },
              "clr_str": {
                "label": "Farbzeichenfolge",
                "description": "Optionale Überschreibungen der Klassenfarben, z. B. '2:(184,167,108);5:#9ab86c'."
              },
              "use_unique_clrs_for_buildings": {
                "label": "Eindeutige Farben für Gebäude verwenden",
                "description": "Wenn wahr, werden zusammenhängenden Gebäudeclustern eindeutige Farben zugewiesen."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius für die Einfärbung der Gebäudecluster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "colourize_based_on_point_returns": {
            "name": "Nach Punktrückstreuungen einfärben",
            "description": "Färbt Punkte nach Rückstreuungsreihenfolge: erste/mittlere/letzte Rückstreuungen erhalten unterschiedliche Farben. Visualisierung der Pulsstruktur mit Mehrfachrückstreuungen zur Validierung der Verarbeitung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "intensity_blending_amount": {
                "label": "Intensitätsmischungsbetrag",
                "description": "Prozentuale Mischung [0,100] zwischen Return-Farbe und Intensität."
              },
              "only_ret_colour": {
                "label": "Farbe für einzige Returns",
                "description": "Farbe für Punkte mit einem einzigen Return."
              },
              "first_ret_colour": {
                "label": "Farbe für erste Returns",
                "description": "Farbe für First-Return-Punkte in Pulsen mit mehreren Returns."
              },
              "intermediate_ret_colour": {
                "label": "Farbe für mittlere Returns",
                "description": "Farbe für Punkte mit Zwischen-Returns."
              },
              "last_ret_colour": {
                "label": "Farbe für letzte Returns",
                "description": "Farbe für Last-Return-Punkte in Pulsen mit mehreren Returns."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "find_flightline_edge_points": {
            "name": "Randpunkte der Fluglinie finden",
            "description": "Filtert Punkte am Flugstreifenrand: extrahiert nur Punkte an den Grenzen des Aufnahmestreifens. Qualitätssicherung für Streifenüberlappung und Randeffekte.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "individual_tree_detection": {
            "name": "Einzelbaumerkennung",
            "description": "Identifiziert Baumspitzen: lokale Maxima in einer höhengefilterten Punktwolke mit adaptivem Suchradius. Gibt ein Vektorpunkt-Shapefile möglicher Stammpositionen zurück.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "min_search_radius": {
                "label": "Minimaler Suchradius",
                "description": "Minimaler Suchradius in Karteneinheiten (Standard 1.0)."
              },
              "min_height": {
                "label": "Minimale Höhe",
                "description": "Minimale Höhe für die Berücksichtigung von Punkten (Standard 0.0)."
              },
              "max_search_radius": {
                "label": "Maximaler Suchradius",
                "description": "Maximaler Suchradius; falls nicht gesetzt, wird min_search_radius verwendet."
              },
              "max_height": {
                "label": "Maximale Höhe",
                "description": "Maximale Höhe; falls nicht gesetzt, wird min_height verwendet."
              },
              "only_use_veg": {
                "label": "Nur Vegetation verwenden",
                "description": "Wenn wahr, werden nur Vegetationsklassen verarbeitet (Standard wahr)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad der Ausgabe-Vektordatei (Shapefile)."
              }
            }
          },
          "lidar_eigenvalue_features": {
            "name": "LiDAR-Eigenwertmerkmale",
            "description": "Leitet PCA-Merkmale ab: Eigenwerte/-vektoren aus Nachbarschaften. Formdeskriptoren (Planarität, Linearität, Höhenvarianz) für die Analyse von Punktwolken.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Optionaler Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "num_neighbours": {
                "label": "Anzahl Nachbarn",
                "description": "Optionale Zielgröße der Nachbarschaft (ohne den Punkt selbst)."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Optionaler maximaler Suchradius für die Nachbarschaftserfassung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad der .eigen-Datei im Einzeleingabemodus."
              }
            }
          },
          "lidar_histogram": {
            "name": "LiDAR-Histogramm",
            "description": "Berechnet die Verteilung eines Attributs: Häufigkeitshistogramm für Höhe, Intensität, Scanwinkel und Klasse. Abgeschnittene Perzentile zur Unterdrückung von Ausreißern. HTML-Visualisierung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler HTML-Ausgabepfad für den Histogrammbericht."
              },
              "parameter": {
                "label": "Parameter",
                "description": "Eines von Höhe, Intensität, Scanwinkel, Klasse oder Zeit."
              },
              "clip_percent": {
                "label": "Beschneidungsprozent",
                "description": "Perzentil-Beschneidung in [0,50] für die unteren/oberen Randbereiche."
              }
            }
          },
          "lidar_info": {
            "name": "LiDAR-Info",
            "description": "Erzeugt einen zusammenfassenden Metadatenbericht: Punktanzahl, Ausdehnung, Intensitätsbereich, Klassenhistogramm, Verteilung der Rückstreuungen. HTML-/Textausgabe zur Datendokumentation.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Berichts (.html/.txt)."
              },
              "show_point_density": {
                "label": "Punktdichte anzeigen",
                "description": "Wenn wahr, werden näherungsweise Punktdichte-Kennzahlen des Begrenzungsrahmens einbezogen."
              },
              "show_vlrs": {
                "label": "VLRs anzeigen",
                "description": "Kompatibilitätsflag; reserviert für eine zukünftige detaillierte Metadatenausgabe."
              },
              "show_geokeys": {
                "label": "GeoKeys anzeigen",
                "description": "Kompatibilitätsflag; reserviert für eine zukünftige detaillierte Ausgabe der KBS-Schlüssel."
              }
            }
          },
          "lidar_kappa": {
            "name": "LiDAR-Kappa",
            "description": "Berechnet einen Kappa-Übereinstimmungsbericht zwischen zwei klassifizierten LiDAR-Punktwolken und schreibt ein Raster der Klassenübereinstimmung.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Klassifikations-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Referenz-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "report": {
                "label": "Bericht",
                "description": "Pfad des HTML-Ausgabeberichts."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Gitterauflösung für die räumliche Ausgabe der Klassenübereinstimmung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              },
              "output_class_accuracy": {
                "label": "Klassengenauigkeit ausgeben",
                "description": "Kompatibilitätsflag, das aus Gründen der Abwärtskompatibilität beibehalten wird; das Übereinstimmungsraster wird immer erzeugt."
              }
            }
          },
          "lidar_point_density": {
            "name": "LiDAR-Punktdichte",
            "description": "Kartiert die LiDAR-Abtastdichte: Punktanzahl je Flächeneinheit (Anzahl innerhalb eines Radius je Zelle). Bewertung der Datenqualität, Abdeckungsanalyse, Visualisierung der Aufnahmemuster.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Zellengröße der Ausgabe."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius für die Punktzählung."
              },
              "returns_included": {
                "label": "Berücksichtigte Returns",
                "description": "Return-Filtermodus: all, first oder last."
              },
              "excluded_classes": {
                "label": "Ausgeschlossene Klassen",
                "description": "Auszuschließende Klassen (Array oder kommagetrennte Zeichenkette)."
              },
              "min_elev": {
                "label": "Minimale Höhe",
                "description": "Minimaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "max_elev": {
                "label": "Maximale Höhe",
                "description": "Maximaler Höhenschwellenwert für die Punktauswahlfilterung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "lidar_point_return_analysis": {
            "name": "LiDAR-Analyse der Punktrückstreuungen",
            "description": "Werkzeug zur Qualitätssicherung: prüft die Gültigkeit der Rückstreuungsfolge (Konsistenz von mehrfach/erster/letzter). Erzeugt einen Bericht und eine klassifizierte Ausgabe, die Anomalien der Rückstreuungen kennzeichnet. Prüfung der Datenintegrität.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "create_output": {
                "label": "Ausgabe erstellen",
                "description": "Wenn wahr, wird eine klassifizierte LiDAR-QC-Ausgabe geschrieben."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler LiDAR-Ausgabepfad, der bei create_output=true verwendet wird."
              },
              "report": {
                "label": "Bericht",
                "description": "Optionaler Ausgabepfad des Textberichts."
              }
            }
          },
          "lidar_point_stats": {
            "name": "LiDAR-Punktstatistik",
            "description": "Erstellt Raster-Statistikgitter: Punktanzahl, Pulsanzahl, mittlere Punkte je Puls, z-/Intensitätsbereich und vorherrschende Klasse je Zelle. Analyse mit mehreren Ausgaben.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Optionaler Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt. Wenn nicht angegeben, wird der Stapelmodus über die LiDAR-Dateien im aktuellen Verzeichnis ausgeführt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Gitterauflösung der Ausgabe."
              },
              "num_points": {
                "label": "Anzahl Punkte",
                "description": "Punktanzahlraster erstellen."
              },
              "num_pulses": {
                "label": "Anzahl Pulse",
                "description": "Raster der Pulsanzahl früher Returns erstellen."
              },
              "avg_points_per_pulse": {
                "label": "Durchschnittliche Punkte pro Puls",
                "description": "Raster der durchschnittlichen Punkte pro Puls erstellen."
              },
              "z_range": {
                "label": "Z-Bereich",
                "description": "Raster der Höhenspanne erstellen."
              },
              "intensity_range": {
                "label": "Intensitätsbereich",
                "description": "Raster der Intensitätsspanne erstellen."
              },
              "predominant_class": {
                "label": "Vorherrschende Klasse",
                "description": "Raster der vorherrschenden Klasse erstellen."
              },
              "output_directory": {
                "label": "Ausgabeverzeichnis",
                "description": "Optionales Ausgabeverzeichnis für die erzeugten Raster."
              }
            }
          },
          "lidar_ransac_planes": {
            "name": "LiDAR-RANSAC-Ebenen",
            "description": "Identifiziert lokal ebene LiDAR-Punkte mittels RANSAC-Ebenenanpassung in der Nachbarschaft.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius für die lokale Ebenenanpassung."
              },
              "num_iterations": {
                "label": "Anzahl Iterationen",
                "description": "Anzahl der RANSAC-Iterationen pro Punkt."
              },
              "num_samples": {
                "label": "Anzahl Stichproben",
                "description": "Anzahl der pro RANSAC-Iteration gezogenen Nachbarpunkte."
              },
              "inlier_threshold": {
                "label": "Inlier-Schwellenwert",
                "description": "Maximales Punkt-zu-Ebene-Residuum für Inlier."
              },
              "acceptable_model_size": {
                "label": "Akzeptable Modellgröße",
                "description": "Mindestanzahl der Inlier-Punkte, die für ein Ebenenmodell erforderlich ist."
              },
              "max_planar_slope": {
                "label": "Maximale Ebenenneigung",
                "description": "Maximal akzeptierte Ebenenneigung in Grad."
              },
              "classify": {
                "label": "Klassifizieren",
                "description": "Wenn wahr, werden planare und nicht-planare Punkte klassifiziert statt gefiltert."
              },
              "only_last_returns": {
                "label": "Nur letzte Returns",
                "description": "Wenn wahr, werden nur späte Returns für die Modellanpassung verwendet."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "lidar_rooftop_analysis": {
            "name": "LiDAR-Dachanalyse",
            "description": "Identifiziert ebene Dachsegmente innerhalb von Gebäudegrundrissen und gibt Segmentpolygone mit Dachattributen aus.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Eingabe-LiDAR-Pfade oder typisierte LiDAR-Objekte."
              },
              "building_footprints": {
                "label": "Gebäudegrundrisse",
                "description": "Polygonlayer der Gebäudegrundrisse."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius für die lokale Dachanalyse."
              },
              "inlier_threshold": {
                "label": "Inlier-Schwellenwert",
                "description": "Maximales Residuum für die lokale planare Unterstützung."
              },
              "acceptable_model_size": {
                "label": "Akzeptable Modellgröße",
                "description": "Minimale Segmentgröße."
              },
              "max_planar_slope": {
                "label": "Maximale Ebenenneigung",
                "description": "Maximale Neigung der Dachfacetten in Grad."
              },
              "norm_diff_threshold": {
                "label": "Normalendifferenz-Schwellenwert",
                "description": "Maximale Winkeldifferenz zwischen benachbarten Normalen in Grad."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Beleuchtungsazimut für die schummerungsartige Facettenbeleuchtung."
              },
              "altitude": {
                "label": "Sonnenhöhe",
                "description": "Beleuchtungshöhe für die schummerungsartige Facettenbeleuchtung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad."
              }
            }
          },
          "normal_vectors": {
            "name": "Normalenvektoren",
            "description": "Berechnet Oberflächennormalen je Punkt: eine PCA der lokalen Nachbarschaft schätzt die Ebenenausrichtung. Die Normalen werden in den Punktdatensätzen gespeichert und als RGB visualisiert.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LiDAR-Pfad oder typisiertes LiDAR-Objekt."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius für die lokale Ebenenanpassung. Werte <= 0 verwenden einen geschätzten nominalen Punktabstand."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-LiDAR-Pfad."
              }
            }
          },
          "snap_events_to_routes": {
            "name": "Ereignisse auf Routen fangen",
            "description": "Fängt Ereignispunkte auf Routenlinien und gibt Diagnosen zu Routenmaß und Versatz aus.",
            "params": {
              "routes": {
                "label": "Routen",
                "description": "Eingabe-Routenlinienlayer."
              },
              "events": {
                "label": "Ereignisse",
                "description": "Eingabe-Ereignispunktlayer."
              },
              "max_offset_distance": {
                "label": "Maximale Versatzdistanz",
                "description": "Optionale maximale Versatzdistanz zur Route in Karteneinheiten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad der auf die Route gefangenen Ereignispunkte."
              }
            }
          },
          "locate_points_along_routes": {
            "name": "Punkte entlang von Routen lokalisieren",
            "description": "Verortet Punktobjekte entlang von Routenlinien und schreibt Attribute des Routenmaßes.",
            "params": {
              "routes": {
                "label": "Routen",
                "description": "Eingabe-Routenlinienlayer."
              },
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktlayer, der entlang der Routen verortet werden soll."
              },
              "max_offset_distance": {
                "label": "Maximale Versatzdistanz",
                "description": "Optionale maximale Versatzdistanz zwischen Punkt und Route."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad."
              }
            }
          },
          "points_along_lines": {
            "name": "Punkte entlang von Linien",
            "description": "Erzeugt Punktobjekte in regelmäßigen Abständen entlang von Eingabe-Polylinien für Infrastrukturüberwachung, Umweltbeprobung und räumliche Analysen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Linienlayer."
              },
              "spacing": {
                "label": "Abstand",
                "description": "Abstand zwischen den Punkten."
              },
              "include_end": {
                "label": "Ende einschließen",
                "description": "Linienendpunkte einbeziehen (Standard wahr)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad."
              }
            }
          },
          "route_calibrate": {
            "name": "Route kalibrieren",
            "description": "Kalibriert Start- und Endmaße von Routen anhand von Kontrollpunkten mit bekannten Maßen.",
            "params": {
              "routes": {
                "label": "Routen",
                "description": "Eingabe-Routenlinienlayer."
              },
              "control_points": {
                "label": "Kontrollpunkte",
                "description": "Eingabe-Kontrollpunktlayer."
              },
              "control_measure_field": {
                "label": "Kontroll-Messwertfeld",
                "description": "Kontrollpunktfeld mit den bekannten Messwerten."
              },
              "route_id_field": {
                "label": "Routen-ID-Feld",
                "description": "Optionales Routen-ID-Feld in den Routen. Standard ist die Objekt-FID."
              },
              "control_route_id_field": {
                "label": "Kontroll-Routen-ID-Feld",
                "description": "Optionales Routen-ID-Feld in den Kontrollpunkten. Standard ist die Objekt-FID."
              },
              "from_measure_field": {
                "label": "Feld Von-Messwert",
                "description": "Ausgabefeld für den Startmesswert der Route (Standard 'from_measure')."
              },
              "to_measure_field": {
                "label": "Feld Bis-Messwert",
                "description": "Ausgabefeld für den Endmesswert der Route (Standard 'to_measure')."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Maximale Versatzdistanz der Kontrollpunkte zur Routengeometrie (Standard 1.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabelayer der kalibrierten Routen."
              }
            }
          },
          "route_event_lines_from_layer": {
            "name": "Routenereignislinien aus Layer",
            "description": "Erstellt geroutete Linienereignisse aus einem Ereignis-Vektorlayer anhand von Von-/Bis-Maßen.",
            "params": {
              "routes": {
                "label": "Routen",
                "description": "Eingabe-Routenlinienlayer."
              },
              "events": {
                "label": "Ereignisse",
                "description": "Eingabe-Ereignisvektorlayer."
              },
              "event_route_field": {
                "label": "Ereignis-Routenfeld",
                "description": "Feld des Ereignislayers mit den Routen-IDs."
              },
              "from_measure_field": {
                "label": "Feld Von-Messwert",
                "description": "Feld des Ereignislayers mit den Startmesswerten."
              },
              "to_measure_field": {
                "label": "Feld Bis-Messwert",
                "description": "Feld des Ereignislayers mit den Endmesswerten."
              },
              "route_id_field": {
                "label": "Routen-ID-Feld",
                "description": "Optionales Feld des Routenlayers mit den Routen-IDs. Standard ist die Objekt-FID."
              },
              "write_event_fid": {
                "label": "Ereignis-FID schreiben",
                "description": "EVENT_FID schreiben, um die Objekt-IDs der Quellereignisse zu erhalten (Standard wahr)."
              },
              "write_event_xy": {
                "label": "Ereignis-XY schreiben",
                "description": "X/Y-Attribute der Quellereignisgeometrie schreiben (Standard falsch)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienvektorpfad."
              }
            }
          },
          "route_event_lines_from_table": {
            "name": "Routenereignislinien aus Tabelle",
            "description": "Erstellt geroutete Linienereignisse aus einer CSV-Ereignistabelle und einem Routenlayer anhand von Von-/Bis-Maßen.",
            "params": {
              "routes": {
                "label": "Routen",
                "description": "Eingabe-Routenlinienlayer."
              },
              "events": {
                "label": "Ereignisse",
                "description": "Pfad der CSV-Eingabeereignistabelle."
              },
              "event_route_field": {
                "label": "Ereignis-Routenfeld",
                "description": "CSV-Feld mit den Routen-IDs."
              },
              "from_measure_field": {
                "label": "Feld Von-Messwert",
                "description": "CSV-Feld mit den Startmesswerten."
              },
              "to_measure_field": {
                "label": "Feld Bis-Messwert",
                "description": "CSV-Feld mit den Endmesswerten."
              },
              "route_id_field": {
                "label": "Routen-ID-Feld",
                "description": "Optionales Feld des Routenlayers mit den Routen-IDs. Standard ist die Objekt-FID."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienvektorpfad."
              }
            }
          },
          "route_event_merge": {
            "name": "Routenereignisse zusammenführen",
            "description": "Führt benachbarte kompatible Routenereignisse zusammen.",
            "params": {
              "events": {
                "label": "Ereignisse",
                "description": "Eingabe-Ereignislayer mit den Routenintervallen."
              },
              "event_route_field": {
                "label": "Ereignis-Routenfeld",
                "description": "Routen-ID-Feld des Ereignislayers."
              },
              "from_measure_field": {
                "label": "Feld Von-Messwert",
                "description": "Intervallstartfeld des Ereignislayers."
              },
              "to_measure_field": {
                "label": "Feld Bis-Messwert",
                "description": "Intervallendfeld des Ereignislayers."
              },
              "group_fields": {
                "label": "Gruppierungsfelder",
                "description": "Optionale kommagetrennte Felder für die Zusammenführungskompatibilität. Standard sind alle Nicht-Messwertfelder."
              },
              "gap_tolerance": {
                "label": "Lückentoleranz",
                "description": "Maximal zulässige Lücke für das Zusammenführen benachbarter Ereignisse (Standard 0.0)."
              },
              "conflict_mode": {
                "label": "Konfliktmodus",
                "description": "Modus der Überlappungsbehandlung: error|skip (Standard error)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabelayer der zusammengeführten Ereignisse."
              }
            }
          },
          "route_event_overlay": {
            "name": "Routenereignisse überlagern",
            "description": "Überlagert zwei Routenereignis-Layer anhand der Intervallüberlappung.",
            "params": {
              "primary_events": {
                "label": "Primäre Ereignisse",
                "description": "Primärer Ereignislayer."
              },
              "overlay_events": {
                "label": "Overlay-Ereignisse",
                "description": "Overlay-Ereignislayer."
              },
              "primary_route_field": {
                "label": "Primäres Routenfeld",
                "description": "Routen-ID-Feld des primären Layers."
              },
              "primary_from_measure_field": {
                "label": "Primäres Feld Von-Messwert",
                "description": "Intervallstartfeld des primären Layers."
              },
              "primary_to_measure_field": {
                "label": "Primäres Feld Bis-Messwert",
                "description": "Intervallendfeld des primären Layers."
              },
              "overlay_route_field": {
                "label": "Overlay-Routenfeld",
                "description": "Routen-ID-Feld des Overlay-Layers."
              },
              "overlay_from_measure_field": {
                "label": "Overlay-Feld Von-Messwert",
                "description": "Intervallstartfeld des Overlay-Layers."
              },
              "overlay_to_measure_field": {
                "label": "Overlay-Feld Bis-Messwert",
                "description": "Intervallendfeld des Overlay-Layers."
              },
              "min_overlap_length": {
                "label": "Minimale Überlappungslänge",
                "description": "Minimale zu behaltende Überlappungslänge (Standard 0.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Overlay-Layer."
              }
            }
          },
          "route_event_points_from_layer": {
            "name": "Routenereignispunkte aus Layer",
            "description": "Erstellt geroutete Punktereignisse aus einem Ereignis-Vektorlayer und einem Routenlayer.",
            "params": {
              "routes": {
                "label": "Routen",
                "description": "Eingabe-Routenlinienlayer."
              },
              "events": {
                "label": "Ereignisse",
                "description": "Eingabe-Ereignisvektorlayer."
              },
              "event_route_field": {
                "label": "Ereignis-Routenfeld",
                "description": "Feld des Ereignislayers mit den Routen-IDs."
              },
              "measure_field": {
                "label": "Messwertfeld",
                "description": "Feld des Ereignislayers mit den Punktereignis-Messwerten."
              },
              "route_id_field": {
                "label": "Routen-ID-Feld",
                "description": "Optionales Feld des Routenlayers mit den Routen-IDs. Standard ist die Objekt-FID."
              },
              "write_event_fid": {
                "label": "Ereignis-FID schreiben",
                "description": "EVENT_FID schreiben, um die Objekt-IDs der Quellereignisse zu erhalten (Standard wahr)."
              },
              "write_event_xy": {
                "label": "Ereignis-XY schreiben",
                "description": "X/Y-Attribute der Quellereignisgeometrie schreiben (Standard falsch)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad."
              }
            }
          },
          "route_event_points_from_table": {
            "name": "Routenereignispunkte aus Tabelle",
            "description": "Erstellt geroutete Punktereignisse aus einer CSV-Ereignistabelle und einem Routenlayer.",
            "params": {
              "routes": {
                "label": "Routen",
                "description": "Eingabe-Routenlinienlayer."
              },
              "events": {
                "label": "Ereignisse",
                "description": "Pfad der CSV-Eingabeereignistabelle."
              },
              "event_route_field": {
                "label": "Ereignis-Routenfeld",
                "description": "CSV-Feld mit den Routen-IDs."
              },
              "measure_field": {
                "label": "Messwertfeld",
                "description": "CSV-Feld mit den Punktereignis-Messwerten."
              },
              "route_id_field": {
                "label": "Routen-ID-Feld",
                "description": "Optionales Feld des Routenlayers mit den Routen-IDs. Standard ist die Objekt-FID."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad."
              }
            }
          },
          "route_event_split": {
            "name": "Routenereignisse teilen",
            "description": "Teilt Routenereignisse anhand von Grenzmaßen je Route auf.",
            "params": {
              "events": {
                "label": "Ereignisse",
                "description": "Eingabe-Ereignislayer mit den Routenintervallen."
              },
              "boundaries": {
                "label": "Grenzen",
                "description": "Eingabe-Grenzlayer mit Messwert-Trennpunkten der Routen."
              },
              "event_route_field": {
                "label": "Ereignis-Routenfeld",
                "description": "Routen-ID-Feld des Ereignislayers."
              },
              "from_measure_field": {
                "label": "Feld Von-Messwert",
                "description": "Intervallstartfeld des Ereignislayers."
              },
              "to_measure_field": {
                "label": "Feld Bis-Messwert",
                "description": "Intervallendfeld des Ereignislayers."
              },
              "boundary_route_field": {
                "label": "Grenzen-Routenfeld",
                "description": "Routen-ID-Feld des Grenzlayers."
              },
              "boundary_measure_field": {
                "label": "Grenzen-Messwertfeld",
                "description": "Messwertfeld des Grenzlayers."
              },
              "min_segment_length": {
                "label": "Minimale Segmentlänge",
                "description": "Optionale minimale Länge der zu behaltenden Teilsegmente (Standard 0.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabelayer der geteilten Ereignisse."
              }
            }
          },
          "route_measure_qa": {
            "name": "Qualitätsprüfung der Routenmessungen",
            "description": "Diagnostiziert Lücken, Überlappungen, nicht monotone Folgen und doppelte Maße bei Routenereignissen.",
            "params": {
              "events": {
                "label": "Ereignisse",
                "description": "Eingabe-Ereignislayer mit den Routenintervallen."
              },
              "route_field": {
                "label": "Routenfeld",
                "description": "Routen-ID-Feld."
              },
              "from_measure_field": {
                "label": "Feld Von-Messwert",
                "description": "Feld für den Intervallbeginn."
              },
              "to_measure_field": {
                "label": "Feld Bis-Messwert",
                "description": "Feld für das Intervallende."
              },
              "gap_tolerance": {
                "label": "Lückentoleranz",
                "description": "Lückentoleranz (Standard 0.0)."
              },
              "overlap_tolerance": {
                "label": "Überlappungstoleranz",
                "description": "Überlappungstoleranz (Standard 0.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabelayer mit QA-Diagnosen."
              }
            }
          },
          "route_recalibrate": {
            "name": "Route neu kalibrieren",
            "description": "Kalibriert bearbeitete Routenmaße anhand eines Referenz-Routenlayers neu und bewahrt dabei die Kontinuität der Routenmaße.",
            "params": {
              "original_routes": {
                "label": "Ursprüngliche Routen",
                "description": "Referenzrouten mit zuvor kalibrierten Messwerten."
              },
              "edited_routes": {
                "label": "Bearbeitete Routen",
                "description": "Bearbeitete Routen, die neu kalibriert werden sollen."
              },
              "route_id_field": {
                "label": "Routen-ID-Feld",
                "description": "Optionales gemeinsames Routen-ID-Feld. Standardmäßig wird die FID des Objekts verwendet."
              },
              "from_measure_field": {
                "label": "Feld Von-Messwert",
                "description": "Feldname für den Messwertbeginn (Standard 'from_measure')."
              },
              "to_measure_field": {
                "label": "Feld Bis-Messwert",
                "description": "Feldname für das Messwertende (Standard 'to_measure')."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabelayer der neu kalibrierten Routen."
              }
            }
          },
          "build_network_topology": {
            "name": "Netzwerktopologie aufbauen",
            "description": "Erstellt ein knotenbasiertes topologisches Liniennetz mit stabilen Kanten- und Knotenausgaben.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Fangtoleranz, die beim Erkennen und Teilen von Kreuzungen verwendet wird."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad der topologisch genodeten Kanten."
              },
              "nodes_output": {
                "label": "Knotenausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad der Knoten."
              }
            }
          },
          "closest_facility_network": {
            "name": "Nächstgelegene Einrichtung im Netzwerk",
            "description": "Findet die kostengünstigste Netzwerkroute von jedem Ereignispunkt zum nächstgelegenen erreichbaren Einrichtungspunkt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "incidents": {
                "label": "Vorfälle",
                "description": "Punktlayer der Vorfälle/Nachfrage."
              },
              "facilities": {
                "label": "Einrichtungen",
                "description": "Punktlayer der Einrichtungen/des Angebots."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "max_snap_distance": {
                "label": "Maximale Fangdistanz",
                "description": "Optionale maximale Entfernung von Vorfall-/Einrichtungspunkten zum nächsten Netzwerkknoten."
              },
              "edge_cost_field": {
                "label": "Kantenkostenfeld",
                "description": "Optionales numerisches Linienfeld, das als Impedanzmultiplikator für die Segmentlänge verwendet wird."
              },
              "one_way_field": {
                "label": "Einbahnfeld",
                "description": "Optionales Linienfeld, das Einbahnkanten markiert (true/1/yes bedeutet nur vom ersten zum zweiten Stützpunkt)."
              },
              "blocked_field": {
                "label": "Sperrfeld",
                "description": "Optionales Linienfeld, das gesperrte/geschlossene Kanten markiert, die vom Routing ausgeschlossen werden (true/1/yes sperrt)."
              },
              "barriers": {
                "label": "Barrieren",
                "description": "Optionaler Barrieren-Punktlayer; die nächstgelegenen Netzwerkknoten werden für die Durchquerung gesperrt."
              },
              "barrier_snap_distance": {
                "label": "Barrieren-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Barrierenpunkt zu einem Netzwerkknoten für die Sperrung."
              },
              "node_cost_points": {
                "label": "Knotenkostenpunkte",
                "description": "Optionaler Punktlayer mit Eintrittskosten pro Knoten (z. B. Kreuzungsverzögerung)."
              },
              "node_cost_field": {
                "label": "Knotenkostenfeld",
                "description": "Numerisches Feld in node_cost_points mit nicht-negativen Kosten pro Knoten."
              },
              "node_cost_snap_distance": {
                "label": "Knotenkosten-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Knotenkostenpunkt zu einem Netzwerkknoten für die Zuordnung."
              },
              "turn_penalty": {
                "label": "Abbiegestrafe",
                "description": "Optionale additive Kosten, die auf nicht geradeaus führende Abbiegevorgänge an Netzwerkknoten angewendet werden."
              },
              "u_turn_penalty": {
                "label": "Wendestrafe",
                "description": "Optionale additive Kosten, die auf Wendemanöver angewendet werden."
              },
              "forbid_u_turns": {
                "label": "Wenden verbieten",
                "description": "Wenn wahr, werden Wendemanöver nicht zugelassen."
              },
              "forbid_left_turns": {
                "label": "Linksabbiegen verbieten",
                "description": "Wenn wahr, werden Linksabbiegevorgänge nicht zugelassen."
              },
              "forbid_right_turns": {
                "label": "Rechtsabbiegen verbieten",
                "description": "Wenn wahr, werden Rechtsabbiegevorgänge nicht zugelassen."
              },
              "turn_restrictions_csv": {
                "label": "Abbiegebeschränkungs-CSV",
                "description": "Optionale CSV mit Abbiegevorgängen mit den Spalten prev_x,prev_y,node_x,node_y,next_x,next_y. Optionale Spalten: forbidden (Standard wahr, wenn keine Spalte turn_cost angegeben ist) und turn_cost (oder penalty/cost/extra_cost) für additive Kosten pro Abbiegevorgang."
              },
              "temporal_cost_profile": {
                "label": "Zeitliches Kostenprofil",
                "description": "Optionale CSV, die zeitabhängige Kantenkosten definiert (Spalten: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Zeitliches Kanten-ID-Feld",
                "description": "Optionales Netzwerkfeld zum Abgleich der edge_id-Werte aus temporal_cost_profile (Standard EDGE_ID)."
              },
              "departure_time": {
                "label": "Abfahrtszeit",
                "description": "Optionale Abfahrtszeit im RFC3339-Format für die Suche im Zeitprofil."
              },
              "temporal_mode": {
                "label": "Zeitlicher Modus",
                "description": "Optionaler Modus der zeitlichen Interpretation: multiplier oder absolute."
              },
              "temporal_fallback": {
                "label": "Zeitlicher Rückfall",
                "description": "Optionales Fallback, wenn die zeitliche Zeile fehlt: static_cost oder error."
              },
              "temporal_profile_report": {
                "label": "Bericht zum zeitlichen Profil",
                "description": "Optionaler JSON-Ausgabepfad für Diagnosen des Zeitprofils (Abdeckung, nicht zugeordnete Kanten, Fallback-Nutzung)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad der Routenlinien zur nächsten Einrichtung."
              }
            }
          },
          "generate_network_nodes": {
            "name": "Netzwerkknoten erzeugen",
            "description": "Erzeugt Netzwerkknoten und Knotendiagnosen aus der Topologie der Linien.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad der Knotenpunkte."
              }
            }
          },
          "k_shortest_paths_network": {
            "name": "K kürzeste Wege im Netzwerk",
            "description": "Findet die k kürzesten einfachen Pfade zwischen Start- und Endkoordinaten in einem Liniennetz.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "start_x": {
                "label": "Start X",
                "description": "X-Koordinate des Startpunkts."
              },
              "start_y": {
                "label": "Start Y",
                "description": "Y-Koordinate des Startpunkts."
              },
              "end_x": {
                "label": "Ende X",
                "description": "X-Koordinate des Endpunkts."
              },
              "end_y": {
                "label": "Ende Y",
                "description": "Y-Koordinate des Endpunkts."
              },
              "k": {
                "label": "K",
                "description": "Anzahl der zurückzugebenden kürzesten Wege."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "max_snap_distance": {
                "label": "Maximale Fangdistanz",
                "description": "Optionale maximale Entfernung von den Start-/Endkoordinaten zum nächsten Netzwerkknoten."
              },
              "edge_cost_field": {
                "label": "Kantenkostenfeld",
                "description": "Optionales numerisches Linienfeld, das als Impedanzmultiplikator für die Segmentlänge verwendet wird."
              },
              "one_way_field": {
                "label": "Einbahnfeld",
                "description": "Optionales Linienfeld, das Einbahnkanten markiert (true/1/yes bedeutet nur vom ersten zum zweiten Stützpunkt)."
              },
              "blocked_field": {
                "label": "Sperrfeld",
                "description": "Optionales Linienfeld, das gesperrte/geschlossene Kanten markiert, die vom Routing ausgeschlossen werden (true/1/yes sperrt)."
              },
              "barriers": {
                "label": "Barrieren",
                "description": "Optionaler Barrieren-Punktlayer; die nächstgelegenen Netzwerkknoten werden für die Durchquerung gesperrt."
              },
              "barrier_snap_distance": {
                "label": "Barrieren-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Barrierenpunkt zu einem Netzwerkknoten für die Sperrung."
              },
              "node_cost_points": {
                "label": "Knotenkostenpunkte",
                "description": "Optionaler Punktlayer mit Eintrittskosten pro Knoten (z. B. Kreuzungsverzögerung)."
              },
              "node_cost_field": {
                "label": "Knotenkostenfeld",
                "description": "Numerisches Feld in node_cost_points mit nicht-negativen Kosten pro Knoten."
              },
              "node_cost_snap_distance": {
                "label": "Knotenkosten-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Knotenkostenpunkt zu einem Netzwerkknoten für die Zuordnung."
              },
              "turn_penalty": {
                "label": "Abbiegestrafe",
                "description": "Optionale additive Kosten, die auf nicht geradeaus führende Abbiegevorgänge an Netzwerkknoten angewendet werden."
              },
              "u_turn_penalty": {
                "label": "Wendestrafe",
                "description": "Optionale additive Kosten, die auf Wendemanöver angewendet werden."
              },
              "forbid_u_turns": {
                "label": "Wenden verbieten",
                "description": "Wenn wahr, werden Wendemanöver nicht zugelassen."
              },
              "forbid_left_turns": {
                "label": "Linksabbiegen verbieten",
                "description": "Wenn wahr, werden Linksabbiegevorgänge nicht zugelassen."
              },
              "forbid_right_turns": {
                "label": "Rechtsabbiegen verbieten",
                "description": "Wenn wahr, werden Rechtsabbiegevorgänge nicht zugelassen."
              },
              "turn_restrictions_csv": {
                "label": "Abbiegebeschränkungs-CSV",
                "description": "Optionale CSV mit Abbiegevorgängen mit den Spalten prev_x,prev_y,node_x,node_y,next_x,next_y. Optionale Spalten: forbidden (Standard wahr, wenn keine Spalte turn_cost angegeben ist) und turn_cost (oder penalty/cost/extra_cost) für additive Kosten pro Abbiegevorgang."
              },
              "temporal_cost_profile": {
                "label": "Zeitliches Kostenprofil",
                "description": "Optionale CSV, die zeitabhängige Kantenkosten definiert (Spalten: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Zeitliches Kanten-ID-Feld",
                "description": "Optionales Netzwerkfeld zum Abgleich der edge_id-Werte aus temporal_cost_profile (Standard EDGE_ID)."
              },
              "departure_time": {
                "label": "Abfahrtszeit",
                "description": "Optionale Abfahrtszeit im RFC3339-Format für die Suche im Zeitprofil."
              },
              "temporal_mode": {
                "label": "Zeitlicher Modus",
                "description": "Optionaler Modus der zeitlichen Interpretation: multiplier oder absolute."
              },
              "temporal_fallback": {
                "label": "Zeitlicher Rückfall",
                "description": "Optionales Fallback, wenn die zeitliche Zeile fehlt: static_cost oder error."
              },
              "temporal_profile_report": {
                "label": "Bericht zum zeitlichen Profil",
                "description": "Optionaler JSON-Ausgabepfad für Diagnosen des Zeitprofils (Abdeckung, nicht zugeordnete Kanten, Fallback-Nutzung)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienvektorpfad."
              }
            }
          },
          "location_allocation_network": {
            "name": "Standort-Zuordnung im Netzwerk",
            "description": "Wählt k Einrichtungen aus und ordnet ihnen Nachfragepunkte nach Netzwerkkosten zu, mit gieriger oder exakter Lösung, optionalen Kapazitäten und Bedingungen für erforderliche/ausgeschlossene Kandidaten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "demand_points": {
                "label": "Nachfragepunkte",
                "description": "Zuzuordnender Nachfrage-Punktlayer."
              },
              "facilities": {
                "label": "Einrichtungen",
                "description": "Punktlayer der Einrichtungskandidaten."
              },
              "facility_count": {
                "label": "Anzahl Einrichtungen",
                "description": "Anzahl der auszuwählenden Einrichtungen (k)."
              },
              "solver_mode": {
                "label": "Solver-Modus",
                "description": "Solver-Modus: auto, greedy oder exact (exact ist für kleinere Probleme vorgesehen)."
              },
              "demand_weight_field": {
                "label": "Nachfragegewichtungsfeld",
                "description": "Optionales numerisches Nachfragegewichtsfeld in demand_points (Standard weight=1)."
              },
              "facility_capacity_field": {
                "label": "Einrichtungskapazitätsfeld",
                "description": "Optionales numerisches Kapazitätsfeld in facilities; die Kapazität wird durch die Werte von demand_weight_field verbraucht."
              },
              "required_facility_field": {
                "label": "Feld erforderliche Einrichtung",
                "description": "Optionales boolesches Einrichtungsfeld, das Kandidaten markiert, die ausgewählt werden müssen."
              },
              "forbidden_facility_field": {
                "label": "Feld verbotene Einrichtung",
                "description": "Optionales boolesches Einrichtungsfeld, das Kandidaten markiert, die nicht ausgewählt werden dürfen."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "max_snap_distance": {
                "label": "Maximale Fangdistanz",
                "description": "Optionale maximale Entfernung von Nachfrage-/Einrichtungspunkten zum nächsten Netzwerkknoten."
              },
              "edge_cost_field": {
                "label": "Kantenkostenfeld",
                "description": "Optionales numerisches Linienfeld, das als Impedanzmultiplikator für die Segmentlänge verwendet wird."
              },
              "one_way_field": {
                "label": "Einbahnfeld",
                "description": "Optionales Linienfeld, das Einbahnkanten markiert (true/1/yes bedeutet nur vom ersten zum zweiten Stützpunkt)."
              },
              "blocked_field": {
                "label": "Sperrfeld",
                "description": "Optionales Linienfeld, das gesperrte/geschlossene Kanten markiert, die vom Routing ausgeschlossen werden (true/1/yes sperrt)."
              },
              "barriers": {
                "label": "Barrieren",
                "description": "Optionaler Barrieren-Punktlayer; die nächstgelegenen Netzwerkknoten werden für die Durchquerung gesperrt."
              },
              "barrier_snap_distance": {
                "label": "Barrieren-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Barrierenpunkt zu einem Netzwerkknoten für die Sperrung."
              },
              "node_cost_points": {
                "label": "Knotenkostenpunkte",
                "description": "Optionaler Punktlayer mit Eintrittskosten pro Knoten (z. B. Kreuzungsverzögerung)."
              },
              "node_cost_field": {
                "label": "Knotenkostenfeld",
                "description": "Numerisches Feld in node_cost_points mit nicht-negativen Kosten pro Knoten."
              },
              "node_cost_snap_distance": {
                "label": "Knotenkosten-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Knotenkostenpunkt zu einem Netzwerkknoten für die Zuordnung."
              },
              "turn_penalty": {
                "label": "Abbiegestrafe",
                "description": "Optionale additive Kosten, die auf nicht geradeaus führende Abbiegevorgänge an Netzwerkknoten angewendet werden."
              },
              "u_turn_penalty": {
                "label": "Wendestrafe",
                "description": "Optionale additive Kosten, die auf Wendemanöver angewendet werden."
              },
              "forbid_u_turns": {
                "label": "Wenden verbieten",
                "description": "Wenn wahr, werden Wendemanöver nicht zugelassen."
              },
              "forbid_left_turns": {
                "label": "Linksabbiegen verbieten",
                "description": "Wenn wahr, werden Linksabbiegevorgänge nicht zugelassen."
              },
              "forbid_right_turns": {
                "label": "Rechtsabbiegen verbieten",
                "description": "Wenn wahr, werden Rechtsabbiegevorgänge nicht zugelassen."
              },
              "turn_restrictions_csv": {
                "label": "Abbiegebeschränkungs-CSV",
                "description": "Optionale CSV mit Abbiegevorgängen mit den Spalten prev_x,prev_y,node_x,node_y,next_x,next_y. Optionale Spalten: forbidden (Standard wahr, wenn keine Spalte turn_cost angegeben ist) und turn_cost (oder penalty/cost/extra_cost) für additive Kosten pro Abbiegevorgang."
              },
              "temporal_cost_profile": {
                "label": "Zeitliches Kostenprofil",
                "description": "Optionale CSV, die zeitabhängige Kantenkosten definiert (Spalten: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Zeitliches Kanten-ID-Feld",
                "description": "Optionales Netzwerkfeld zum Abgleich der edge_id-Werte aus temporal_cost_profile (Standard EDGE_ID)."
              },
              "departure_time": {
                "label": "Abfahrtszeit",
                "description": "Optionale Abfahrtszeit im RFC3339-Format für die Suche im Zeitprofil."
              },
              "temporal_mode": {
                "label": "Zeitlicher Modus",
                "description": "Optionaler Modus der zeitlichen Interpretation: multiplier oder absolute."
              },
              "temporal_fallback": {
                "label": "Zeitlicher Rückfall",
                "description": "Optionales Fallback, wenn die zeitliche Zeile fehlt: static_cost oder error."
              },
              "temporal_profile_report": {
                "label": "Bericht zum zeitlichen Profil",
                "description": "Optionaler JSON-Ausgabepfad für Diagnosen des Zeitprofils (Abdeckung, nicht zugeordnete Kanten, Fallback-Nutzung)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad der zugeordneten Routenlinien."
              }
            }
          },
          "map_matching_v1": {
            "name": "Map Matching v1",
            "description": "Fängt Trajektorienpunkte auf ein Liniennetz und rekonstruiert eine abgeleitete Route mit Diagnosen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "trajectory_points": {
                "label": "Trajektorienpunkte",
                "description": "Eingabe-Trajektorien-Punktlayer."
              },
              "timestamp_field": {
                "label": "Zeitstempelfeld",
                "description": "Trajektorienfeld für die zeitliche Sortierung."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Optionaler Suchradius für Kandidaten um jeden Trajektorienpunkt."
              },
              "candidate_k": {
                "label": "Kandidaten-K",
                "description": "Optionale Anzahl der pro Punkt beibehaltenen nächsten Kandidaten."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "max_snap_distance": {
                "label": "Maximale Fangdistanz",
                "description": "Optionale maximale Entfernung zum Fangen von Trajektorienpunkten an Netzwerkknoten."
              },
              "edge_cost_field": {
                "label": "Kantenkostenfeld",
                "description": "Optionales numerisches Linienfeld, das als Impedanzmultiplikator für die Segmentlänge verwendet wird."
              },
              "one_way_field": {
                "label": "Einbahnfeld",
                "description": "Optionales Linienfeld, das Einbahnkanten markiert (unterstützt FT/TF/B sowie ältere boolesche Werte)."
              },
              "blocked_field": {
                "label": "Sperrfeld",
                "description": "Optionales Linienfeld, das gesperrte/geschlossene Kanten markiert, die vom Routing ausgeschlossen werden (true/1/yes sperrt)."
              },
              "barriers": {
                "label": "Barrieren",
                "description": "Optionaler Barrieren-Punktlayer; die nächstgelegenen Netzwerkknoten werden für die Durchquerung gesperrt."
              },
              "barrier_snap_distance": {
                "label": "Barrieren-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Barrierenpunkt zu einem Netzwerkknoten für die Sperrung."
              },
              "node_cost_points": {
                "label": "Knotenkostenpunkte",
                "description": "Optionaler Punktlayer mit Eintrittskosten pro Knoten (z. B. Kreuzungsverzögerung)."
              },
              "node_cost_field": {
                "label": "Knotenkostenfeld",
                "description": "Numerisches Feld in node_cost_points mit nicht-negativen Kosten pro Knoten."
              },
              "node_cost_snap_distance": {
                "label": "Knotenkosten-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Knotenkostenpunkt zu einem Netzwerkknoten für die Zuordnung."
              },
              "turn_penalty": {
                "label": "Abbiegestrafe",
                "description": "Optionale additive Kosten, die auf nicht geradeaus führende Abbiegevorgänge an Netzwerkknoten angewendet werden."
              },
              "u_turn_penalty": {
                "label": "Wendestrafe",
                "description": "Optionale additive Kosten, die auf Wendemanöver angewendet werden."
              },
              "forbid_u_turns": {
                "label": "Wenden verbieten",
                "description": "Wenn wahr, werden Wendemanöver nicht zugelassen."
              },
              "forbid_left_turns": {
                "label": "Linksabbiegen verbieten",
                "description": "Wenn wahr, werden Linksabbiegevorgänge nicht zugelassen."
              },
              "forbid_right_turns": {
                "label": "Rechtsabbiegen verbieten",
                "description": "Wenn wahr, werden Rechtsabbiegevorgänge nicht zugelassen."
              },
              "turn_restrictions_csv": {
                "label": "Abbiegebeschränkungs-CSV",
                "description": "Optionale CSV mit Abbiegevorgängen mit den Spalten prev_x,prev_y,node_x,node_y,next_x,next_y. Optionale Spalten: forbidden (Standard wahr, wenn keine Spalte turn_cost angegeben ist) und turn_cost (oder penalty/cost/extra_cost) für additive Kosten pro Abbiegevorgang."
              },
              "matched_points_output": {
                "label": "Ausgabe zugeordnete Punkte",
                "description": "Optionaler Ausgabe-Vektorpfad für Diagnosen pro Punkt."
              },
              "match_report": {
                "label": "Zuordnungsbericht",
                "description": "Optionaler JSON-Ausgabepfad für die zusammenfassende Diagnose."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienvektorpfad für die abgeleitete Route."
              }
            }
          },
          "multimodal_od_cost_matrix": {
            "name": "Multimodale OD-Kostenmatrix",
            "description": "Berechnet stapelweise multimodale OD-Kosten und Zusammenfassungen der Verkehrsmittel zwischen Ursprungs- und Zielpunktmengen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "origins": {
                "label": "Startpunkte",
                "description": "Ursprungs-Punktlayer."
              },
              "destinations": {
                "label": "Ziele",
                "description": "Ziel-Punktlayer."
              },
              "mode_field": {
                "label": "Modusfeld",
                "description": "Linienattributfeld, das den Verkehrsmodus je Segment angibt."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "max_snap_distance": {
                "label": "Maximale Fangdistanz",
                "description": "Optionale maximale Entfernung von Ursprungs-/Zielpunkten zum nächsten Netzwerkknoten."
              },
              "default_mode_speed": {
                "label": "Standardgeschwindigkeit des Modus",
                "description": "Standardgeschwindigkeit des Modus in Koordinateneinheiten pro Zeiteinheit (Standard: 1)."
              },
              "mode_speed_overrides": {
                "label": "Geschwindigkeitsüberschreibungen je Modus",
                "description": "Optionale kommagetrennte Modus:Geschwindigkeit-Überschreibungen (zum Beispiel: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Erlaubte Modi",
                "description": "Optionale kommagetrennte Positivliste der im Routing einzubeziehenden Modi."
              },
              "transfer_penalty": {
                "label": "Umstiegsstrafe",
                "description": "Optionale additive Strafe, die bei jedem Moduswechsel der Route angewendet wird."
              },
              "temporal_cost_profile": {
                "label": "Zeitliches Kostenprofil",
                "description": "Optionale CSV, die zeitabhängige Kantenkosten definiert (Spalten: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Zeitliches Kanten-ID-Feld",
                "description": "Optionales Netzwerkfeld zum Abgleich der edge_id-Werte aus temporal_cost_profile (Standard EDGE_ID)."
              },
              "departure_time": {
                "label": "Abfahrtszeit",
                "description": "Optionale Abfahrtszeit im RFC3339-Format für die Suche im Zeitprofil."
              },
              "temporal_mode": {
                "label": "Zeitlicher Modus",
                "description": "Optionaler Modus der zeitlichen Interpretation: multiplier oder absolute."
              },
              "temporal_fallback": {
                "label": "Zeitlicher Rückfall",
                "description": "Optionales Fallback, wenn die zeitliche Zeile fehlt: static_cost oder error."
              },
              "temporal_profile_report": {
                "label": "Bericht zum zeitlichen Profil",
                "description": "Optionaler JSON-Ausgabepfad für Diagnosen des Zeitprofils bei direkter zeitlicher Eingabe."
              },
              "scenario_bundle_csv": {
                "label": "Szenario-Bundle-CSV",
                "description": "Optionale CSV mit benannten zeitlichen Szenarien für die vergleichende Mehrszenarien-OD-Ausgabe."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der CSV-Datei."
              }
            }
          },
          "multimodal_routes_from_od": {
            "name": "Multimodale Routen aus OD",
            "description": "Erstellt Routengeometrien für multimodale Ursprungs-Ziel-Punktpaare mit Zusammenfassungen der Verkehrsmittel je Route.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "origins": {
                "label": "Startpunkte",
                "description": "Ursprungs-Punktlayer."
              },
              "destinations": {
                "label": "Ziele",
                "description": "Ziel-Punktlayer."
              },
              "mode_field": {
                "label": "Modusfeld",
                "description": "Linienattributfeld, das den Verkehrsmodus je Segment angibt."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "max_snap_distance": {
                "label": "Maximale Fangdistanz",
                "description": "Optionale maximale Entfernung von Ursprungs-/Zielpunkten zum nächsten Netzwerkknoten."
              },
              "default_mode_speed": {
                "label": "Standardgeschwindigkeit des Modus",
                "description": "Standardgeschwindigkeit des Modus in Koordinateneinheiten pro Zeiteinheit (Standard: 1)."
              },
              "mode_speed_overrides": {
                "label": "Geschwindigkeitsüberschreibungen je Modus",
                "description": "Optionale kommagetrennte Modus:Geschwindigkeit-Überschreibungen (zum Beispiel: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Erlaubte Modi",
                "description": "Optionale kommagetrennte Positivliste der im Routing einzubeziehenden Modi."
              },
              "transfer_penalty": {
                "label": "Umstiegsstrafe",
                "description": "Optionale additive Strafe, die bei jedem Moduswechsel der Route angewendet wird."
              },
              "temporal_cost_profile": {
                "label": "Zeitliches Kostenprofil",
                "description": "Optionale CSV, die zeitabhängige Kantenkosten definiert (Spalten: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Zeitliches Kanten-ID-Feld",
                "description": "Optionales Netzwerkfeld zum Abgleich der edge_id-Werte aus temporal_cost_profile (Standard EDGE_ID)."
              },
              "departure_time": {
                "label": "Abfahrtszeit",
                "description": "Optionale Abfahrtszeit im RFC3339-Format für die Suche im Zeitprofil."
              },
              "temporal_mode": {
                "label": "Zeitlicher Modus",
                "description": "Optionaler Modus der zeitlichen Interpretation: multiplier oder absolute."
              },
              "temporal_fallback": {
                "label": "Zeitlicher Rückfall",
                "description": "Optionales Fallback, wenn die zeitliche Zeile fehlt: static_cost oder error."
              },
              "temporal_profile_report": {
                "label": "Bericht zum zeitlichen Profil",
                "description": "Optionaler JSON-Ausgabepfad für Diagnosen des Zeitprofils bei direkter zeitlicher Eingabe."
              },
              "scenario_bundle_csv": {
                "label": "Szenario-Bundle-CSV",
                "description": "Optionale CSV mit benannten zeitlichen Szenarien für die vergleichende Mehrszenarien-Routenausgabe."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad der Routenlinien."
              }
            }
          },
          "multimodal_shortest_path": {
            "name": "Multimodaler kürzester Weg",
            "description": "Findet einen verkehrsmittelbewussten kürzesten Pfad in einem Liniennetz mit einstellbaren Umstiegsstrafen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "start_x": {
                "label": "Start X",
                "description": "X-Koordinate des Startpunkts."
              },
              "start_y": {
                "label": "Start Y",
                "description": "Y-Koordinate des Startpunkts."
              },
              "end_x": {
                "label": "Ende X",
                "description": "X-Koordinate des Endpunkts."
              },
              "end_y": {
                "label": "Ende Y",
                "description": "Y-Koordinate des Endpunkts."
              },
              "mode_field": {
                "label": "Modusfeld",
                "description": "Linienattributfeld, das den Verkehrsmodus je Segment angibt."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "max_snap_distance": {
                "label": "Maximale Fangdistanz",
                "description": "Optionale maximale Entfernung von den Start-/Endkoordinaten zum nächsten Netzwerkknoten."
              },
              "default_mode_speed": {
                "label": "Standardgeschwindigkeit des Modus",
                "description": "Standardgeschwindigkeit des Modus in Koordinateneinheiten pro Zeiteinheit (Standard: 1)."
              },
              "mode_speed_overrides": {
                "label": "Geschwindigkeitsüberschreibungen je Modus",
                "description": "Optionale kommagetrennte Modus:Geschwindigkeit-Überschreibungen (zum Beispiel: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Erlaubte Modi",
                "description": "Optionale kommagetrennte Positivliste der im Routing einzubeziehenden Modi."
              },
              "transfer_penalty": {
                "label": "Umstiegsstrafe",
                "description": "Optionale additive Strafe, die bei jedem Moduswechsel der Route angewendet wird."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienvektorpfad."
              }
            }
          },
          "network_accessibility_metrics": {
            "name": "Erreichbarkeitskennzahlen des Netzwerks",
            "description": "Berechnet Erreichbarkeitsindizes für Ursprungspunkte anhand der Erreichbarkeit von Zielen mit optionalen Widerstandsgrenzen und Abklingfunktionen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "origins": {
                "label": "Startpunkte",
                "description": "Ursprungs-Punktlayer."
              },
              "destinations": {
                "label": "Ziele",
                "description": "Ziel-Punktlayer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "max_snap_distance": {
                "label": "Maximale Fangdistanz",
                "description": "Optionale maximale Entfernung von Ursprungs-/Zielpunkten zum nächsten Netzwerkknoten."
              },
              "impedance_cutoff": {
                "label": "Impedanzgrenze",
                "description": "Optionaler maximaler Entfernungsschwellenwert für die Zählung erreichbarer Ziele (Standard: unendlich)."
              },
              "decay_function": {
                "label": "Abklingfunktion",
                "description": "Optionale Abklingfunktion: 'none' (Standard), 'linear' oder 'exponential' für entfernungsgewichtete Erreichbarkeit."
              },
              "decay_parameter": {
                "label": "Abklingparameter",
                "description": "Optionaler Abklingparameter (Lambda für exponential, Rate für linear)."
              },
              "edge_cost_field": {
                "label": "Kantenkostenfeld",
                "description": "Optionales numerisches Linienfeld, das als Impedanzmultiplikator für die Segmentlänge verwendet wird."
              },
              "one_way_field": {
                "label": "Einbahnfeld",
                "description": "Optionales Linienfeld, das Einbahnkanten markiert (unterstützt FT/TF/B sowie ältere boolesche Werte)."
              },
              "blocked_field": {
                "label": "Sperrfeld",
                "description": "Optionales Linienfeld, das gesperrte/geschlossene Kanten markiert, die vom Routing ausgeschlossen werden (true/1/yes sperrt)."
              },
              "node_cost_points": {
                "label": "Knotenkostenpunkte",
                "description": "Optionaler Punktlayer mit Eintrittskosten pro Knoten (z. B. Kreuzungsverzögerung)."
              },
              "node_cost_field": {
                "label": "Knotenkostenfeld",
                "description": "Numerisches Feld in node_cost_points mit nicht-negativen Kosten pro Knoten."
              },
              "node_cost_snap_distance": {
                "label": "Knotenkosten-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Knotenkostenpunkt zu einem Netzwerkknoten für die Zuordnung."
              },
              "parallel_execution": {
                "label": "Parallele Ausführung",
                "description": "Wenn wahr (Standard), werden die Ursprünge für eine schnellere Erreichbarkeitsberechnung parallel ausgewertet."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad (Ursprünge mit Erreichbarkeitskennzahlen)."
              }
            }
          },
          "network_centrality_metrics": {
            "name": "Zentralitätskennzahlen des Netzwerks",
            "description": "Berechnet grundlegende Zentralitätskennzahlen (Grad, Nähe und Zwischenzentralität) für Netzwerkknoten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "edge_cost_field": {
                "label": "Kantenkostenfeld",
                "description": "Optionales numerisches Linienfeld, das als Impedanzmultiplikator für die Segmentlänge verwendet wird."
              },
              "one_way_field": {
                "label": "Einbahnfeld",
                "description": "Optionales Linienfeld, das Einbahnkanten markiert (unterstützt FT/TF/B sowie ältere boolesche Werte)."
              },
              "blocked_field": {
                "label": "Sperrfeld",
                "description": "Optionales Linienfeld, das gesperrte/geschlossene Kanten markiert, die vom Graphaufbau ausgeschlossen werden (true/1/yes sperrt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad."
              }
            }
          },
          "network_connected_components": {
            "name": "Zusammenhangskomponenten des Netzwerks",
            "description": "Weist jedem Linienobjekt in einem Netzwerk eine ID der zusammenhängenden Komponente zu.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienvektorpfad."
              }
            }
          },
          "network_node_degree": {
            "name": "Knotengrad im Netzwerk",
            "description": "Extrahiert Netzwerkknoten aus Linienobjekten und berechnet Knotengrad und Knotentyp.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad."
              }
            }
          },
          "network_od_cost_matrix": {
            "name": "OD-Kostenmatrix des Netzwerks",
            "description": "Berechnet Kosten kürzester Pfade zwischen Ursprüngen und Zielen in einem Liniennetz und schreibt eine CSV-Matrix.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "origins": {
                "label": "Startpunkte",
                "description": "Ursprungs-Punktlayer."
              },
              "destinations": {
                "label": "Ziele",
                "description": "Ziel-Punktlayer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "max_snap_distance": {
                "label": "Maximale Fangdistanz",
                "description": "Optionale maximale Entfernung von Ursprungs-/Zielpunkten zum nächsten Netzwerkknoten."
              },
              "edge_cost_field": {
                "label": "Kantenkostenfeld",
                "description": "Optionales numerisches Linienfeld, das als Impedanzmultiplikator für die Segmentlänge verwendet wird."
              },
              "one_way_field": {
                "label": "Einbahnfeld",
                "description": "Optionales Linienfeld, das Einbahnkanten markiert (unterstützt FT/TF/B sowie ältere boolesche Werte)."
              },
              "blocked_field": {
                "label": "Sperrfeld",
                "description": "Optionales Linienfeld, das gesperrte/geschlossene Kanten markiert, die vom Routing ausgeschlossen werden (true/1/yes sperrt)."
              },
              "barriers": {
                "label": "Barrieren",
                "description": "Optionaler Barrieren-Punktlayer; die nächstgelegenen Netzwerkknoten werden für die Durchquerung gesperrt."
              },
              "barrier_snap_distance": {
                "label": "Barrieren-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Barrierenpunkt zu einem Netzwerkknoten für die Sperrung."
              },
              "node_cost_points": {
                "label": "Knotenkostenpunkte",
                "description": "Optionaler Punktlayer mit Eintrittskosten pro Knoten (z. B. Kreuzungsverzögerung)."
              },
              "node_cost_field": {
                "label": "Knotenkostenfeld",
                "description": "Numerisches Feld in node_cost_points mit nicht-negativen Kosten pro Knoten."
              },
              "node_cost_snap_distance": {
                "label": "Knotenkosten-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Knotenkostenpunkt zu einem Netzwerkknoten für die Zuordnung."
              },
              "turn_penalty": {
                "label": "Abbiegestrafe",
                "description": "Optionale additive Kosten, die auf nicht geradeaus führende Abbiegevorgänge an Netzwerkknoten angewendet werden."
              },
              "u_turn_penalty": {
                "label": "Wendestrafe",
                "description": "Optionale additive Kosten, die auf Wendemanöver angewendet werden."
              },
              "forbid_u_turns": {
                "label": "Wenden verbieten",
                "description": "Wenn wahr, werden Wendemanöver nicht zugelassen."
              },
              "forbid_left_turns": {
                "label": "Linksabbiegen verbieten",
                "description": "Wenn wahr, werden Linksabbiegevorgänge nicht zugelassen."
              },
              "forbid_right_turns": {
                "label": "Rechtsabbiegen verbieten",
                "description": "Wenn wahr, werden Rechtsabbiegevorgänge nicht zugelassen."
              },
              "turn_restrictions_csv": {
                "label": "Abbiegebeschränkungs-CSV",
                "description": "Optionale CSV mit Abbiegevorgängen mit den Spalten prev_x,prev_y,node_x,node_y,next_x,next_y. Optionale Spalten: forbidden (Standard wahr, wenn keine Spalte turn_cost angegeben ist) und turn_cost (oder penalty/cost/extra_cost) für additive Kosten pro Abbiegevorgang."
              },
              "temporal_cost_profile": {
                "label": "Zeitliches Kostenprofil",
                "description": "Optionale CSV, die zeitabhängige Kantenkosten definiert (Spalten: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Zeitliches Kanten-ID-Feld",
                "description": "Optionales Netzwerkfeld zum Abgleich der edge_id-Werte aus temporal_cost_profile (Standard EDGE_ID)."
              },
              "departure_time": {
                "label": "Abfahrtszeit",
                "description": "Optionale Abfahrtszeit im RFC3339-Format für die Suche im Zeitprofil."
              },
              "temporal_mode": {
                "label": "Zeitlicher Modus",
                "description": "Optionaler Modus der zeitlichen Interpretation: multiplier oder absolute."
              },
              "temporal_fallback": {
                "label": "Zeitlicher Rückfall",
                "description": "Optionales Fallback, wenn die zeitliche Zeile fehlt: static_cost oder error."
              },
              "temporal_profile_report": {
                "label": "Bericht zum zeitlichen Profil",
                "description": "Optionaler JSON-Ausgabepfad für Diagnosen des Zeitprofils (Abdeckung, nicht zugeordnete Kanten, Fallback-Nutzung)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der CSV-Datei."
              }
            }
          },
          "network_routes_from_od": {
            "name": "Netzwerkrouten aus OD",
            "description": "Erstellt Routengeometrien für Ursprungs-Ziel-Punktpaare in einem Liniennetz.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "origins": {
                "label": "Startpunkte",
                "description": "Ursprungs-Punktlayer."
              },
              "destinations": {
                "label": "Ziele",
                "description": "Ziel-Punktlayer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "max_snap_distance": {
                "label": "Maximale Fangdistanz",
                "description": "Optionale maximale Entfernung von Ursprungs-/Zielpunkten zum nächsten Netzwerkknoten."
              },
              "edge_cost_field": {
                "label": "Kantenkostenfeld",
                "description": "Optionales numerisches Linienfeld, das als Impedanzmultiplikator für die Segmentlänge verwendet wird."
              },
              "one_way_field": {
                "label": "Einbahnfeld",
                "description": "Optionales Linienfeld, das Einbahnkanten markiert (unterstützt FT/TF/B sowie ältere boolesche Werte)."
              },
              "blocked_field": {
                "label": "Sperrfeld",
                "description": "Optionales Linienfeld, das gesperrte/geschlossene Kanten markiert, die vom Routing ausgeschlossen werden (true/1/yes sperrt)."
              },
              "barriers": {
                "label": "Barrieren",
                "description": "Optionaler Barrieren-Punktlayer; die nächstgelegenen Netzwerkknoten werden für die Durchquerung gesperrt."
              },
              "barrier_snap_distance": {
                "label": "Barrieren-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Barrierenpunkt zu einem Netzwerkknoten für die Sperrung."
              },
              "node_cost_points": {
                "label": "Knotenkostenpunkte",
                "description": "Optionaler Punktlayer mit Eintrittskosten pro Knoten (z. B. Kreuzungsverzögerung)."
              },
              "node_cost_field": {
                "label": "Knotenkostenfeld",
                "description": "Numerisches Feld in node_cost_points mit nicht-negativen Kosten pro Knoten."
              },
              "node_cost_snap_distance": {
                "label": "Knotenkosten-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Knotenkostenpunkt zu einem Netzwerkknoten für die Zuordnung."
              },
              "turn_penalty": {
                "label": "Abbiegestrafe",
                "description": "Optionale additive Kosten, die auf nicht geradeaus führende Abbiegevorgänge an Netzwerkknoten angewendet werden."
              },
              "u_turn_penalty": {
                "label": "Wendestrafe",
                "description": "Optionale additive Kosten, die auf Wendemanöver angewendet werden."
              },
              "forbid_u_turns": {
                "label": "Wenden verbieten",
                "description": "Wenn wahr, werden Wendemanöver nicht zugelassen."
              },
              "forbid_left_turns": {
                "label": "Linksabbiegen verbieten",
                "description": "Wenn wahr, werden Linksabbiegevorgänge nicht zugelassen."
              },
              "forbid_right_turns": {
                "label": "Rechtsabbiegen verbieten",
                "description": "Wenn wahr, werden Rechtsabbiegevorgänge nicht zugelassen."
              },
              "turn_restrictions_csv": {
                "label": "Abbiegebeschränkungs-CSV",
                "description": "Optionale CSV mit Abbiegevorgängen mit den Spalten prev_x,prev_y,node_x,node_y,next_x,next_y. Optionale Spalten: forbidden (Standard wahr, wenn keine Spalte turn_cost angegeben ist) und turn_cost (oder penalty/cost/extra_cost) für additive Kosten pro Abbiegevorgang."
              },
              "temporal_cost_profile": {
                "label": "Zeitliches Kostenprofil",
                "description": "Optionale CSV, die zeitabhängige Kantenkosten definiert (Spalten: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Zeitliches Kanten-ID-Feld",
                "description": "Optionales Netzwerkfeld zum Abgleich der edge_id-Werte aus temporal_cost_profile (Standard EDGE_ID)."
              },
              "departure_time": {
                "label": "Abfahrtszeit",
                "description": "Optionale Abfahrtszeit im RFC3339-Format für die Suche im Zeitprofil."
              },
              "temporal_mode": {
                "label": "Zeitlicher Modus",
                "description": "Optionaler Modus der zeitlichen Interpretation: multiplier oder absolute."
              },
              "temporal_fallback": {
                "label": "Zeitlicher Rückfall",
                "description": "Optionales Fallback, wenn die zeitliche Zeile fehlt: static_cost oder error."
              },
              "temporal_profile_report": {
                "label": "Bericht zum zeitlichen Profil",
                "description": "Optionaler JSON-Ausgabepfad für Diagnosen des Zeitprofils (Abdeckung, nicht zugeordnete Kanten, Fallback-Nutzung)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad der Routenlinien."
              }
            }
          },
          "network_service_area": {
            "name": "Einzugsbereich im Netzwerk",
            "description": "Berechnet die von Ursprungspunkten aus innerhalb maximaler Netzwerkkosten erreichbaren Netzwerkknoten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "origins": {
                "label": "Startpunkte",
                "description": "Ursprungs-Punktlayer."
              },
              "max_cost": {
                "label": "Maximale Kosten",
                "description": "Maximale erreichbare Wegkosten."
              },
              "ring_costs": {
                "label": "Ringkosten",
                "description": "Optionale kommagetrennte Ringschwellenwerte für Mehrring-Ausgaben (zum Beispiel: 5,10,15)."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "max_snap_distance": {
                "label": "Maximale Fangdistanz",
                "description": "Optionale maximale Entfernung von Ursprungspunkten zum nächsten Netzwerkknoten."
              },
              "output_mode": {
                "label": "Ausgabemodus",
                "description": "Ausgabemodus: 'nodes' (Standard), 'edges' für kostenbeschnittene erreichbare Kantensegmente oder 'polygons' für isochronenartige Polygone je Ursprung aus den Hüllen der erreichbaren Kanten."
              },
              "polygon_merge_origins": {
                "label": "Polygone nach Startpunkten zusammenführen",
                "description": "Wenn wahr und output_mode='polygons', werden überlappende Ursprungspolygone je Ring zu einer zusammengeführten Abdeckung vereinigt, statt ein Polygon pro Ursprung auszugeben."
              },
              "mode_field": {
                "label": "Modusfeld",
                "description": "Optionales Linienattributfeld, das den Verkehrsmodus je Segment angibt; ermöglicht modusabhängige Einzugsbereichskosten."
              },
              "default_mode_speed": {
                "label": "Standardgeschwindigkeit des Modus",
                "description": "Standardgeschwindigkeit des Modus in Koordinateneinheiten pro Zeiteinheit, wenn mode_field angegeben ist (Standard: 1)."
              },
              "mode_speed_overrides": {
                "label": "Geschwindigkeitsüberschreibungen je Modus",
                "description": "Optionale kommagetrennte Modus:Geschwindigkeit-Überschreibungen (zum Beispiel: walk:1.4,drive:12)."
              },
              "allowed_modes": {
                "label": "Erlaubte Modi",
                "description": "Optionale kommagetrennte Positivliste der einzubeziehenden Modi, wenn mode_field angegeben ist."
              },
              "edge_cost_field": {
                "label": "Kantenkostenfeld",
                "description": "Optionales numerisches Linienfeld, das als Impedanzmultiplikator für die Segmentlänge verwendet wird."
              },
              "one_way_field": {
                "label": "Einbahnfeld",
                "description": "Optionales Linienfeld, das Einbahnkanten markiert (unterstützt FT/TF/B sowie ältere boolesche Werte)."
              },
              "blocked_field": {
                "label": "Sperrfeld",
                "description": "Optionales Linienfeld, das gesperrte/geschlossene Kanten markiert, die vom Routing ausgeschlossen werden (true/1/yes sperrt)."
              },
              "barriers": {
                "label": "Barrieren",
                "description": "Optionaler Barrieren-Punktlayer; die nächstgelegenen Netzwerkknoten werden für die Durchquerung gesperrt."
              },
              "barrier_snap_distance": {
                "label": "Barrieren-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Barrierenpunkt zu einem Netzwerkknoten für die Sperrung."
              },
              "node_cost_points": {
                "label": "Knotenkostenpunkte",
                "description": "Optionaler Punktlayer mit Eintrittskosten pro Knoten (z. B. Kreuzungsverzögerung)."
              },
              "node_cost_field": {
                "label": "Knotenkostenfeld",
                "description": "Numerisches Feld in node_cost_points mit nicht-negativen Kosten pro Knoten."
              },
              "node_cost_snap_distance": {
                "label": "Knotenkosten-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Knotenkostenpunkt zu einem Netzwerkknoten für die Zuordnung."
              },
              "turn_penalty": {
                "label": "Abbiegestrafe",
                "description": "Optionale additive Kosten, die auf nicht geradeaus führende Abbiegevorgänge an Netzwerkknoten angewendet werden."
              },
              "u_turn_penalty": {
                "label": "Wendestrafe",
                "description": "Optionale additive Kosten, die auf Wendemanöver angewendet werden."
              },
              "forbid_u_turns": {
                "label": "Wenden verbieten",
                "description": "Wenn wahr, werden Wendemanöver nicht zugelassen."
              },
              "forbid_left_turns": {
                "label": "Linksabbiegen verbieten",
                "description": "Wenn wahr, werden Linksabbiegevorgänge nicht zugelassen."
              },
              "forbid_right_turns": {
                "label": "Rechtsabbiegen verbieten",
                "description": "Wenn wahr, werden Rechtsabbiegevorgänge nicht zugelassen."
              },
              "turn_restrictions_csv": {
                "label": "Abbiegebeschränkungs-CSV",
                "description": "Optionale CSV mit Abbiegevorgängen mit den Spalten prev_x,prev_y,node_x,node_y,next_x,next_y. Optionale Spalten: forbidden (Standard wahr, wenn keine Spalte turn_cost angegeben ist) und turn_cost (oder penalty/cost/extra_cost) für additive Kosten pro Abbiegevorgang."
              },
              "temporal_cost_profile": {
                "label": "Zeitliches Kostenprofil",
                "description": "Optionale CSV, die zeitabhängige Kantenkosten definiert (Spalten: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Zeitliches Kanten-ID-Feld",
                "description": "Optionales Netzwerkfeld zum Abgleich der edge_id-Werte aus temporal_cost_profile (Standard EDGE_ID)."
              },
              "departure_time": {
                "label": "Abfahrtszeit",
                "description": "Optionale Abfahrtszeit im RFC3339-Format für die Suche im Zeitprofil."
              },
              "temporal_mode": {
                "label": "Zeitlicher Modus",
                "description": "Optionaler Modus der zeitlichen Interpretation: multiplier oder absolute."
              },
              "temporal_fallback": {
                "label": "Zeitlicher Rückfall",
                "description": "Optionales Fallback, wenn die zeitliche Zeile fehlt: static_cost oder error."
              },
              "temporal_profile_report": {
                "label": "Bericht zum zeitlichen Profil",
                "description": "Optionaler JSON-Ausgabepfad für Diagnosen des Zeitprofils (Abdeckung, nicht zugeordnete Kanten, Fallback-Nutzung)."
              },
              "snapped_origins_output": {
                "label": "Ausgabe gefangene Startpunkte",
                "description": "Optionaler Ausgabe-Vektorpfad für die intern gefangenen Ursprungs-Ankerpunkte, die als Startpunkte der Durchquerung dienen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad des Einzugsbereichs."
              }
            }
          },
          "network_topology_audit": {
            "name": "Prüfung der Netzwerktopologie",
            "description": "Prüft ein Liniennetz auf Topologieanomalien – nicht verbundene Komponenten, Sackgassen und Gradanomalien –, die zu Routingfehlern führen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "one_way_field": {
                "label": "Einbahnfeld",
                "description": "Optionales Linienfeld, das Einbahnkanten markiert (unterstützt FT/TF/B sowie ältere boolesche Werte)."
              },
              "blocked_field": {
                "label": "Sperrfeld",
                "description": "Optionales Linienfeld, das gesperrte Kanten markiert, die von der Analyse ausgeschlossen werden."
              },
              "report": {
                "label": "Bericht",
                "description": "Optionaler JSON-Ausgabepfad für den zusammenfassenden Prüfbericht."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad für Diagnosen pro Knoten."
              }
            }
          },
          "od_sensitivity_analysis": {
            "name": "OD-Sensitivitätsanalyse",
            "description": "Berechnet OD-Kosten kürzester Pfade mit Widerstandsstörungen und gibt per Monte-Carlo-Stichproben Sensitivitätsstatistiken aus.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "origins": {
                "label": "Startpunkte",
                "description": "Ursprungs-Punktlayer."
              },
              "destinations": {
                "label": "Ziele",
                "description": "Ziel-Punktlayer."
              },
              "edge_cost_field": {
                "label": "Kantenkostenfeld",
                "description": "Erforderliches numerisches Linienfeld, das als Impedanzmultiplikator für die Störungsanalyse verwendet wird."
              },
              "impedance_disturbance_range": {
                "label": "Impedanz-Störungsbereich",
                "description": "Bereich der Kostenstörung als 'min_factor,max_factor' (z. B. '0.8,1.2' für ±20 % Variation)."
              },
              "monte_carlo_samples": {
                "label": "Monte-Carlo-Stichproben",
                "description": "Anzahl der Monte-Carlo-Stichproben für die Störungsanalyse (Standard 1, maximal 100)."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "max_snap_distance": {
                "label": "Maximale Fangdistanz",
                "description": "Optionale maximale Entfernung von Ursprungs-/Zielpunkten zum nächsten Netzwerkknoten."
              },
              "one_way_field": {
                "label": "Einbahnfeld",
                "description": "Optionales Linienfeld, das Einbahnkanten markiert (unterstützt FT/TF/B sowie ältere boolesche Werte)."
              },
              "blocked_field": {
                "label": "Sperrfeld",
                "description": "Optionales Linienfeld, das gesperrte/geschlossene Kanten markiert."
              },
              "node_cost_points": {
                "label": "Knotenkostenpunkte",
                "description": "Optionaler Punktlayer mit Eintrittskosten pro Knoten (z. B. Kreuzungsverzögerung)."
              },
              "node_cost_field": {
                "label": "Knotenkostenfeld",
                "description": "Numerisches Feld in node_cost_points mit nicht-negativen Kosten pro Knoten."
              },
              "node_cost_snap_distance": {
                "label": "Knotenkosten-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Knotenkostenpunkt zu einem Netzwerkknoten für die Zuordnung."
              },
              "parallel_execution": {
                "label": "Parallele Ausführung",
                "description": "Wenn wahr (Standard), werden die Ursprungssuchen für die Basis- und die gestörten OD-Läufe parallel ausgewertet."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-CSV-Pfad mit OD-Paaren und Sensitivitätsstatistiken."
              }
            }
          },
          "shortest_path_network": {
            "name": "Kürzester Weg im Netzwerk",
            "description": "Findet den kürzesten Pfad zwischen Start- und Endkoordinaten in einem Liniennetz.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Liniennetzwerk-Layer."
              },
              "start_x": {
                "label": "Start X",
                "description": "X-Koordinate des Startpunkts."
              },
              "start_y": {
                "label": "Start Y",
                "description": "Y-Koordinate des Startpunkts."
              },
              "end_x": {
                "label": "Ende X",
                "description": "X-Koordinate des Endpunkts."
              },
              "end_y": {
                "label": "Ende Y",
                "description": "Y-Koordinate des Endpunkts."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Knoten-Fangtoleranz für den Graphaufbau."
              },
              "max_snap_distance": {
                "label": "Maximale Fangdistanz",
                "description": "Optionale maximale Entfernung von den Start-/Endkoordinaten zum nächsten Netzwerkknoten."
              },
              "edge_cost_field": {
                "label": "Kantenkostenfeld",
                "description": "Optionales numerisches Linienfeld, das als Impedanzmultiplikator für die Segmentlänge verwendet wird."
              },
              "one_way_field": {
                "label": "Einbahnfeld",
                "description": "Optionales Linienfeld, das Einbahnkanten markiert (unterstützt FT/TF/B sowie ältere boolesche Werte)."
              },
              "blocked_field": {
                "label": "Sperrfeld",
                "description": "Optionales Linienfeld, das gesperrte/geschlossene Kanten markiert, die vom Routing ausgeschlossen werden (true/1/yes sperrt)."
              },
              "barriers": {
                "label": "Barrieren",
                "description": "Optionaler Barrieren-Punktlayer; die nächstgelegenen Netzwerkknoten werden für die Durchquerung gesperrt."
              },
              "barrier_snap_distance": {
                "label": "Barrieren-Fangdistanz",
                "description": "Optionale maximale Entfernung von jedem Barrierenpunkt zu einem Netzwerkknoten für die Sperrung."
              },
              "turn_penalty": {
                "label": "Abbiegestrafe",
                "description": "Optionale additive Kosten, die auf nicht geradeaus führende Abbiegevorgänge an Netzwerkknoten angewendet werden."
              },
              "u_turn_penalty": {
                "label": "Wendestrafe",
                "description": "Optionale additive Kosten, die auf Wendemanöver angewendet werden."
              },
              "forbid_u_turns": {
                "label": "Wenden verbieten",
                "description": "Wenn wahr, werden Wendemanöver nicht zugelassen."
              },
              "forbid_left_turns": {
                "label": "Linksabbiegen verbieten",
                "description": "Wenn wahr, werden Linksabbiegevorgänge nicht zugelassen."
              },
              "forbid_right_turns": {
                "label": "Rechtsabbiegen verbieten",
                "description": "Wenn wahr, werden Rechtsabbiegevorgänge nicht zugelassen."
              },
              "turn_restrictions_csv": {
                "label": "Abbiegebeschränkungs-CSV",
                "description": "Optionale CSV mit Abbiegevorgängen mit den Spalten prev_x,prev_y,node_x,node_y,next_x,next_y. Optionale Spalten: forbidden (Standard wahr, wenn keine Spalte turn_cost angegeben ist) und turn_cost (oder penalty/cost/extra_cost) für additive Kosten pro Abbiegevorgang."
              },
              "temporal_cost_profile": {
                "label": "Zeitliches Kostenprofil",
                "description": "Optionale CSV, die zeitabhängige Kantenkosten definiert (Spalten: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Zeitliches Kanten-ID-Feld",
                "description": "Optionales Netzwerkfeld zum Abgleich der edge_id-Werte aus temporal_cost_profile (Standard EDGE_ID)."
              },
              "departure_time": {
                "label": "Abfahrtszeit",
                "description": "Optionale Abfahrtszeit im RFC3339-Format für die Suche im Zeitprofil."
              },
              "temporal_mode": {
                "label": "Zeitlicher Modus",
                "description": "Optionaler Modus der zeitlichen Interpretation: multiplier oder absolute."
              },
              "temporal_fallback": {
                "label": "Zeitlicher Rückfall",
                "description": "Optionales Fallback, wenn die zeitliche Zeile fehlt: static_cost oder error."
              },
              "temporal_profile_report": {
                "label": "Bericht zum zeitlichen Profil",
                "description": "Optionaler JSON-Ausgabepfad für Diagnosen des Zeitprofils (Abdeckung, nicht zugeordnete Kanten, Fallback-Nutzung)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienvektorpfad."
              }
            }
          },
          "split_lines_at_intersections": {
            "name": "Linien an Kreuzungen teilen",
            "description": "Teilt ein Liniennetz überall dort, wo sich Liniensegmente schneiden, einschließlich Selbstüberschneidungen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Linienlayer, der an Kreuzungen geteilt wird."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Fangtoleranz für Teilungsoperationen; standardmäßig das Maschinen-Epsilon."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad der geteilten Linien."
              }
            }
          },
          "snap_points_to_network": {
            "name": "Punkte auf das Netzwerk fangen",
            "description": "Fängt Eingabe-Punktobjekte an der nächstgelegenen Position entlang eines Netzwerk-Linienlayers.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktlayer, der gefangen werden soll."
              },
              "network": {
                "label": "Netzwerk",
                "description": "Eingabe-Netzwerklinienlayer."
              },
              "max_snap_distance": {
                "label": "Maximale Fangdistanz",
                "description": "Optionale maximale Fangdistanz in Karteneinheiten."
              },
              "keep_unsnapped": {
                "label": "Nicht gefangene beibehalten",
                "description": "Wenn wahr (Standard), werden Punkte beibehalten, die nicht innerhalb der Toleranz gefangen werden können."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad der gefangenen Punkte."
              }
            }
          },
          "transfer_attributes": {
            "name": "Attribute übertragen",
            "description": "Überträgt Quellattribute mithilfe eines räumlichen Prädikats auf Zielobjekte.",
            "params": {
              "target": {
                "label": "Ziel",
                "description": "Ziellayer, der die übertragenen Attribute erhält."
              },
              "source": {
                "label": "Quelle",
                "description": "Quelllayer, der die Attribute bereitstellt."
              },
              "predicate": {
                "label": "Prädikat",
                "description": "Räumliches Prädikat: intersects, within, contains, touches, crosses, overlaps, within_distance."
              },
              "distance": {
                "label": "Distanz",
                "description": "Entfernungsschwellenwert bei predicate=within_distance."
              },
              "strategy": {
                "label": "Strategie",
                "description": "Übertragungsstrategie: first, last, count, sum, mean, min, max."
              },
              "prefix": {
                "label": "Präfix",
                "description": "Präfix für übertragene Quellfelder (Standard SRC_)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "travelling_salesman_problem": {
            "name": "Problem des Handlungsreisenden",
            "description": "Findet Näherungslösungen für das Problem des Handlungsreisenden (TSP) mit 2-opt-Heuristiken. Ermittelt für eine Menge von Punktpositionen die kürzeste Route, die alle Punkte verbindet.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer."
              },
              "duration": {
                "label": "Dauer",
                "description": "Maximale Optimierungsdauer in Sekunden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad der Polylinie."
              }
            }
          },
          "vehicle_routing_cvrp": {
            "name": "Tourenplanung CVRP",
            "description": "Erstellt kapazitätsbeschränkte Lieferrouten mit mehreren Depots, mit Steuerung heterogener Flotten, Zielfunktionsmodi und optionaler lokaler Optimierung.",
            "params": {
              "network": {
                "label": "Netzwerk",
                "description": "Eingabe-Liniennetzwerk-Layer (zur Vertragsparität validiert)."
              },
              "depot_points": {
                "label": "Depotpunkte",
                "description": "Depot-Punktlayer; jeder Punkt kann ein oder mehrere Fahrzeuge beisteuern."
              },
              "stop_points": {
                "label": "Haltepunkte",
                "description": "Punktlayer der Lieferhalte."
              },
              "demand_field": {
                "label": "Nachfragefeld",
                "description": "Numerisches Nachfragefeld in stop_points (Standard: demand)."
              },
              "priority_field": {
                "label": "Prioritätsfeld",
                "description": "Optionales Haltprioritätsfeld mit Werten wie required/high/normal/low oder numerischen Rängen."
              },
              "allowed_vehicle_profiles_field": {
                "label": "Feld erlaubte Fahrzeugprofile",
                "description": "Optionales Haltfeld, das kompatible Fahrzeugprofile auflistet (durch Komma/Semikolon/Pipe getrennt)."
              },
              "allowed_route_classes_field": {
                "label": "Feld erlaubte Routenklassen",
                "description": "Optionaler Alias von allowed_vehicle_profiles_field für Routenklassen-Kompatibilitätsregeln."
              },
              "depot_id_field": {
                "label": "Depot-ID-Feld",
                "description": "Optionales Depot-ID-Feld für Routen-/Zuordnungsausgaben."
              },
              "vehicle_count_field": {
                "label": "Fahrzeuganzahlfeld",
                "description": "Optionales Depotfeld für die Anzahl der an jedem Depot bereitgestellten Fahrzeuge."
              },
              "vehicle_capacity_field": {
                "label": "Fahrzeugkapazitätsfeld",
                "description": "Optionales Depotfeld, das vehicle_capacity je Depot-/Fahrzeugvorlage überschreibt."
              },
              "vehicle_fixed_cost_field": {
                "label": "Fahrzeug-Fixkostenfeld",
                "description": "Optionales Depotfeld, das vehicle_fixed_cost je Depot-/Fahrzeugvorlage überschreibt."
              },
              "travel_speed_field": {
                "label": "Reisegeschwindigkeitsfeld",
                "description": "Optionales Depotfeld, das travel_speed je Depot-/Fahrzeugvorlage überschreibt."
              },
              "max_route_distance_field": {
                "label": "Feld maximale Routendistanz",
                "description": "Optionales Depotfeld, das max_route_distance je Depot-/Fahrzeugvorlage überschreibt."
              },
              "max_route_time_field": {
                "label": "Feld maximale Routenzeit",
                "description": "Optionales Depotfeld, das max_route_time je Depot-/Fahrzeugvorlage überschreibt."
              },
              "vehicle_profile_field": {
                "label": "Fahrzeugprofilfeld",
                "description": "Optionales Depotfeld, das das Fahrzeugprofil-/Kategorie-Token für die Haltkompatibilität definiert."
              },
              "vehicle_route_class_field": {
                "label": "Fahrzeug-Routenklassenfeld",
                "description": "Optionaler Alias von vehicle_profile_field für Routenklassen-Kompatibilitätsregeln."
              },
              "vehicle_capacity": {
                "label": "Fahrzeugkapazität",
                "description": "Kapazität pro Fahrzeug (> 0)."
              },
              "vehicle_fixed_cost": {
                "label": "Fahrzeug-Fixkosten",
                "description": "Optionale Fixkosten pro eingesetztem Fahrzeug/Route (Standard: 0)."
              },
              "max_vehicles": {
                "label": "Maximale Fahrzeuge",
                "description": "Optionale maximale Anzahl der zu erstellenden Fahrzeuge/Routen."
              },
              "max_route_distance": {
                "label": "Maximale Routendistanz",
                "description": "Optionale maximale Fahrtstrecke pro Route, einschließlich Rückkehr zum Depot."
              },
              "travel_speed": {
                "label": "Reisegeschwindigkeit",
                "description": "Fahrgeschwindigkeit in Koordinateneinheiten pro Zeiteinheit (Standard: 1)."
              },
              "max_route_time": {
                "label": "Maximale Routenzeit",
                "description": "Optionale maximale Routendauer in Modellzeiteinheiten, einschließlich Rückkehr zum Depot."
              },
              "max_stops_per_vehicle": {
                "label": "Maximale Halte pro Fahrzeug",
                "description": "Optionale maximale Anzahl der jeder Fahrzeugroute zugewiesenen Halte."
              },
              "objective_mode": {
                "label": "Zielfunktionsmodus",
                "description": "Ziel der Routenkonstruktion: minimize_distance, minimize_vehicles oder minimize_cost."
              },
              "apply_local_optimization": {
                "label": "Lokale Optimierung anwenden",
                "description": "Wenn wahr, wird auf jede konstruierte Route ein deterministischer 2-opt-Verbesserungsdurchlauf angewendet (Standard: true)."
              },
              "apply_simulated_annealing": {
                "label": "Simulated Annealing anwenden",
                "description": "Wenn wahr, wird nach der Greedy-/lokalen Optimierung je Route ein Simulated-Annealing-Verfeinerungsdurchlauf mit festem Seed angewendet (Standard: false)."
              },
              "sa_iterations": {
                "label": "SA-Iterationen",
                "description": "Maximale Simulated-Annealing-Iterationen pro Route bei apply_simulated_annealing=true (Standard: 1500)."
              },
              "sa_initial_temperature": {
                "label": "SA-Anfangstemperatur",
                "description": "Anfangstemperatur des Simulated Annealing (> 0, Standard: 1.0)."
              },
              "sa_cooling_rate": {
                "label": "SA-Abkühlrate",
                "description": "Abkühlungsmultiplikator des Simulated Annealing in (0, 1); Standard 0.995."
              },
              "sa_seed": {
                "label": "SA-Seed",
                "description": "Optionaler deterministischer Zufalls-Seed für das Simulated Annealing (Standard: 42)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad der Routenlinien."
              },
              "assignment_output": {
                "label": "Zuweisungsausgabe",
                "description": "Optionale Punktausgabe der Haltzuordnung mit Diagnosen zu Besuchsreihenfolge/Beladung."
              }
            }
          },
          "vehicle_routing_pickup_delivery": {
            "name": "Tourenplanung mit Abholung und Zustellung",
            "description": "Erstellt gepaarte Abhol- und Lieferrouten mit Reihenfolge- und Kapazitätsbedingungen auf Basis einer deterministischen Nächster-Nachbar-Ausgangslösung.",
            "params": {
              "network": {
                "label": "Netzwerk",
                "description": "Eingabe-Liniennetzwerk-Layer (zur Vertragsparität validiert)."
              },
              "depot_points": {
                "label": "Depotpunkte",
                "description": "Depot-Punktlayer; in dieser Basisimplementierung wird der erste Punkt als aktives Depot verwendet."
              },
              "stop_points": {
                "label": "Haltepunkte",
                "description": "Halt-Punktlayer mit gepaarten Abhol- und Lieferdatensätzen."
              },
              "request_id_field": {
                "label": "Anfrage-ID-Feld",
                "description": "Anfrage-ID-Feld in stop_points zum Paaren von Abhol- und Lieferdatensätzen (Standard: request_id)."
              },
              "stop_type_field": {
                "label": "Halttypfeld",
                "description": "Halttypfeld in stop_points mit den Bezeichnungen pickup/delivery (Standard: stop_type)."
              },
              "demand_field": {
                "label": "Nachfragefeld",
                "description": "Numerisches Nachfragefeld in stop_points; die Abholnachfrage wird geladen, die Liefernachfrage wird ignoriert (Standard: demand)."
              },
              "vehicle_capacity": {
                "label": "Fahrzeugkapazität",
                "description": "Kapazität pro Fahrzeug (> 0)."
              },
              "max_vehicles": {
                "label": "Maximale Fahrzeuge",
                "description": "Optionale maximale Anzahl der zu erstellenden Fahrzeuge/Routen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad der Routenlinien."
              },
              "assignment_output": {
                "label": "Zuweisungsausgabe",
                "description": "Optionale Punktausgabe der Haltzuordnung mit Anfrage- und Reihenfolgediagnosen."
              }
            }
          },
          "vehicle_routing_vrptw": {
            "name": "Tourenplanung VRPTW",
            "description": "Erstellt kapazitätsbeschränkte VRPTW-Routen mit mehreren Depots, mit Einstellungen für heterogene Flotten, Pausenfenstern und Steuerung des Zielfunktionsmodus.",
            "params": {
              "network": {
                "label": "Netzwerk",
                "description": "Eingabe-Liniennetzwerk-Layer (zur Vertragsparität validiert)."
              },
              "depot_points": {
                "label": "Depotpunkte",
                "description": "Depot-Punktlayer; jeder Punkt kann ein oder mehrere Fahrzeuge beisteuern."
              },
              "stop_points": {
                "label": "Haltepunkte",
                "description": "Punktlayer der Lieferhalte mit Nachfrage- und Zeitfensterfeldern."
              },
              "demand_field": {
                "label": "Nachfragefeld",
                "description": "Numerisches Nachfragefeld in stop_points (Standard: demand)."
              },
              "priority_field": {
                "label": "Prioritätsfeld",
                "description": "Optionales Haltprioritätsfeld mit Werten wie required/high/normal/low oder numerischen Rängen."
              },
              "allowed_vehicle_profiles_field": {
                "label": "Feld erlaubte Fahrzeugprofile",
                "description": "Optionales Haltfeld, das kompatible Fahrzeugprofile auflistet (durch Komma/Semikolon/Pipe getrennt)."
              },
              "allowed_route_classes_field": {
                "label": "Feld erlaubte Routenklassen",
                "description": "Optionaler Alias von allowed_vehicle_profiles_field für Routenklassen-Kompatibilitätsregeln."
              },
              "tw_start_field": {
                "label": "Feld Zeitfensterbeginn",
                "description": "Numerisches Feld für den Zeitfensterbeginn in stop_points (Standard: tw_start)."
              },
              "tw_end_field": {
                "label": "Feld Zeitfensterende",
                "description": "Numerisches Feld für das Zeitfensterende in stop_points (Standard: tw_end)."
              },
              "service_time_field": {
                "label": "Servicezeitfeld",
                "description": "Numerisches Feld für die Servicezeit pro Halt in stop_points (Standard: service_time)."
              },
              "depot_id_field": {
                "label": "Depot-ID-Feld",
                "description": "Optionales Depot-ID-Feld für Routen-/Zuordnungsausgaben."
              },
              "vehicle_count_field": {
                "label": "Fahrzeuganzahlfeld",
                "description": "Optionales Depotfeld für die Anzahl der an jedem Depot bereitgestellten Fahrzeuge."
              },
              "vehicle_capacity_field": {
                "label": "Fahrzeugkapazitätsfeld",
                "description": "Optionales Depotfeld, das vehicle_capacity je Depot-/Fahrzeugvorlage überschreibt."
              },
              "vehicle_fixed_cost_field": {
                "label": "Fahrzeug-Fixkostenfeld",
                "description": "Optionales Depotfeld, das vehicle_fixed_cost je Depot-/Fahrzeugvorlage überschreibt."
              },
              "travel_speed_field": {
                "label": "Reisegeschwindigkeitsfeld",
                "description": "Optionales Depotfeld, das travel_speed je Depot-/Fahrzeugvorlage überschreibt."
              },
              "max_route_distance_field": {
                "label": "Feld maximale Routendistanz",
                "description": "Optionales Depotfeld, das max_route_distance je Depot-/Fahrzeugvorlage überschreibt."
              },
              "max_route_time_field": {
                "label": "Feld maximale Routenzeit",
                "description": "Optionales Depotfeld, das max_route_time je Depot-/Fahrzeugvorlage überschreibt."
              },
              "vehicle_profile_field": {
                "label": "Fahrzeugprofilfeld",
                "description": "Optionales Depotfeld, das das Fahrzeugprofil-/Kategorie-Token für die Haltkompatibilität definiert."
              },
              "vehicle_route_class_field": {
                "label": "Fahrzeug-Routenklassenfeld",
                "description": "Optionaler Alias von vehicle_profile_field für Routenklassen-Kompatibilitätsregeln."
              },
              "depot_close_time_field": {
                "label": "Feld Depot-Schließzeit",
                "description": "Optionales Depotfeld, das depot_close_time je Depot-/Fahrzeugvorlage überschreibt."
              },
              "break_start_field": {
                "label": "Feld Pausenbeginn",
                "description": "Optionales Depotfeld, das break_start_time je Depot-/Fahrzeugvorlage überschreibt."
              },
              "break_end_field": {
                "label": "Feld Pausenende",
                "description": "Optionales Depotfeld, das break_end_time je Depot-/Fahrzeugvorlage überschreibt."
              },
              "break_duration_field": {
                "label": "Pausendauerfeld",
                "description": "Optionales Depotfeld, das break_duration je Depot-/Fahrzeugvorlage überschreibt."
              },
              "vehicle_capacity": {
                "label": "Fahrzeugkapazität",
                "description": "Kapazität pro Fahrzeug (> 0)."
              },
              "vehicle_fixed_cost": {
                "label": "Fahrzeug-Fixkosten",
                "description": "Optionale Fixkosten pro eingesetztem Fahrzeug/Route (Standard: 0)."
              },
              "start_time": {
                "label": "Startzeit",
                "description": "Startzeit der Route in Modellzeiteinheiten (Standard: 0)."
              },
              "travel_speed": {
                "label": "Reisegeschwindigkeit",
                "description": "Fahrgeschwindigkeit in Koordinateneinheiten pro Zeiteinheit (Standard: 1)."
              },
              "enforce_time_windows": {
                "label": "Zeitfenster erzwingen",
                "description": "Wenn wahr, kommen nur Halte mit einer Verspätung <= allowed_lateness für die Zuordnung in Frage (Standard: false)."
              },
              "allowed_lateness": {
                "label": "Erlaubte Verspätung",
                "description": "Maximal tolerierte Verspätung bei enforce_time_windows=true (Standard: 0)."
              },
              "depot_close_time": {
                "label": "Depot-Schließzeit",
                "description": "Optionale harte Schließzeit, bis zu der jede Route zum Depot zurückkehren muss."
              },
              "break_start_time": {
                "label": "Pausenbeginn",
                "description": "Optionaler globaler Beginn des Pausenfensters für alle Fahrzeuge."
              },
              "break_end_time": {
                "label": "Pausenende",
                "description": "Optionales globales Ende des Pausenfensters für alle Fahrzeuge."
              },
              "break_duration": {
                "label": "Pausendauer",
                "description": "Optionale globale Pausendauer, die einmal pro Route angewendet wird, wenn das Pausenfenster geschnitten wird."
              },
              "use_priority_scoring": {
                "label": "Prioritätsbewertung verwenden",
                "description": "Wenn wahr, werden zulässige Kandidaten zuerst nach prognostizierter Verspätung/Pufferzeit und dann nach Fahrtstrecke gereiht; wenn falsch, wird die Nächster-Nachbar-Basislösung verwendet (Standard: true)."
              },
              "max_vehicles": {
                "label": "Maximale Fahrzeuge",
                "description": "Optionale maximale Anzahl der zu erstellenden Fahrzeuge/Routen."
              },
              "max_route_distance": {
                "label": "Maximale Routendistanz",
                "description": "Optionale maximale Fahrtstrecke der Route, einschließlich Rückkehr zum Depot."
              },
              "max_route_time": {
                "label": "Maximale Routenzeit",
                "description": "Optionale maximale Routendauer in Modellzeiteinheiten, einschließlich Rückkehr zum Depot."
              },
              "max_stops_per_vehicle": {
                "label": "Maximale Halte pro Fahrzeug",
                "description": "Optionale maximale Anzahl der jeder Fahrzeugroute zugewiesenen Halte."
              },
              "objective_mode": {
                "label": "Zielfunktionsmodus",
                "description": "Ziel der Routenkonstruktion: minimize_lateness, minimize_distance, minimize_vehicles oder minimize_cost."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad der Routenlinien."
              },
              "assignment_output": {
                "label": "Zuweisungsausgabe",
                "description": "Optionale Punktausgabe der Haltzuordnung mit Zeitfensterdiagnosen."
              }
            }
          },
          "clip": {
            "name": "Zuschneiden",
            "description": "Schneidet Eingabepolygone mittels topologiebasierter Verschneidung auf die Grenzen der Overlay-Polygone zu.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "overlay": {
                "label": "Overlay",
                "description": "Overlay-Polygonlayer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Fangtoleranz für Topologieoperationen; standardmäßig das Maschinen-Epsilon."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "difference": {
            "name": "Differenz",
            "description": "Entfernt Flächen der Overlay-Polygone mittels topologiebasierter Differenz aus den Eingabepolygonen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "overlay": {
                "label": "Overlay",
                "description": "Overlay-Polygonlayer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Fangtoleranz für Topologieoperationen; standardmäßig das Maschinen-Epsilon."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "dissolve": {
            "name": "Auflösen",
            "description": "Entfernt gemeinsame Polygongrenzen global oder nach einem Attributfeld für die Zusammenführung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "dissolve_field": {
                "label": "Zusammenführungsfeld",
                "description": "Optionales Attributfeld zum Zusammenführen der Polygone innerhalb von Gruppen; wenn nicht angegeben, werden alle Polygone zusammengeführt."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Fangtoleranz, die bei Topologieoperationen verwendet wird."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Polygonvektors."
              }
            }
          },
          "erase": {
            "name": "Löschen",
            "description": "Löscht Flächen der Overlay-Polygone aus den Eingabepolygonen und bewahrt die Eingabeattribute.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "overlay": {
                "label": "Overlay",
                "description": "Overlay-Polygonlayer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Fangtoleranz für Topologieoperationen; standardmäßig das Maschinen-Epsilon."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "identity": {
            "name": "Identität",
            "description": "Bewahrt alle Eingabeobjekte; Teile, die sich mit dem Identity-Layer überlappen, erhalten zusätzlich dessen Attribute.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "overlay": {
                "label": "Overlay",
                "description": "Overlay-Polygonlayer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Fangtoleranz für Topologieoperationen; standardmäßig das Maschinen-Epsilon."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "intersect": {
            "name": "Verschneiden",
            "description": "Verschneidet Eingabe- und Overlay-Polygone mittels topologiebasierter Überlagerung und verfolgt die IDs der Quellobjekte.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "overlay": {
                "label": "Overlay",
                "description": "Overlay-Polygonlayer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Fangtoleranz für Topologieoperationen; standardmäßig das Maschinen-Epsilon."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "line_intersections": {
            "name": "Linienschnittpunkte",
            "description": "Findet Schnittpunkte von Linien zwischen Eingabe- und Overlay-Layer und fügt die IDs der Ausgangsobjekte mit zusammengeführten Attributen an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Linien- oder Polygonlayer."
              },
              "overlay": {
                "label": "Overlay",
                "description": "Overlay-Linien- oder Polygonlayer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Fangtoleranz für Geometrieoperationen; standardmäßig das Maschinen-Epsilon."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "line_polygon_clip": {
            "name": "Linien an Polygon zuschneiden",
            "description": "Schneidet Linienobjekte auf das Innere von Polygonen zu und gibt die zugeschnittenen Liniensegmente aus.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Linienlayer."
              },
              "clip": {
                "label": "Zuschneiden",
                "description": "Polygonlayer zum Zuschneiden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "near": {
            "name": "Nähe",
            "description": "Fügt die Attribute NEAR_FID und NEAR_DIST hinzu, die mithilfe räumlicher Indizierung die nächstgelegenen Objekte und deren Distanzen angeben.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "near": {
                "label": "Nähe",
                "description": "Vektorlayer der Nachbarobjekte."
              },
              "max_distance": {
                "label": "Maximale Distanz",
                "description": "Optionale maximale Suchdistanz."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "select_by_location": {
            "name": "Nach Lage auswählen",
            "description": "Filtert Zielobjekte nach räumlichen Prädikaten (schneidet, innerhalb, enthält, berührt, überlappt usw.) in Bezug auf Abfrageobjekte.",
            "params": {
              "target": {
                "label": "Ziel",
                "description": "Zu filternder Zielobjektlayer."
              },
              "query": {
                "label": "Abfrage",
                "description": "Abfrageobjektlayer."
              },
              "predicate": {
                "label": "Prädikat",
                "description": "Räumliches Prädikat: intersects, within, contains, touches, crosses, overlaps, disjoint, within_distance."
              },
              "distance": {
                "label": "Distanz",
                "description": "Entfernungsschwellenwert für das Prädikat within_distance."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "spatial_join": {
            "name": "Räumlicher Join",
            "description": "Überträgt Attribute von Objekten des Join-Layers mithilfe räumlicher Prädikate auf Ziele; unterstützt Aggregationsstrategien (count, sum, mean, min, max) für mehrere Treffer.",
            "params": {
              "target": {
                "label": "Ziel",
                "description": "Ziellayer, der die verknüpften Attribute erhält."
              },
              "join": {
                "label": "Verknüpfen",
                "description": "Verknüpfungslayer, der die Attribute bereitstellt."
              },
              "predicate": {
                "label": "Prädikat",
                "description": "Räumliches Prädikat: intersects, within, contains, touches, crosses, overlaps, within_distance."
              },
              "distance": {
                "label": "Distanz",
                "description": "Entfernungsschwellenwert für das Prädikat within_distance."
              },
              "strategy": {
                "label": "Strategie",
                "description": "Verknüpfungsstrategie: first, last, count, sum, mean, min, max."
              },
              "prefix": {
                "label": "Präfix",
                "description": "Präfix für verknüpfte Feldnamen (Standard JOIN_)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "symmetrical_difference": {
            "name": "Symmetrische Differenz",
            "description": "Berechnet nicht überlappende Polygonbereiche aus Eingabe- und Overlay-Layer.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "overlay": {
                "label": "Overlay",
                "description": "Overlay-Polygonlayer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Fangtoleranz für Topologieoperationen; standardmäßig das Maschinen-Epsilon."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "union": {
            "name": "Vereinigung",
            "description": "Führt kombinierte Eingabe- und Overlay-Polygone zu einer einheitlichen Polygonabdeckung zusammen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "overlay": {
                "label": "Overlay",
                "description": "Overlay-Polygonlayer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Fangtoleranz für Topologieoperationen; standardmäßig das Maschinen-Epsilon."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "update": {
            "name": "Aktualisieren",
            "description": "Ersetzt Eingabeobjekte dort, wo sie sich überlappen, durch Aktualisierungsobjekte; Eingabeobjekte außerhalb des Aktualisierungslayers bleiben erhalten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "overlay": {
                "label": "Overlay",
                "description": "Overlay-Polygonlayer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Fangtoleranz für Topologieoperationen; standardmäßig das Maschinen-Epsilon."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "centroid_vector": {
            "name": "Vektorschwerpunkt",
            "description": "Berechnet das geografische Zentrum (mittlere Koordinate des Schwerpunkts) für jedes Vektorobjekt und erzeugt einen Punktlayer für Beschriftungsplatzierung, Clustering und räumliche Analysen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad."
              }
            }
          },
          "concave_hull": {
            "name": "Konkave Hülle",
            "description": "Erstellt konkave Hüllpolygone um die Koordinaten der Eingabeobjekte mit dem concaveman-Algorithmus.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "concavity": {
                "label": "Konkavität",
                "description": "Konkavitätsverhältnis (Standard 2.0). Höhere Werte erzeugen eine weniger konkave Hülle, die näher an der konvexen Hülle liegt. Niedrigere Werte erlauben engere Konkavitäten."
              },
              "max_edge_length": {
                "label": "Maximale Kantenlänge",
                "description": "Längenschwellenwert: Hüllenkanten, die kürzer als dieser Wert sind, werden nicht weiter verfeinert. Standardmäßig unbegrenzt (unendlich)."
              },
              "epsilon": {
                "label": "Epsilon",
                "description": "Robustheits-Epsilon (Standard 1e-9)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "densify_features": {
            "name": "Objekte verdichten",
            "description": "Fügt entlang von Linien- und Polygongrenzen Stützpunkte in einem festgelegten Abstand hinzu.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "spacing": {
                "label": "Abstand",
                "description": "Maximaler Abstand zwischen benachbarten Stützpunkten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "eliminate_coincident_points": {
            "name": "Deckungsgleiche Punkte entfernen",
            "description": "Entfernt zusammenfallende oder nahezu zusammenfallende Punkte innerhalb eines Toleranzabstands.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer."
              },
              "tolerance_dist": {
                "label": "Toleranzdistanz",
                "description": "Entfernungsschwellenwert, ab dem Punkte als deckungsgleich gelten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad."
              }
            }
          },
          "extend_vector_lines": {
            "name": "Vektorlinien verlängern",
            "description": "Verlängert Polylinien-Endpunkte am Anfang, am Ende oder an beiden Enden um einen festgelegten Abstand.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polylinienvektorlayer."
              },
              "distance": {
                "label": "Distanz",
                "description": "Strecke, um die die Endpunkte der Polylinie verlängert werden."
              },
              "extend_direction": {
                "label": "Verlängerungsrichtung",
                "description": "Richtung der Endpunktverlängerung: both, start oder end."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "merge_line_segments": {
            "name": "Liniensegmente zusammenführen",
            "description": "Führt verbundene Liniensegmente zusammen, die an nicht verzweigenden Endpunkten aufeinandertreffen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polylinienvektorlayer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Endpunkt-Fangtoleranz zum Abgleich von Linienendpunkten; standardmäßig das Maschinen-Epsilon."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "minimum_bounding_box": {
            "name": "Minimales umschließendes Rechteck",
            "description": "Berechnet orientierte minimale Begrenzungsrahmen um einzelne Objekte oder den gesamten Layer.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "min_criteria": {
                "label": "Mindestkriterien",
                "description": "Minimierungskriterium: area, perimeter, length oder width. Standardmäßig area."
              },
              "individual_feature_hulls": {
                "label": "Hüllen je Einzelobjekt",
                "description": "Wenn wahr, wird ein Rechteck pro Objekt ausgegeben; andernfalls ein Rechteck für den gesamten Layer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Polygonvektors."
              }
            }
          },
          "minimum_bounding_circle": {
            "name": "Minimaler umschließender Kreis",
            "description": "Berechnet minimale umschließende Kreise um einzelne Objekte oder den gesamten Layer.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "individual_feature_hulls": {
                "label": "Hüllen je Einzelobjekt",
                "description": "Wenn wahr, wird ein Kreis pro Objekt ausgegeben; andernfalls ein Kreis für den gesamten Layer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Polygonvektors."
              }
            }
          },
          "minimum_bounding_envelope": {
            "name": "Minimale umschließende Hüllbox",
            "description": "Berechnet achsenparallele minimale Begrenzungsrechtecke um einzelne Objekte oder den gesamten Layer.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "individual_feature_hulls": {
                "label": "Hüllen je Einzelobjekt",
                "description": "Wenn wahr, wird eine Hüllbox pro Objekt ausgegeben; andernfalls eine Hüllbox für den gesamten Layer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Polygonvektors."
              }
            }
          },
          "minimum_convex_hull": {
            "name": "Minimale konvexe Hülle",
            "description": "Erstellt konvexe Hüllpolygone um einzelne Objekte oder den gesamten Eingabelayer.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "individual_feature_hulls": {
                "label": "Hüllen je Einzelobjekt",
                "description": "Wenn wahr, wird eine Hülle pro Eingabeobjekt ausgegeben; andernfalls eine Hülle für den gesamten Layer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Polygonvektors."
              }
            }
          },
          "polygonize": {
            "name": "Polygonisieren",
            "description": "Erstellt Polygone aus Eingabelinien, einschließlich sich schneidender/offener Segmente, sofern sich geschlossene Flächen bilden lassen.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Eingabe-Linienvektorlayer als Array oder als durch Semikolon/Komma getrennte Zeichenkette. Wenn nicht angegeben, wird 'input' verwendet."
              },
              "input": {
                "label": "Eingabe",
                "description": "Optionaler Pfad eines einzelnen Eingabe-Linienvektorlayers."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Fangtoleranz für die Polygonisierung; standardmäßig das Maschinen-Epsilon."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "representative_point_vector": {
            "name": "Repräsentativer Vektorpunkt",
            "description": "Erzeugt mithilfe des Pols der Unzugänglichkeit einen inneren Punkt, der garantiert innerhalb oder auf jeder Geometrie liegt – ideal zur Beschriftungsplatzierung in konkaven Polygonen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad."
              }
            }
          },
          "simplify_features": {
            "name": "Objekte vereinfachen",
            "description": "Verringert die Geometriekomplexität mit dem Douglas-Peucker-Algorithmus, um die Dateigröße zu minimieren, GPS-Rauschen zu entfernen und die Darstellungsleistung zu optimieren, während die Form erhalten bleibt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Vereinfachungstoleranz in Karteneinheiten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "smooth_vectors": {
            "name": "Vektoren glätten",
            "description": "Glättet Polylinien- oder Polygongeometrien mit einem gleitenden Mittelwertfilter, um Digitalisierungsrauschen und Zittern in GPS-Tracks zu verringern.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Linien- oder Polygonvektorlayer."
              },
              "filter_size": {
                "label": "Filtergröße",
                "description": "Ungerade Fenstergröße des gleitenden Mittels (>= 3). Gerade Werte werden auf den nächsten ungeraden Wert erhöht."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "snap_endnodes": {
            "name": "Endknoten fangen",
            "description": "Fängt nahe beieinanderliegende Polylinien-Endpunkte innerhalb einer Toleranz auf eine gemeinsame Position.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polylinienvektorlayer."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Endpunkt-Fangtoleranz in Karteneinheiten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad der gefangenen Polylinien."
              }
            }
          },
          "split_vector_lines": {
            "name": "Vektorlinien teilen",
            "description": "Teilt jedes Polylinienobjekt in Segmente mit einer festgelegten Maximallänge.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polylinienvektorlayer."
              },
              "segment_length": {
                "label": "Segmentlänge",
                "description": "Maximale Segmentlänge in Karteneinheiten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polylinienvektorpfad."
              }
            }
          },
          "split_with_lines": {
            "name": "Mit Linien teilen",
            "description": "Teilt Eingabe-Polylinien an den Schnittpunkten mit einem Layer von Trennlinien.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zu teilender Eingabe-Linienlayer."
              },
              "split": {
                "label": "Aufteilen",
                "description": "Trennlinienlayer zum Erzeugen der Trennpunkte."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Optionale Fangtoleranz für Teilungsoperationen; standardmäßig das Maschinen-Epsilon."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "compactness_ratio": {
            "name": "Kompaktheitsverhältnis",
            "description": "Berechnet das Kompaktheitsverhältnis (Fläche / Umfang) für Polygonobjekte.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabevektor mit angehängtem Kompaktheitsfeld."
              }
            }
          },
          "deviation_from_regional_direction": {
            "name": "Abweichung von der regionalen Richtung",
            "description": "Berechnet die Richtungsabweichung von Polygonen gegenüber der gewichteten regionalen mittleren Ausrichtung und fügt DEV_DIR an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "elongation_threshold": {
                "label": "Elongationsschwellenwert",
                "description": "Minimale Elongation, ab der Polygone in die regionale Richtungsschätzung einbezogen werden; Standard 0.75."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "elongation_ratio": {
            "name": "Streckungsverhältnis",
            "description": "Berechnet das Elongationsverhältnis (kurze Achse / lange Achse des Begrenzungsrechtecks) für Polygonobjekte.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabevektor mit angehängtem Elongationsfeld."
              }
            }
          },
          "hole_proportion": {
            "name": "Lochanteil",
            "description": "Berechnet die Fläche der Polygonlöcher geteilt durch die Fläche der Hülle und fügt HOLE_PROP an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "linearity_index": {
            "name": "Linearitätsindex",
            "description": "Berechnet den Linearitätsindex (Bestimmtheitsmaß der Regression) für Polygonobjekte.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabevektor mit angehängtem Linearitätsfeld."
              }
            }
          },
          "narrowness_index_vector": {
            "name": "Schmalheitsindex (Vektor)",
            "description": "Berechnet den Schmalheitsindex (Umfang / sqrt(Fläche)) für Polygonobjekte.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabevektor mit angehängtem Schmalheitsfeld."
              }
            }
          },
          "patch_orientation": {
            "name": "Ausrichtung der Fläche",
            "description": "Berechnet die Ausrichtung von Polygonen (Grad ab Norden) mittels Reduced-Major-Axis-Regression und fügt ORIENT an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "perimeter_area_ratio": {
            "name": "Umfang-Flächen-Verhältnis",
            "description": "Berechnet das Verhältnis von Umfang zu Fläche von Polygonen und fügt P_A_RATIO an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "polygon_area": {
            "name": "Polygonfläche",
            "description": "Berechnet die Polygonfläche und fügt ein Attributfeld AREA an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "polygon_long_axis": {
            "name": "Lange Polygonachse",
            "description": "Bildet die lange Achse des minimalen Begrenzungsrahmens jedes Polygonobjekts als Linienausgabe ab.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polylinienvektorpfad."
              }
            }
          },
          "polygon_perimeter": {
            "name": "Polygonumfang",
            "description": "Berechnet den Polygonumfang und fügt ein Attributfeld PERIMETER an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "polygon_short_axis": {
            "name": "Kurze Polygonachse",
            "description": "Bildet die kurze Achse des minimalen Begrenzungsrahmens jedes Polygonobjekts als Linienausgabe ab.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polylinienvektorpfad."
              }
            }
          },
          "related_circumscribing_circle": {
            "name": "Zugehöriger Umkreis",
            "description": "Berechnet 1 - (Polygonfläche / Fläche des kleinsten umschreibenden Kreises) und fügt RC_CIRCLE an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "shape_complexity_index_vector": {
            "name": "Formkomplexitätsindex (Vektor)",
            "description": "Berechnet einen Formkomplexitätsindex für Vektor-Polygonobjekte anhand des normierten Formfaktors.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabevektor mit angehängtem Komplexitätsindexfeld."
              }
            }
          },
          "global_morans_i": {
            "name": "Globales Morans I",
            "description": "Berechnet Global Moran's I zur Prüfung der räumlichen Autokorrelation: ob sich ähnliche Werte räumlich häufen. Unverzichtbare Grundlage für geostatistische Analysen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "field": {
                "label": "Feld",
                "description": "Zu analysierendes numerisches Attributfeld."
              },
              "weights_mode": {
                "label": "Gewichtungsmodus",
                "description": "Nachbarschaftsmodus: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "k-Wert für den Modus k_nearest."
              },
              "distance": {
                "label": "Distanz",
                "description": "Entfernungsschwellenwert für den Modus distance_band."
              },
              "row_standardize": {
                "label": "Zeilenstandardisierung",
                "description": "Zeilenstandardisierung auf die Gewichte anwenden (Standard true)."
              },
              "inference": {
                "label": "Inferenz",
                "description": "Inferenzmodus: asymptotic oder permutation (Standard: asymptotic)."
              },
              "num_simulations": {
                "label": "Anzahl Simulationen",
                "description": "Anzahl der Permutationen für den Permutationstest (Standard: 999)."
              },
              "seed": {
                "label": "Seed",
                "description": "Zufalls-Seed für reproduzierbare Permutationstests."
              },
              "island_policy": {
                "label": "Inselregel",
                "description": "Behandlung von Inseln: drop_with_warning, keep_zero_weight, error."
              },
              "output_json": {
                "label": "JSON-Ausgabe",
                "description": "Optionaler Ausgabepfad des JSON-Berichts."
              },
              "output_html": {
                "label": "HTML-Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts."
              },
              "output_csv": {
                "label": "CSV-Ausgabe",
                "description": "Optionaler Ausgabepfad der CSV-Zusammenfassung."
              },
              "output_distribution": {
                "label": "Verteilung ausgeben",
                "description": "Optionaler Pfad zum Speichern der Permutationsverteilung als JSON."
              }
            }
          },
          "getis_ord_gi_star": {
            "name": "Getis-Ord Gi*",
            "description": "Berechnet z-Werte nach Getis-Ord Gi/Gi* zur Identifikation lokaler Hotspots/Coldspots. Direktes Maß für die Konzentration hoher/niedriger Werte.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "field": {
                "label": "Feld",
                "description": "Zu analysierendes numerisches Attributfeld."
              },
              "weights_mode": {
                "label": "Gewichtungsmodus",
                "description": "Nachbarschaftsmodus: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "k-Wert für den Modus k_nearest."
              },
              "distance": {
                "label": "Distanz",
                "description": "Entfernungsschwellenwert für den Modus distance_band."
              },
              "row_standardize": {
                "label": "Zeilenstandardisierung",
                "description": "Zeilenstandardisierung auf die Gewichte anwenden (Standard true)."
              },
              "variant": {
                "label": "Variante",
                "description": "Variante: gi oder gi_star (Standard gi_star)."
              },
              "inference": {
                "label": "Inferenz",
                "description": "Inferenzmodus: asymptotic oder permutation (Standard: asymptotic)."
              },
              "num_simulations": {
                "label": "Anzahl Simulationen",
                "description": "Anzahl der Permutationen für den Permutationstest (Standard: 999)."
              },
              "seed": {
                "label": "Seed",
                "description": "Zufalls-Seed für reproduzierbare Permutationstests."
              },
              "island_policy": {
                "label": "Inselregel",
                "description": "Behandlung von Inseln: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Signifikanzschwellenwert in [0, 1]; Standard 0.05."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad mit GI-Feldern."
              },
              "output_html": {
                "label": "HTML-Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts."
              }
            }
          },
          "local_morans_i_lisa": {
            "name": "Lokales Morans I (LISA)",
            "description": "Berechnet Local Moran's I für jedes Objekt, um lokale räumliche Cluster und Ausreißer mit statistischer Signifikanzprüfung zu identifizieren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "field": {
                "label": "Feld",
                "description": "Zu analysierendes numerisches Attributfeld."
              },
              "weights_mode": {
                "label": "Gewichtungsmodus",
                "description": "Nachbarschaftsmodus: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "k-Wert für den Modus k_nearest."
              },
              "distance": {
                "label": "Distanz",
                "description": "Entfernungsschwellenwert für den Modus distance_band."
              },
              "row_standardize": {
                "label": "Zeilenstandardisierung",
                "description": "Zeilenstandardisierung auf die Gewichte anwenden (Standard true)."
              },
              "inference": {
                "label": "Inferenz",
                "description": "Inferenzmodus: asymptotic oder permutation (Standard: asymptotic)."
              },
              "num_simulations": {
                "label": "Anzahl Simulationen",
                "description": "Anzahl der Permutationen für den Permutationstest (Standard: 999)."
              },
              "seed": {
                "label": "Seed",
                "description": "Zufalls-Seed für reproduzierbare Permutationstests."
              },
              "island_policy": {
                "label": "Inselregel",
                "description": "Behandlung von Inseln: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Signifikanzschwellenwert in [0, 1]; Standard 0.05."
              },
              "fdr_correction": {
                "label": "FDR-Korrektur",
                "description": "FDR-BH-Korrektur anwenden (Standard true bei Permutation)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad mit LISA-Feldern."
              },
              "output_html": {
                "label": "HTML-Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts."
              }
            }
          },
          "nearest_neighbour_index": {
            "name": "Nächster-Nachbar-Index",
            "description": "Berechnet den Clark-Evans-Index des nächsten Nachbarn zur Prüfung auf vollständige räumliche Zufälligkeit. Erkennt Clusterbildung gegenüber Streuung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer."
              },
              "study_area_mode": {
                "label": "Untersuchungsgebietsmodus",
                "description": "Untersuchungsgebietsmodus: hull, envelope, polygon_layer."
              },
              "study_area_polygon": {
                "label": "Untersuchungsgebietspolygon",
                "description": "Polygonlayer, der bei study_area_mode=polygon_layer verwendet wird."
              },
              "output_json": {
                "label": "JSON-Ausgabe",
                "description": "Optionaler Ausgabepfad des JSON-Berichts."
              },
              "output_html": {
                "label": "HTML-Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts."
              },
              "output_csv": {
                "label": "CSV-Ausgabe",
                "description": "Optionaler Ausgabepfad der CSV-Zusammenfassung."
              }
            }
          },
          "quadrat_count_test": {
            "name": "Quadratzähltest",
            "description": "Führt einen Chi-Quadrat-Test der Zufälligkeit eines Punktmusters anhand von Quadratzählungen durch. Prüft auf Clusterbildung gegenüber Streuung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer."
              },
              "grid_mode": {
                "label": "Gittermodus",
                "description": "Gittermodus: rows_cols oder cell_size."
              },
              "rows": {
                "label": "Zeilen",
                "description": "Zeilen bei grid_mode=rows_cols."
              },
              "cols": {
                "label": "Spalten",
                "description": "Spalten bei grid_mode=rows_cols."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Zellengröße bei grid_mode=cell_size."
              },
              "study_area_mode": {
                "label": "Untersuchungsgebietsmodus",
                "description": "Untersuchungsgebietsmodus: hull, envelope, polygon_layer."
              },
              "study_area_polygon": {
                "label": "Untersuchungsgebietspolygon",
                "description": "Polygonlayer, der bei study_area_mode=polygon_layer verwendet wird."
              },
              "output_grid": {
                "label": "Gitter ausgeben",
                "description": "Optionaler Ausgabepfad des Quadrat-Polygongitters."
              },
              "output_json": {
                "label": "JSON-Ausgabe",
                "description": "Optionaler Ausgabepfad des JSON-Berichts."
              },
              "output_html": {
                "label": "HTML-Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts."
              },
              "output_csv": {
                "label": "CSV-Ausgabe",
                "description": "Optionaler Ausgabepfad der CSV-Zusammenfassung."
              }
            }
          },
          "spatial_lag_regression": {
            "name": "Regression mit räumlicher Verzögerung",
            "description": "Schätzt ein räumliches autoregressives Modell, das endogene Übertragungseffekte erfasst, bei denen die abhängige Variable von räumlichen Nachbarn beeinflusst wird.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "response_field": {
                "label": "Antwortfeld",
                "description": "Antwortvariable (abhängige Variable)."
              },
              "predictor_fields": {
                "label": "Prädiktorfelder",
                "description": "Kommagetrennte Namen der Prädiktorfelder."
              },
              "weights_mode": {
                "label": "Gewichtungsmodus",
                "description": "Räumlicher Nachbarschaftsmodus."
              },
              "k": {
                "label": "K",
                "description": "k-Wert für k_nearest."
              },
              "distance": {
                "label": "Distanz",
                "description": "Entfernungsschwellenwert."
              },
              "row_standardize": {
                "label": "Zeilenstandardisierung",
                "description": "Gewichte zeilenstandardisieren."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorlayer."
              }
            }
          },
          "spatial_error_regression": {
            "name": "Regression mit räumlichem Fehler",
            "description": "Schätzt ein räumliches Fehlermodell, das exogene räumliche Abhängigkeiten in den Residuen infolge ausgelassener Variablen oder Messfehler berücksichtigt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "response_field": {
                "label": "Antwortfeld",
                "description": "Antwortvariable."
              },
              "predictor_fields": {
                "label": "Prädiktorfelder",
                "description": "Kommagetrennte Prädiktorfelder."
              },
              "weights_mode": {
                "label": "Gewichtungsmodus",
                "description": "Räumlicher Nachbarschaftsmodus."
              },
              "k": {
                "label": "K",
                "description": "k für k_nearest."
              },
              "distance": {
                "label": "Distanz",
                "description": "Entfernungsschwellenwert."
              },
              "row_standardize": {
                "label": "Zeilenstandardisierung",
                "description": "Gewichte zeilenstandardisieren."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorlayer."
              }
            }
          },
          "geographically_weighted_regression": {
            "name": "Geographisch gewichtete Regression",
            "description": "Lokale lineare Regression mit distanzabhängig abklingenden Kernelgewichten (GWR): Koeffizienten, lokales R², Residuen und Vorhersagen je Objekt sowie globale Diagnosen zu AICc / R²; feste oder adaptive Bandbreite, optional per AICc optimiert.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Objektlayer (Punkte oder andere Geometrien über ihren repräsentativen Punkt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "y_field": {
                "label": "Y-Feld",
                "description": "Abhängiges numerisches Feld (Antwortvariable)."
              },
              "x_fields": {
                "label": "X-Felder",
                "description": "Kommagetrennte erklärende numerische Felder."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Entfernungsabkling-Kernel: 'gaussian' (Standard) oder 'bisquare'."
              },
              "bandwidth_type": {
                "label": "Bandbreitentyp",
                "description": "'adaptive' (Standard; Bandbreite = k nächste Nachbarn) oder 'fixed' (Bandbreite = eine Entfernung)."
              },
              "bandwidth": {
                "label": "Bandbreite",
                "description": "Bandbreite: Anzahl der Nachbarn bei adaptive oder Entfernung bei fixed. Weglassen, um sie durch Minimierung des AICc zu wählen."
              }
            }
          },
          "ripleys_k_test": {
            "name": "Ripleys-K-Test",
            "description": "Berechnet die mehrskalige Clusterstatistik Ripley's K. Zeigt maßstabsabhängige Clusterbildung/Streuung über Distanzbereiche.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer."
              },
              "max_distance": {
                "label": "Maximale Distanz",
                "description": "Maximale Analyseentfernung."
              },
              "step_size": {
                "label": "Schrittweite",
                "description": "Schrittweite der Entfernung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabevektor mit K-Statistiken."
              }
            }
          },
          "envelope_test": {
            "name": "Hüllkurventest",
            "description": "Führt einen Monte-Carlo-Hüllkurventest durch, der das beobachtete Muster mit der CSR-Nullverteilung vergleicht. Bestimmt die Signifikanz von Clusterbildung/Streuung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer."
              },
              "num_simulations": {
                "label": "Anzahl Simulationen",
                "description": "Anzahl der Monte-Carlo-Simulationen."
              },
              "max_distance": {
                "label": "Maximale Distanz",
                "description": "Maximale Analyseentfernung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabevektor mit Hüllkurvengrenzen."
              }
            }
          },
          "point_process_residuals": {
            "name": "Residuen des Punktprozesses",
            "description": "Berechnet Residuen aus einem angepassten Poisson-Punktprozessmodell für Diagnosezwecke. Erkennt nicht modellierte räumliche Strukturen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer."
              },
              "intensity_field": {
                "label": "Intensitätsfeld",
                "description": "Feld der angepassten Intensität."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabevektor mit Residuen."
              }
            }
          },
          "ripleys_k_function": {
            "name": "Ripleys K-Funktion",
            "description": "Berechnet K(t) und L(t) zur Charakterisierung räumlicher Clustermuster.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Punktvektorlayer."
              },
              "max_distance": {
                "label": "Maximale Distanz",
                "description": "Maximaler Entfernungsschwellenwert."
              },
              "num_distances": {
                "label": "Anzahl Distanzen",
                "description": "Anzahl der Entfernungsschritte."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-CSV."
              }
            }
          },
          "point_pattern_envelope": {
            "name": "Hüllkurve des Punktmusters",
            "description": "Erzeugt Hüllkurven kritischer Bänder für Hypothesentests gegen CSR.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Punktvektorlayer."
              },
              "max_distance": {
                "label": "Maximale Distanz",
                "description": "Maximale Entfernung."
              },
              "num_distances": {
                "label": "Anzahl Distanzen",
                "description": "Entfernungsklassen."
              },
              "num_simulations": {
                "label": "Anzahl Simulationen",
                "description": "Monte-Carlo-Wiederholungen."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Signifikanzniveau."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-CSV."
              }
            }
          },
          "inhomogeneous_baseline": {
            "name": "Inhomogene Grundlinie",
            "description": "Schätzt eine Intensitätsoberfläche und berechnet eine intensitätskorrigierte K-Funktion.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Punktvektorlayer."
              },
              "max_distance": {
                "label": "Maximale Distanz",
                "description": "Maximale Entfernung."
              },
              "num_distances": {
                "label": "Anzahl Distanzen",
                "description": "Entfernungsklassen."
              },
              "bandwidth": {
                "label": "Bandbreite",
                "description": "KDE-Bandbreite (automatische Wahl, wenn nicht angegeben)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-CSV."
              }
            }
          },
          "hotspot_vs_process": {
            "name": "Hotspot gegen Prozess",
            "description": "Vergleicht Hotspot-Muster mit der zugrunde liegenden Intensität des Punktprozesses.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Punktvektorlayer."
              },
              "hotspot_field": {
                "label": "Hotspot-Feld",
                "description": "Feld der Hotspot-Klassifikation."
              },
              "intensity_field": {
                "label": "Intensitätsfeld",
                "description": "Intensitätsfeld."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-CSV."
              }
            }
          },
          "point_process_residuals_comparison": {
            "name": "Vergleich der Punktprozessresiduen",
            "description": "Berechnet Residuendiagnosen zur Prüfung der Modelladäquanz.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Punktvektorlayer."
              },
              "observed_field": {
                "label": "Beobachtungsfeld",
                "description": "Feld der beobachteten Werte."
              },
              "predicted_field": {
                "label": "Vorhersagefeld",
                "description": "Feld der vorhergesagten Werte."
              },
              "residual_type": {
                "label": "Residuentyp",
                "description": "Residuentyp."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-CSV."
              }
            }
          },
          "construct_vector_tin": {
            "name": "Vektor-TIN aufbauen",
            "description": "Erstellt ein unregelmäßiges Dreiecksnetz (TIN) aus einer Eingabepunktmenge mittels Delaunay-Triangulation.",
            "params": {
              "input_points": {
                "label": "Eingabepunkte",
                "description": "Eingabe-Punkt- oder Multipunkt-Vektorlayer."
              },
              "field_name": {
                "label": "Feldname",
                "description": "Optionaler Feldname für Stützpunkthöhen (numerisches Feld)."
              },
              "use_z": {
                "label": "Z verwenden",
                "description": "Wenn wahr, werden die Z-Werte der Geometrie als Dreieckshöhen verwendet."
              },
              "max_triangle_edge_length": {
                "label": "Maximale Dreieckskantenlänge",
                "description": "Maximal zulässige Kantenlänge der Dreiecke (filtert lange Kanten). 0 oder negativ für keine Begrenzung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonvektorlayer (TIN)."
              }
            }
          },
          "contours_from_points": {
            "name": "Höhenlinien aus Punkten",
            "description": "Erstellt Höhenlinien als Polylinien aus Punkthöhen mithilfe eines Delaunay-TIN.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punkt- oder Multipunkt-Vektorpfad."
              },
              "base": {
                "label": "Basis",
                "description": "Basishöhe der Höhenlinien (Standard 0.0)."
              },
              "field_name": {
                "label": "Feldname",
                "description": "Numerisches Attributfeld mit Höhenwerten (ignoriert bei use_z_values=true)."
              },
              "interval": {
                "label": "Intervall",
                "description": "Äquidistanz der Höhenlinien (Standard 10.0)."
              },
              "max_triangle_edge_length": {
                "label": "Maximale Dreieckskantenlänge",
                "description": "Maximale Dreieckskantenlänge für die Höhenlinienberechnung (Karteneinheiten)."
              },
              "smooth": {
                "label": "Glätten",
                "description": "Größe des Glättungsfilters (ungerade ganze Zahl, Standard 9)."
              },
              "use_z_values": {
                "label": "Z-Werte verwenden",
                "description": "Z-Werte der Geometrie als Höhen verwenden (Standard false)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "contours_from_raster": {
            "name": "Höhenlinien aus Raster",
            "description": "Erstellt Höhenlinien als Polylinien aus einem Raster-Oberflächenmodell.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasteroberfläche oder typisiertes Rasterobjekt."
              },
              "base": {
                "label": "Basis",
                "description": "Basishöhe der Höhenlinien (Standard 0.0)."
              },
              "interval": {
                "label": "Intervall",
                "description": "Äquidistanz der Höhenlinien (Standard 10.0)."
              },
              "smooth": {
                "label": "Glätten",
                "description": "Größe des Glättungsfilters (ungerade ganze Zahl, Standard 9)."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Minimaler Linienablenkungswinkel in Grad für die Vereinfachung (Standard 10.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "extract_nodes": {
            "name": "Knoten extrahieren",
            "description": "Wandelt Stützpunkte von Polylinien und Polygonen in Punktobjekte um.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polylinien- oder Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad."
              }
            }
          },
          "extract_raster_values_at_points": {
            "name": "Rasterwerte an Punkten extrahieren",
            "description": "Tastet ein oder mehrere Raster an Punktpositionen ab und schreibt die Werte in Punktattribute.",
            "params": {
              "rasters": {
                "label": "Raster",
                "description": "Eingabe-Rasterpfade als Array oder getrennte Zeichenkette."
              },
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad."
              }
            }
          },
          "find_lowest_or_highest_points": {
            "name": "Tiefste oder höchste Punkte finden",
            "description": "Ermittelt die niedrigsten und/oder höchsten Rasterzellen und gibt ihre Positionen als Punkte aus.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster."
              },
              "out_type": {
                "label": "Ausgabetyp",
                "description": "Ausgabetyp: lowest, highest oder both."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad."
              }
            }
          },
          "hexagonal_grid_from_raster_base": {
            "name": "Hexagonalgitter auf Rasterbasis",
            "description": "Erstellt ein hexagonales Polygongitter mit einstellbarer Breite und Ausrichtung, das eine unverzerrte Parkettierung für Heatmaps und Aggregationen bietet.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Basisraster, das die Gitterausdehnung bestimmt."
              },
              "width": {
                "label": "Breite",
                "description": "Sechseckbreite in Karteneinheiten."
              },
              "orientation": {
                "label": "Orientierung",
                "description": "Sechseckausrichtung: horizontal oder vertical."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Polygonvektors."
              }
            }
          },
          "hexagonal_grid_from_vector_base": {
            "name": "Hexagonalgitter auf Vektorbasis",
            "description": "Erstellt ein an der Ausdehnung eines Vektorlayers ausgerichtetes hexagonales Polygongitter, das eine unverzerrte räumliche Aggregation und Dichtevisualisierung ermöglicht.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Basis-Vektorlayer, der die Gitterausdehnung bestimmt."
              },
              "width": {
                "label": "Breite",
                "description": "Sechseckbreite in Karteneinheiten."
              },
              "orientation": {
                "label": "Orientierung",
                "description": "Sechseckausrichtung: horizontal oder vertical."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Polygonvektors."
              }
            }
          },
          "layer_footprint_raster": {
            "name": "Umriss des Rasterlayers",
            "description": "Erstellt einen Polygonumriss, der die gesamte Ausdehnung eines Eingaberasters darstellt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Polygonvektors."
              }
            }
          },
          "layer_footprint_vector": {
            "name": "Umriss des Vektorlayers",
            "description": "Erstellt einen Polygonumriss, der die gesamte umschließende Ausdehnung eines Eingabe-Vektorlayers darstellt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Polygonvektors."
              }
            }
          },
          "medoid": {
            "name": "Medoid",
            "description": "Berechnet Medoidpunkte aus Vektorgeometrien.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad der Medoid-Punkte."
              }
            }
          },
          "random_points_in_polygon": {
            "name": "Zufallspunkte im Polygon",
            "description": "Erzeugt gleichverteilte Zufallspunkte innerhalb der Eingabe-Polygongeometrien.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonlayer."
              },
              "num_points": {
                "label": "Anzahl Punkte",
                "description": "Anzahl der zu erzeugenden Zufallspunkte."
              },
              "seed": {
                "label": "Seed",
                "description": "Optionaler RNG-Seed für die Reproduzierbarkeit."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "rectangular_grid_from_raster_base": {
            "name": "Rechteckgitter auf Rasterbasis",
            "description": "Erstellt ein rechteckiges Polygongitter, das die Ausdehnung eines Rasters abdeckt.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Basisraster, das die Gitterausdehnung bestimmt."
              },
              "width": {
                "label": "Breite",
                "description": "Breite der Gitterzellen in Karteneinheiten."
              },
              "height": {
                "label": "Höhe",
                "description": "Höhe der Gitterzellen in Karteneinheiten."
              },
              "x_origin": {
                "label": "X-Ursprung",
                "description": "Optionaler X-Ursprung für die Gitterausrichtung."
              },
              "y_origin": {
                "label": "Y-Ursprung",
                "description": "Optionaler Y-Ursprung für die Gitterausrichtung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Polygonvektors."
              }
            }
          },
          "rectangular_grid_from_vector_base": {
            "name": "Rechteckgitter auf Vektorbasis",
            "description": "Erstellt ein rechteckiges Polygongitter, das die umschließende Ausdehnung eines Vektorlayers abdeckt.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Basis-Vektorlayer, der die Gitterausdehnung bestimmt."
              },
              "width": {
                "label": "Breite",
                "description": "Breite der Gitterzellen in Karteneinheiten."
              },
              "height": {
                "label": "Höhe",
                "description": "Höhe der Gitterzellen in Karteneinheiten."
              },
              "x_origin": {
                "label": "X-Ursprung",
                "description": "Optionaler X-Ursprung für die Gitterausrichtung."
              },
              "y_origin": {
                "label": "Y-Ursprung",
                "description": "Optionaler Y-Ursprung für die Gitterausrichtung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Polygonvektors."
              }
            }
          },
          "vector_hex_binning": {
            "name": "Vektor-Hexagon-Binning",
            "description": "Aggregiert Punktobjekte in hexagonale Klassen und zählt die Punkte je Sechseckzelle.",
            "params": {
              "vector_points": {
                "label": "Vektorpunkte",
                "description": "Eingabe-Punkt- oder Multipunkt-Vektorlayer."
              },
              "width": {
                "label": "Breite",
                "description": "Sechseckbreite (Abstand zwischen gegenüberliegenden Seiten)."
              },
              "orientation": {
                "label": "Orientierung",
                "description": "Sechseckausrichtung: 'h' für horizontal (Spitze oben) oder 'v' für vertikal (flache Seite oben)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Sechseckpolygonlayer mit Anzahlen."
              }
            }
          },
          "voronoi_diagram": {
            "name": "Voronoi-Diagramm",
            "description": "Erstellt Voronoi-Polygone (Thiessen-Polygone) aus Eingabepunktpositionen.",
            "params": {
              "input_points": {
                "label": "Eingabepunkte",
                "description": "Eingabe-Punkt- oder Multipunkt-Vektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad der Voronoi-Polygone."
              }
            }
          },
          "add_field": {
            "name": "Feld hinzufügen",
            "description": "Fügt ein neues Attributfeld mit optionalem Standardwert hinzu.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "field": {
                "label": "Feld",
                "description": "Neuer Feldname."
              },
              "field_type": {
                "label": "Feldtyp",
                "description": "Feldtyp: integer, float, text, boolean."
              },
              "default": {
                "label": "Standard",
                "description": "Optionaler Standardwert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "add_geometry_attributes": {
            "name": "Geometrieattribute hinzufügen",
            "description": "Berechnet automatisch geometrische Eigenschaften (Fläche, Länge, Umfang, Schwerpunkt) und fügt sie als neue Felder hinzu; unterstützt planare und geodätische Messungen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "measurement_mode": {
                "label": "Messmodus",
                "description": "Messmethode: auto (Standard), planar oder geodesic."
              },
              "area": {
                "label": "Fläche",
                "description": "Flächenfeld einbeziehen (AREA_M2 bei geodesic, AREA_MAP2 bei planar)."
              },
              "length": {
                "label": "Länge",
                "description": "Längenfeld einbeziehen (LENGTH_M bei geodesic, LENGTH_MAP bei planar)."
              },
              "perimeter": {
                "label": "Umfang",
                "description": "Umfangsfeld einbeziehen (PERIM_M bei geodesic, PERIM_MAP bei planar)."
              },
              "centroid": {
                "label": "Schwerpunkt",
                "description": "Schwerpunkt-X/Y-Felder einbeziehen (Standard true)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "attribute_correlation": {
            "name": "Attributkorrelation",
            "description": "Führt eine Pearson-Korrelationsanalyse für numerische Attributfelder von Vektordaten durch.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorpfad."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts (Alias: output_html_file)."
              }
            }
          },
          "attribute_histogram": {
            "name": "Attributhistogramm",
            "description": "Erstellt ein Histogramm für numerische Feldwerte in einer Vektor-Attributtabelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorpfad."
              },
              "field": {
                "label": "Feld",
                "description": "Name des numerischen Attributfelds."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts (Alias: output_html_file)."
              }
            }
          },
          "attribute_scattergram": {
            "name": "Attribut-Streudiagramm",
            "description": "Berechnet zusammenfassende Streudiagrammstatistiken zwischen zwei numerischen Vektorfeldern.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorpfad."
              },
              "fieldx": {
                "label": "Feld X",
                "description": "Name des numerischen X-Achsenfelds."
              },
              "fieldy": {
                "label": "Feld Y",
                "description": "Name des numerischen Y-Achsenfelds."
              },
              "trendline": {
                "label": "Trendlinie",
                "description": "Trendlinien-Zusammenfassung einbeziehen (Standard false)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts (Alias: output_html_file)."
              }
            }
          },
          "delete_field": {
            "name": "Feld löschen",
            "description": "Löscht ein oder mehrere Attributfelder aus einem Vektorlayer.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "fields": {
                "label": "Felder",
                "description": "Kommagetrennte Namen der zu löschenden Felder."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "extract_by_attribute": {
            "name": "Nach Attribut extrahieren",
            "description": "Extrahiert Vektorobjekte, die einen Attributausdruck erfüllen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "statement": {
                "label": "Anweisung",
                "description": "Boolescher Ausdruck, der gegen die Attributfelder ausgewertet wird; akzeptiert SQL-artige Aliasse AND/OR/NOT/XOR."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "field_calculator": {
            "name": "Feldrechner",
            "description": "Berechnet einen Feldwert aus einem Ausdruck mit Objektattributen und Geometrievariablen; unterstützt SQL-artige CASE-, CAST- und Null-Prüfungen sowie UPDATE ... SET ... [WHERE ...]-Hüllen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "field": {
                "label": "Feld",
                "description": "Name des Ausgabefelds."
              },
              "field_type": {
                "label": "Feldtyp",
                "description": "Typ des Ausgabefelds: float, integer, text."
              },
              "expression": {
                "label": "Ausdruck",
                "description": "Ausdruck, der pro Objekt ausgewertet wird. Unterstützt SQL-artiges CASE, CAST(... AS type), IS NULL/IS NOT NULL sowie UPDATE ... SET FIELD = ... [WHERE ...]-Umhüllungen."
              },
              "overwrite": {
                "label": "Überschreiben",
                "description": "Vorhandenes Feld überschreiben, falls vorhanden (Standard true)."
              },
              "preview_rows": {
                "label": "Vorschauzeilen",
                "description": "Optionale Anzahl der Vorschauzeilen, die in der Ergebnisnutzlast zurückgegeben werden. Wenn > 0, kann die Ausgabe bei einer reinen Vorschauauswertung entfallen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad. Optional, wenn preview_rows > 0."
              }
            }
          },
          "filter_vector_features_by_area": {
            "name": "Vektorobjekte nach Fläche filtern",
            "description": "Filtert Polygonobjekte unterhalb eines Mindestflächen-Schwellenwerts.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Minimale beizubehaltende Polygonfläche in quadrierten Koordinateneinheiten des Layers."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "list_unique_values": {
            "name": "Eindeutige Werte auflisten",
            "description": "Listet eindeutige Werte und deren Häufigkeiten in einem Vektor-Attributfeld auf.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorpfad."
              },
              "field": {
                "label": "Feld",
                "description": "Name des Attributfelds."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-CSV-Pfad."
              }
            }
          },
          "rename_field": {
            "name": "Feld umbenennen",
            "description": "Benennt ein Attributfeld in einem Vektorlayer um.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "field": {
                "label": "Feld",
                "description": "Name des vorhandenen Felds."
              },
              "new_field": {
                "label": "Neues Feld",
                "description": "Name des Ersatzfelds."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "download_osm_vector": {
            "name": "OSM-Vektordaten herunterladen",
            "description": "Lädt OpenStreetMap-Objekte für einen Begrenzungsrahmen über die Overpass API herunter und schreibt das Ergebnis als Vektorlayer.",
            "params": {
              "west": {
                "label": "West",
                "description": "Längengrad der Westgrenze (EPSG:4326)."
              },
              "south": {
                "label": "Süd",
                "description": "Breitengrad der Südgrenze (EPSG:4326)."
              },
              "east": {
                "label": "Ost",
                "description": "Längengrad der Ostgrenze (EPSG:4326)."
              },
              "north": {
                "label": "Nord",
                "description": "Breitengrad der Nordgrenze (EPSG:4326)."
              },
              "input_extent_epsg": {
                "label": "EPSG der Eingabeausdehnung",
                "description": "EPSG-Code der Eingabeausdehnung west/south/east/north (Standard 4326)."
              },
              "filter_preset": {
                "label": "Filtervoreinstellung",
                "description": "Voreinstellung der Objektklasse: all, roads, buildings, water, landuse, trails, parks, rail, amenities, boundaries, transit, poi (Standard all)."
              },
              "include_tags": {
                "label": "Tags einschließen",
                "description": "Durch Semikolon getrennte Filterliste von Tag-Schlüsseln, z. B. amenity;shop."
              },
              "include_key_values": {
                "label": "Schlüssel-Wert-Paare einschließen",
                "description": "Durch Semikolon getrennte Filterliste von key=value-Paaren, z. B. amenity=school;building=yes."
              },
              "filter_key": {
                "label": "Filterschlüssel",
                "description": "Veralteter einzelner Tag-Schlüsselfilter (veraltet; include_tags verwenden)."
              },
              "filter_key_value": {
                "label": "Filterschlüsselwert",
                "description": "Veralteter einzelner key=value-Filter (veraltet; include_key_values verwenden)."
              },
              "include_points": {
                "label": "Punkte einschließen",
                "description": "OSM-Knotenobjekte mit Tags als Punktgeometrien einbeziehen (Standard wahr)."
              },
              "include_lines": {
                "label": "Linien einschließen",
                "description": "OSM-Way-Objekte als LineString-Geometrien einbeziehen (Standard wahr)."
              },
              "include_polygons": {
                "label": "Polygone einschließen",
                "description": "Geschlossene OSM-Ways mit Flächen-Tags als Polygongeometrien einbeziehen (Standard wahr)."
              },
              "clip_to_extent": {
                "label": "Auf Ausdehnung zuschneiden",
                "description": "Ausgabegeometrien auf die Begrenzungsrahmen-Ausdehnung der Abfrage zuschneiden (Standard wahr)."
              },
              "split_output_by_geometry": {
                "label": "Ausgabe nach Geometrie aufteilen",
                "description": "Separate Ausgaben je Geometrietyp schreiben (<output>_points|lines|polygons.ext)."
              },
              "output_epsg": {
                "label": "Ausgabe-EPSG",
                "description": "Ausgabe auf diesen EPSG-Code umprojizieren; auslassen, um EPSG:4326 beizubehalten."
              },
              "overpass_profile": {
                "label": "Overpass-Profil",
                "description": "Overpass-Endpunktprofil: main, kumi, fr oder custom (Standard main)."
              },
              "overpass_url": {
                "label": "Overpass-URL",
                "description": "URL des Overpass-API-Endpunkts (Standard https://overpass-api.de/api/interpreter)."
              },
              "timeout_seconds": {
                "label": "Zeitlimit (Sekunden)",
                "description": "Abfrage-Timeout in Sekunden (Standard 25)."
              },
              "max_elements": {
                "label": "Maximale Elemente",
                "description": "Maximale Anzahl zurückgegebener Overpass-Elemente, bevor ein Fehler ausgelöst wird (Standard 50 000)."
              },
              "chunk_large_aoi": {
                "label": "Großes Untersuchungsgebiet aufteilen",
                "description": "Größere Untersuchungsgebiete automatisch in mehrere Overpass-Anfragen aufteilen (Standard wahr)."
              },
              "chunk_max_area_deg2": {
                "label": "Maximale Teilfläche (Grad²)",
                "description": "Maximale Fläche je Teil in Quadratgrad beim Aufteilen (Standard 4.0)."
              },
              "max_chunk_count": {
                "label": "Maximale Teilanzahl",
                "description": "Harte Obergrenze der Teilanzahl beim Aufteilen großer Untersuchungsgebiete (Standard 64)."
              },
              "chunk_parallel_requests": {
                "label": "Parallele Teilanfragen",
                "description": "Maximale parallele Teilanfragen für große Untersuchungsgebiete (Standard 1 = sequenziell)."
              },
              "cache_dir": {
                "label": "Cache-Verzeichnis",
                "description": "Optionales Verzeichnis zum Zwischenspeichern der Overpass-JSON-Antworten nach Endpunkt+Abfrage-Hash."
              },
              "cache_ttl_hours": {
                "label": "Cache-Lebensdauer (Stunden)",
                "description": "Lebensdauer des Caches in Stunden (Standard 24; 0 bedeutet keine Ablaufprüfung)."
              },
              "provenance_output": {
                "label": "Provenienz-Ausgabe",
                "description": "Optionaler JSON-Pfad zum Schreiben einer Sidecar-Datei mit Abfrage-/Provenienzmetadaten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Vektors; wenn ausgelassen, wird eine temporäre Ausgabe verwendet."
              }
            }
          },
          "assign_projection_lidar": {
            "name": "Projektion für LiDAR zuweisen",
            "description": "Weist einer LiDAR-Punktwolke ein Koordinatenbezugssystem zu, ohne ihre Punkte umzuprojizieren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der LiDAR-Eingabedatei (LAS/LAZ/COPC oder In-Memory-Handle)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG-Code des zuzuweisenden KBS, z. B. 4326 (WGS84) oder 3857 (Web Mercator). Koordinaten werden nicht transformiert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad der LiDAR-Datei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "assign_projection_raster": {
            "name": "Projektion für Raster zuweisen",
            "description": "Weist einem Raster ein Koordinatenbezugssystem zu, ohne seine Zellen zu verzerren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei (oder In-Memory-Handle)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG-Code des zuzuweisenden KBS, z. B. 4326 (WGS84) oder 3857 (Web Mercator). Koordinaten werden nicht transformiert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "assign_projection_vector": {
            "name": "Projektion für Vektor zuweisen",
            "description": "Weist einem Vektorlayer ein Koordinatenbezugssystem zu, ohne seine Geometrien umzuprojizieren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Vektordatei, Format wird automatisch erkannt (oder In-Memory-Handle)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG-Code des zuzuweisenden KBS, z. B. 4326 (WGS84) oder 3857 (Web Mercator). Koordinaten werden nicht transformiert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              }
            }
          },
          "georeference_raster_from_control_points": {
            "name": "Raster über Passpunkte georeferenzieren",
            "description": "Passt aus GCPs eine Transformation an und entzerrt ein Raster in eine georeferenzierte Ausgabe.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "control_points": {
                "label": "Kontrollpunkte",
                "description": "Pfad der Passpunkt-CSV mit pixel_x,pixel_y,map_x,map_y (und akzeptierten Aliasen)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Ziel-EPSG-Code."
              },
              "transform_type": {
                "label": "Transformationstyp",
                "description": "Transformationstyp: affine, projective, polynomial oder thin_plate_spline."
              },
              "transform_order": {
                "label": "Transformationsordnung",
                "description": "Polynomordnung bei transform_type=polynomial."
              },
              "resample": {
                "label": "Neu abtasten",
                "description": "Resampling-Methode; Standard bilinear."
              },
              "allow_auto_downgrade": {
                "label": "Automatische Herabstufung erlauben",
                "description": "Automatische Herabstufung auf eine einfachere Transformation erlauben, wenn nur wenige Passpunkte vorliegen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des georeferenzierten Rasters."
              },
              "report": {
                "label": "Bericht",
                "description": "Ausgabepfad des Berichts (JSON)."
              }
            }
          },
          "reproject_lidar": {
            "name": "LiDAR umprojizieren",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe"
              },
              "dst_epsg": {
                "label": "Ziel-EPSG",
                "description": "Ziel-EPSG"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe"
              },
              "use_3d_transform": {
                "label": "3D-Transformation verwenden",
                "description": "3D-Transformation verwenden"
              },
              "failure_policy": {
                "label": "Fehlerregel",
                "description": "Fehlerregel"
              },
              "coordinate_epoch": {
                "label": "Koordinatenepoche",
                "description": "Koordinatenepoche"
              },
              "source_reference_epoch": {
                "label": "Quell-Referenzepoche",
                "description": "Quell-Referenzepoche"
              },
              "target_reference_epoch": {
                "label": "Ziel-Referenzepoche",
                "description": "Ziel-Referenzepoche"
              },
              "operation_code": {
                "label": "Operationscode",
                "description": "Operationscode"
              },
              "prefer_official_operation": {
                "label": "Offizielle Operation bevorzugen",
                "description": "Offizielle Operation bevorzugen"
              },
              "epoch_policy": {
                "label": "Epochenregel",
                "description": "Epochenregel"
              }
            }
          },
          "reproject_raster": {
            "name": "Raster umprojizieren",
            "description": "Projiziert ein Raster in ein Ziel-Koordinatenbezugssystem (EPSG) um (Warp).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei. Muss ein Quell-KBS (EPSG oder WKT) tragen."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Ziel-EPSG-Code, z. B. 3857 (Web Mercator) oder 4326 (WGS84)."
              },
              "method": {
                "label": "Methode",
                "description": "Resampling-Methode: nearest (Standard), bilinear, cubic, lanczos, average, min, max, mode, median."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "reproject_vector": {
            "name": "Vektor umprojizieren",
            "description": "Projiziert Vektorgeometrien in die Ziel-EPSG-Projektion um und bewahrt dabei Topologie und Attribute, was die Integration mehrerer Quellen ermöglicht.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Ziel-EPSG-Code."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "orthorectification": {
            "name": "Orthorektifizierung",
            "description": "DEM-basierte geometrische Korrektur von Rohbildern mithilfe des RPC-Kameramodells. Entfernt reliefbedingte Lageversätze für eine georeferenzierte Orthobildausgabe.",
            "params": {
              "input_raster": {
                "label": "Eingaberaster",
                "description": "Pfad des rohen (unkorrigierten) Eingabebildrasters. RPC-Metadaten müssen in der Datei eingebettet oder in einer benachbarten .RPB-Sidecar-Datei vorhanden sein."
              },
              "input_dem": {
                "label": "Eingabe-DEM",
                "description": "DEM-Raster zur Ermittlung der Geländehöhe für jedes Ausgabepixel. Sollte die gesamte Szenenausdehnung abdecken. Falls nicht in geografischen Koordinaten, projiziert das Werkzeug bei Bedarf um."
              },
              "output_epsg": {
                "label": "Ausgabe-EPSG",
                "description": "EPSG-Code des Ausgabe-Koordinatenbezugssystems (Standard 4326 geografisch; für UTM-Zone 17N ein projiziertes KBS wie 32617 angeben)."
              },
              "output_resolution": {
                "label": "Ausgabeauflösung",
                "description": "Pixelauflösung der Ausgabe in den Einheiten des Ausgabe-KBS (z. B. Grad bei geografisch, Meter bei projiziert). Standard ist die näherungsweise GSD des Eingabebildes."
              },
              "resample_method": {
                "label": "Resampling-Methode",
                "description": "Resampling-Methode für die Ausgabe: nearest, bilinear (Standard), cubic."
              },
              "nodata_value": {
                "label": "NoData-Wert",
                "description": "NoData-Wert für Pixel ohne gültige Quellabdeckung (Standard wie Eingabe)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Orthobildrasters."
              }
            }
          },
          "average_flowpath_slope": {
            "name": "Mittleres Gefälle des Fließwegs",
            "description": "Berechnet das mittlere Gefälle der Fließwege, die durch jede DEM-Zelle verlaufen.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Senkenfreies Eingabe-DEM-Raster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "average_upslope_flowpath_length": {
            "name": "Mittlere Länge des oberliegenden Fließwegs",
            "description": "Berechnet die mittlere Länge der oberliegenden Fließwege, die durch jede DEM-Zelle verlaufen.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Senkenfreies Eingabe-DEM-Raster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "d8_flow_accum": {
            "name": "D8-Abflussakkumulation",
            "description": "Berechnet die D8-Abflussakkumulation aus einem DEM oder einem D8-Fließrichtungsraster.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-DEM oder D8-Fließrichtungsraster"
              },
              "clip": {
                "label": "Zuschneiden",
                "description": "Maximum der Anzeigebeschneidung (aus Kompatibilitätsgründen akzeptiert)"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "ESRI-Fließrichtungscodierung für Fließrichtungseingaben verwenden"
              },
              "input_is_pointer": {
                "label": "Eingabe ist Fließrichtung",
                "description": "Eingabe als D8-Fließrichtungsraster behandeln"
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Ausgabe logarithmisch transformieren"
              },
              "out_type": {
                "label": "Ausgabetyp",
                "description": "Ausgabetyp: cells, ca oder sca"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "d8_mass_flux": {
            "name": "D8-Massenfluss",
            "description": "Führt eine D8-basierte Massenflussakkumulation mithilfe von Raster für Eintrag, Effizienz und Absorption durch.",
            "params": {
              "absorption": {
                "label": "Absorption",
                "description": "Raster der Massenverluste je Zelle in Beladungseinheiten."
              },
              "dem": {
                "label": "DEM",
                "description": "Senkenfreies Eingabe-DEM-Raster zur Ableitung der D8-Fließrichtungen."
              },
              "efficiency": {
                "label": "Effizienz",
                "description": "Raster der Übertragungseffizienzwerte, entweder in `[0, 1]` oder in Prozent."
              },
              "loading": {
                "label": "Fracht",
                "description": "Raster der anfänglichen Massenbeladungswerte."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "d8_pointer": {
            "name": "D8-Zeiger",
            "description": "Fließrichtung des steilsten Abstiegs über 8 Nachbarn (N/NO/O/SO/S/SW/W/NW). Grundlage für hydrologische D8-Analysen und die Abgrenzung von Einzugsgebieten.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "ESRI-Fließrichtungscodierung verwenden"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "dinf_flow_accum": {
            "name": "D-Infinity-Abflussakkumulation",
            "description": "Berechnet die D-Infinity-Abflussakkumulation aus einem DEM oder einem D-Infinity-Fließrichtungsraster.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-DEM oder D-Infinity-Fließrichtungsraster"
              },
              "clip": {
                "label": "Zuschneiden",
                "description": "Maximum der Anzeigebeschneidung (aus Kompatibilitätsgründen akzeptiert)"
              },
              "convergence_threshold": {
                "label": "Konvergenzschwellenwert",
                "description": "Schwellenwert, oberhalb dessen der Abfluss nicht verteilt wird"
              },
              "input_is_pointer": {
                "label": "Eingabe ist Fließrichtung",
                "description": "Eingabe als D-Infinity-Fließrichtungsraster behandeln"
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Ausgabe logarithmisch transformieren"
              },
              "out_type": {
                "label": "Ausgabetyp",
                "description": "Ausgabetyp: cells, ca oder sca"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "dinf_mass_flux": {
            "name": "D-Infinity-Massenfluss",
            "description": "Führt eine D-Infinity-Massenflussakkumulation mithilfe von Raster für Eintrag, Effizienz und Absorption durch.",
            "params": {
              "absorption": {
                "label": "Absorption",
                "description": "Eingabe-Absorptionsraster in Beladungseinheiten."
              },
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "efficiency": {
                "label": "Effizienz",
                "description": "Eingabe-Effizienzraster (Werte `0-1` oder Prozent)."
              },
              "loading": {
                "label": "Fracht",
                "description": "Eingabe-Beladungsraster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "dinf_pointer": {
            "name": "D-Infinity-Zeiger",
            "description": "Kontinuierliche Fließrichtungen (0-2π Radiant), die die diagonale Verzerrung von D8 beseitigen. Besser für Sedimenttransport und die Modellierung divergenter Abflüsse.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "downslope_flowpath_length": {
            "name": "Länge des unterliegenden Fließwegs",
            "description": "Berechnet die Länge des unterliegenden Fließwegs von jeder Zelle bis zu einem Auslass in einem D8-Fließrichtungsraster.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "Eingabe-D8-Fließrichtungsraster"
              },
              "watersheds": {
                "label": "Einzugsgebiete",
                "description": "Optionales Einzugsgebietsraster"
              },
              "weights": {
                "label": "Gewichte",
                "description": "Optionales Raster der Distanzgewichtung je Zelle"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "ESRI-Fließrichtungscodierung verwenden"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "fd8_flow_accum": {
            "name": "FD8-Abflussakkumulation",
            "description": "Berechnet die FD8-Abflussakkumulation aus einem DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster"
              },
              "clip": {
                "label": "Zuschneiden",
                "description": "Maximum der Anzeigebeschneidung (aus Kompatibilitätsgründen akzeptiert)"
              },
              "exponent": {
                "label": "Exponent",
                "description": "Neigungsgewichtungsexponent"
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Ausgabe logarithmisch transformieren"
              },
              "out_type": {
                "label": "Ausgabetyp",
                "description": "Ausgabetyp: cells, ca oder sca"
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Schwellenwert"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "fd8_pointer": {
            "name": "FD8-Zeiger",
            "description": "Anteiliger Abfluss zu mehreren unterliegenden Nachbarn, gewichtet nach dem Gefälle. Besser als D8 für dispersive, diffusive Prozesse und die Massenerhaltung.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "flow_accum_full_workflow": {
            "name": "Vollständiger Workflow zur Abflussakkumulation",
            "description": "Führt einen vollständigen Ablauf der nicht divergenten Abflussakkumulation aus und gibt das durchbrochene DEM, das Fließrichtungsraster und die Akkumulation zurück.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "clip": {
                "label": "Zuschneiden",
                "description": "Wenn wahr, wird das Anzeigemaximum der Akkumulation beschnitten (Kompatibilitätsverhalten)."
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Wenn wahr, wird die Fließrichtungsausgabe im Esri-Fließrichtungsstil codiert."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Wenn wahr, werden die Akkumulationswerte logarithmisch transformiert."
              },
              "out_type": {
                "label": "Ausgabetyp",
                "description": "Einer von `\"cells\"`, `\"ca\"`, `\"sca\"` (Standard)."
              },
              "breached_dem_output": {
                "label": "Ausgabe durchbrochenes DEM",
                "description": "Optionaler Ausgabepfad für das senkenfreie DEM-Raster."
              },
              "flow_dir_output": {
                "label": "Fließrichtungsausgabe",
                "description": "Optionaler Ausgabepfad für das Fließrichtungsraster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für das Abflussakkumulationsraster."
              },
              "output_pointer": {
                "label": "Fließrichtung ausgeben",
                "description": "Optionaler Ausgabepfad für das D8-Fließrichtungsraster (Alias von flow_dir_output; ESRI-codiert, wenn esri_pntr gesetzt ist)"
              }
            }
          },
          "flow_length_diff": {
            "name": "Differenz der Fließlänge",
            "description": "Berechnet lokale maximale absolute Differenzen der unterliegenden Fließweglänge aus einem D8-Fließrichtungsraster.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "Eingabe-D8-Fließrichtungsraster."
              },
              "weights": {
                "label": "Gewichte",
                "description": "Gewichte"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Wenn wahr, werden die Fließrichtungswerte mit der ESRI-D8-Codierung interpretiert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "max_upslope_flowpath_length": {
            "name": "Maximale Länge des oberliegenden Fließwegs",
            "description": "Berechnet die maximale Länge der oberliegenden Fließwege, die durch jede DEM-Zelle verlaufen.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Senkenfreies Eingabe-DEM-Raster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "max_upslope_value": {
            "name": "Maximaler oberliegender Wert",
            "description": "Überträgt den maximalen oberliegenden Wert entlang der D8-Fließwege über ein DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster"
              },
              "values": {
                "label": "Werte",
                "description": "Eingabe-Werteraster"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "mdinf_flow_accum": {
            "name": "MD-Infinity-Abflussakkumulation",
            "description": "Mehrfachabflussakkumulation mit Gewichtung nach dem Gefälle (Exponent 1.1). Wägt eine realistische Verteilung gegen die Identifikation konzentrierter Hauptabflüsse ab. Ausgaben: Zellen, CA oder SCA.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "clip": {
                "label": "Zuschneiden",
                "description": "Von der API akzeptiertes Kompatibilitätsflag."
              },
              "convergence_threshold": {
                "label": "Konvergenzschwellenwert",
                "description": "Schwellenwert, oberhalb dessen der Abfluss nicht verteilt wird"
              },
              "exponent": {
                "label": "Exponent",
                "description": "Neigungsgewichtungsexponent (Standard `1.1`)."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Ausgabe logarithmisch transformieren"
              },
              "out_type": {
                "label": "Ausgabetyp",
                "description": "Einer von `\"cells\"`, `\"ca\"`, `\"sca\"` (Standard)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "minimal_dispersion_flow_algorithm": {
            "name": "Fließalgorithmus minimaler Dispersion",
            "description": "Erzeugt MDFA-Raster für Fließrichtung und Abflussakkumulation aus einem DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster"
              },
              "clip": {
                "label": "Zuschneiden",
                "description": "Von der API akzeptiertes Kompatibilitätsflag."
              },
              "debug_stats": {
                "label": "Debug-Statistiken",
                "description": "Einzeilige MDFA-Diagnose ausgeben (Anzahlen und Rohmaximum)"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Wenn wahr, wird die Fließrichtungsausgabe im Esri-Fließrichtungsstil codiert."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Wenn wahr, werden die Akkumulationswerte logarithmisch transformiert."
              },
              "out_type": {
                "label": "Ausgabetyp",
                "description": "Einer von `\"cells\"`, `\"ca\"`, `\"sca\"` (Standard)."
              },
              "path_corrected_direction_preference": {
                "label": "Pfadkorrigierte Richtungspräferenz",
                "description": "Präferenzparameter `p` in `[0, 1]`; `1.0` ist vollständig nicht-dispersiv."
              },
              "flow_dir_output": {
                "label": "Fließrichtungsausgabe",
                "description": "Optionaler Ausgabepfad für das Fließrichtungsraster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für das Abflussakkumulationsraster."
              }
            }
          },
          "num_inflowing_neighbours": {
            "name": "Anzahl einströmender Nachbarn",
            "description": "Zählt für jede DEM-Zelle die Anzahl der zufließenden D8-Nachbarn.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "qin_flow_accumulation": {
            "name": "Qin-Abflussakkumulation",
            "description": "Berechnet die Qin-MFD-Abflussakkumulation aus einem DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "clip": {
                "label": "Zuschneiden",
                "description": "Von der API akzeptiertes Kompatibilitätsflag."
              },
              "convergence_threshold": {
                "label": "Konvergenzschwellenwert",
                "description": "Schwellenwert, oberhalb dessen der Abfluss nicht verteilt wird"
              },
              "exponent": {
                "label": "Exponent",
                "description": "Exponentenparameter der Obergrenze (Standard `10.0`)."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Ausgabe logarithmisch transformieren"
              },
              "max_slope": {
                "label": "Maximale Neigung",
                "description": "Obergrenze der Neigung in Grad für die dynamische Exponentenfunktion (Standard `45.0`)."
              },
              "out_type": {
                "label": "Ausgabetyp",
                "description": "Einer von `\"cells\"`, `\"ca\"`, `\"sca\"` (Standard)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "quinn_flow_accumulation": {
            "name": "Quinn-Abflussakkumulation",
            "description": "Berechnet die Quinn-MFD-Abflussakkumulation aus einem DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "clip": {
                "label": "Zuschneiden",
                "description": "Von der API akzeptiertes Kompatibilitätsflag."
              },
              "convergence_threshold": {
                "label": "Konvergenzschwellenwert",
                "description": "Schwellenwert, oberhalb dessen der Abfluss nicht verteilt wird"
              },
              "exponent": {
                "label": "Exponent",
                "description": "Exponentenparameter (Standard `1.1`)."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Ausgabe logarithmisch transformieren"
              },
              "out_type": {
                "label": "Ausgabetyp",
                "description": "Einer von `\"cells\"`, `\"ca\"`, `\"sca\"` (Standard)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "rho8_flow_accum": {
            "name": "Rho8-Abflussakkumulation",
            "description": "Berechnet die Rho8-Abflussakkumulation aus einem DEM oder einem Rho8-Fließrichtungsraster.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "clip": {
                "label": "Zuschneiden",
                "description": "Maximum der Anzeigebeschneidung (aus Kompatibilitätsgründen akzeptiert)"
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Ausgabe logarithmisch transformieren"
              },
              "out_type": {
                "label": "Ausgabetyp",
                "description": "Ausgabetyp: cells, ca oder sca"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "rho8_pointer": {
            "name": "Rho8-Zeiger",
            "description": "Stochastische Einzelfließrichtung, gewichtet nach dem Gefälle. Mehrfach ausführen für eine Ensemble-Analyse, die Kanalisierungsartefakte von D8 verringert.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "trace_downslope_flowpaths": {
            "name": "Unterliegende Fließwege verfolgen",
            "description": "Markiert D8-Fließwege, die an Saatpunkten beginnen, bis kein Abfluss mehr erfolgt oder der Gitterrand erreicht ist.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "Eingabe-D8-Fließrichtungsraster."
              },
              "seed_points": {
                "label": "Startpunkte",
                "description": "Eingabe-Punktvektor der Startpunkte."
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Wenn wahr, werden D8-Fließrichtungen mit ESRI-Codierung interpretiert."
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Wenn wahr, ist der Hintergrund `0`; andernfalls ist der Hintergrund NoData."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "breach_depressions_least_cost": {
            "name": "Senken kostenminimal durchbrechen",
            "description": "Durchbricht Senken in einem DEM mithilfe einer beschränkten Suche nach kostenminimalen Pfaden.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "fill_deps": {
                "label": "Senken füllen",
                "description": "Wenn wahr, werden nach dem Durchbrechen verbleibende Senken gefüllt."
              },
              "flat_increment": {
                "label": "Ebenen-Inkrement",
                "description": "Optionales monotones Dekrement."
              },
              "max_cost": {
                "label": "Maximale Kosten",
                "description": "Maximal zulässige Durchbruchkosten."
              },
              "max_dist": {
                "label": "Maximale Distanz",
                "description": "Maximale Suchdistanz in Zellen."
              },
              "minimize_dist": {
                "label": "Distanz minimieren",
                "description": "Wenn wahr, werden die Durchbruchkosten distanzgewichtet."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "breach_single_cell_pits": {
            "name": "Einzelzellen-Senken durchbrechen",
            "description": "Durchbricht Einzelzellsenken in einem DEM, indem ein Zelle breite Rinnen eingeschnitten werden.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis, sofern unterstützt, im Speicher zurückgegeben."
              }
            }
          },
          "burn_streams": {
            "name": "Gewässer einbrennen",
            "description": "Brennt ein Gewässernetz in ein DEM ein, indem die Höhen der Gewässerzellen abgesenkt werden.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "streams": {
                "label": "Gewässer",
                "description": "Eingabe-Gewässervektor."
              },
              "decrement_value": {
                "label": "Dekrementwert",
                "description": "Auf Gewässerzellen angewendetes Höhendekrement (Standard 5.0)."
              },
              "gradient_distance": {
                "label": "Gradientendistanz",
                "description": "Gradientendistanz in Gitterzellen (0 = nur flaches Dekrement; Standard 5)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des eingebrannten DEM."
              }
            }
          },
          "burn_streams_at_roads": {
            "name": "Gewässer an Straßen einbrennen",
            "description": "Senkt Gewässerhöhen nahe Kreuzungen von Gewässern und Straßen ab, um Straßendämme in einem DEM zu durchbrechen.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "roads": {
                "label": "Straßen",
                "description": "Straßen-Vektorlayer."
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässer-Vektorlayer."
              },
              "method": {
                "label": "Methode",
                "description": "Methode"
              },
              "road_width": {
                "label": "Straßenbreite",
                "description": "Maximale Dammbreite in Karteneinheiten zur Festlegung der Einbrennreichweite entlang des Gewässers."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "depth_in_sink": {
            "name": "Tiefe in der Senke",
            "description": "Misst die Tiefe, um die jede DEM-Zelle unter einer senkengefüllten Oberfläche liegt.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Wenn wahr, wird Zellen außerhalb von Senken `0.0` zugewiesen; andernfalls NoData."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "fill_burn": {
            "name": "Füllen und einbrennen",
            "description": "Erzwingt hydrologische Konsistenz eines DEM, indem Gewässer eingebrannt und anschließend Senken gefüllt werden.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "streams": {
                "label": "Gewässer",
                "description": "Eingabe-Gewässer-Vektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "fill_depressions": {
            "name": "Senken füllen",
            "description": "Füllt Senken in einem DEM mit einer Priority-Flood-Strategie, standardmäßig mit Garbrecht-Martz-Auflösung von Flachbereichen und optional mit der früheren Flachbereichsauflösung über natürliche Pfade.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "fix_flats": {
                "label": "Ebene Flächen korrigieren",
                "description": "Wenn wahr, wird über gefüllte Ebenen ein geringes Gefälle aufgeprägt."
              },
              "flat_increment": {
                "label": "Ebenen-Inkrement",
                "description": "Ebenen-Inkrement (Standard `0.0001`)."
              },
              "flat_resolution": {
                "label": "Ebenen-Auflösung",
                "description": "Modus der Ebenenauflösung. Einer von `\"garbrecht_martz\"` oder `\"natural\"`."
              },
              "max_depth": {
                "label": "Maximale Tiefe",
                "description": "Maximal zulässige Fülltiefe."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "fill_depressions_planchon_and_darboux": {
            "name": "Senken füllen (Planchon und Darboux)",
            "description": "Füllt Senken in einem DEM über eine mit Planchon und Darboux kompatible Schnittstelle.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "fix_flats": {
                "label": "Ebene Flächen korrigieren",
                "description": "Wenn wahr, wird über gefüllte Ebenen ein geringes Gefälle aufgeprägt."
              },
              "flat_increment": {
                "label": "Ebenen-Inkrement",
                "description": "Ebenen-Inkrement (Standard `0.0001`)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "fill_depressions_wang_and_liu": {
            "name": "Senken füllen (Wang und Liu)",
            "description": "Füllt Senken in einem DEM über eine mit Wang und Liu kompatible Schnittstelle.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "fix_flats": {
                "label": "Ebene Flächen korrigieren",
                "description": "Wenn wahr, wird über gefüllte Ebenen ein geringes Gefälle aufgeprägt."
              },
              "flat_increment": {
                "label": "Ebenen-Inkrement",
                "description": "Ebenen-Inkrement (Standard `0.0001`)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "fill_pits": {
            "name": "Löcher füllen",
            "description": "Füllt Einzelzellsenken in einem DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis, sofern unterstützt, im Speicher zurückgegeben."
              }
            }
          },
          "flatten_lakes": {
            "name": "Seen einebnen",
            "description": "Ebnet Seehöhen ein, indem für jedes Polygon die minimale Höhe des Umfangs verwendet wird.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "lakes": {
                "label": "Seen",
                "description": "Eingabe-Polygonvektor der Seeobjekte."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "impoundment_size_index": {
            "name": "Stauraumgrößenindex",
            "description": "Berechnet Kennzahlen des Aufstaus: mittlere/maximale Tiefe, Volumen, Fläche und Dammhöhe.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "max_dam_length": {
                "label": "Maximale Dammlänge",
                "description": "Maximale Dammlänge in Karteneinheiten."
              },
              "output_area": {
                "label": "Fläche ausgeben",
                "description": "Raster der überfluteten Fläche in das Ausgabetupel aufnehmen."
              },
              "output_height": {
                "label": "Höhe ausgeben",
                "description": "Raster der Dammhöhe in das Ausgabetupel aufnehmen."
              },
              "output_max": {
                "label": "Maximum ausgeben",
                "description": "Raster der maximalen Überflutungstiefe in das Ausgabetupel aufnehmen."
              },
              "output_mean": {
                "label": "Mittelwert ausgeben",
                "description": "Raster der mittleren Überflutungstiefe in das Ausgabetupel aufnehmen."
              },
              "output_volume": {
                "label": "Volumen ausgeben",
                "description": "Raster des Überflutungsvolumens in das Ausgabetupel aufnehmen."
              },
              "out_area": {
                "label": "Ausgabe Fläche",
                "description": "Optionaler Ausgabepfad für das Flächenraster"
              },
              "out_dam_height": {
                "label": "Ausgabe Dammhöhe",
                "description": "Optionaler Ausgabepfad für das Dammhöhenraster"
              },
              "out_max": {
                "label": "Ausgabe Maximum",
                "description": "Optionaler Ausgabepfad für das Raster der maximalen Tiefe"
              },
              "out_mean": {
                "label": "Ausgabe Mittelwert",
                "description": "Optionaler Ausgabepfad für das Raster der mittleren Tiefe"
              },
              "out_volume": {
                "label": "Ausgabe Volumen",
                "description": "Optionaler Ausgabepfad für das Volumenraster"
              }
            }
          },
          "insert_dams": {
            "name": "Dämme einfügen",
            "description": "Fügt an festgelegten Punkten lokale Dammschüttungen hinzu und wählt dabei die Dammkrone profilbasiert aus.",
            "params": {
              "dam_points": {
                "label": "Dammpunkte",
                "description": "Eingabe-Punktvektor der Dammstandorte."
              },
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "dam_length": {
                "label": "Dammlänge",
                "description": "Maximale Dammlänge in Karteneinheiten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "raise_walls": {
            "name": "Wände anheben",
            "description": "Erhöht DEM-Höhen entlang von Mauervektoren und durchbricht optional ausgewählte Querungen.",
            "params": {
              "breach_lines": {
                "label": "Durchbruchslinien",
                "description": "Optionaler Vektor zur Festlegung der Durchbruchstellen."
              },
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "walls": {
                "label": "Wände",
                "description": "Eingabe-Linien- oder Polygonvektor zur Festlegung der Mauersegmente."
              },
              "wall_height": {
                "label": "Wandhöhe",
                "description": "Auf Mauerzellen angewendetes Höheninkrement."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "sink": {
            "name": "Senke",
            "description": "Identifiziert Zellen, die zu topografischen Senken in einem DEM gehören.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Wenn wahr, wird Zellen außerhalb von Senken `0.0` zugewiesen; andernfalls NoData."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "stochastic_depression_analysis": {
            "name": "Stochastische Senkenanalyse",
            "description": "Führt Monte-Carlo-Störungen des DEM durch und schätzt die Wahrscheinlichkeit der Senkenzugehörigkeit.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "iterations": {
                "label": "Iterationen",
                "description": "Anzahl der Monte-Carlo-Iterationen."
              },
              "range": {
                "label": "Bereich",
                "description": "Autokorrelationsreichweite des Fehlers in Karteneinheiten."
              },
              "rmse": {
                "label": "RMSE",
                "description": "Höhen-RMSE für die Gauß'sche Störung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "topological_breach_burn": {
            "name": "Topologisches Durchbrechen und Einbrennen",
            "description": "Brennt Gewässer in ein DEM ein, bereitet die Oberfläche auf und gibt Raster für Gewässer, DEM, Fließrichtung und Akkumulation zurück.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "streams": {
                "label": "Gewässer",
                "description": "Eingabe-Gewässernetzvektor."
              },
              "snap_distance": {
                "label": "Fangdistanz",
                "description": "Optionale Gewässer-Fangdistanz für die Skalierung der Einbrenntiefe."
              },
              "out_dem": {
                "label": "Ausgabe-DEM",
                "description": "Optionaler Ausgabepfad für das eingebrannte/konditionierte DEM."
              },
              "out_dir": {
                "label": "Ausgabe-Fließrichtung",
                "description": "Optionaler Ausgabepfad für das D8-Fließrichtungsraster."
              },
              "out_fa": {
                "label": "Ausgabe-Abflussakkumulation",
                "description": "Optionaler Ausgabepfad für das Abflussakkumulationsraster."
              },
              "out_streams": {
                "label": "Ausgabe-Gewässer",
                "description": "Optionaler Ausgabepfad für die gerasterten Gewässer."
              }
            }
          },
          "upslope_depression_storage": {
            "name": "Speicher in oberliegenden Senken",
            "description": "Kartiert die mittlere Speichertiefe in oberliegenden Senken, indem die Senkentiefe über ein aufbereitetes DEM geleitet wird.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "basins": {
            "name": "Einzugsgebiete",
            "description": "Grenzt alle D8-Einzugsgebiete ab, die zu Rändern mit gültigen Daten entwässern.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "Eingabe-D8-Fließrichtungsraster."
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Wenn wahr, werden die Fließrichtungswerte mit der ESRI-D8-Codierung interpretiert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "flood_order": {
            "name": "Überflutungsordnung",
            "description": "Gibt für jede DEM-Zelle die sequenzielle Priority-Flood-Reihenfolge aus.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "hillslopes": {
            "name": "Hänge",
            "description": "Identifiziert die Hangbereiche, die zu jedem Gewässerabschnitt entwässern, und trennt dabei Bereiche des linken und rechten Ufers.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster."
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässernetzraster, in dem Gewässerzellen den Wert > 0 haben und nicht NoData sind."
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Flag für ESRI-Fließrichtungscodierung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "isobasins": {
            "name": "Isobasins",
            "description": "Unterteilt eine Landschaft anhand eines Zielflächen-Schwellenwerts in Einzugsgebiete annähernd gleicher Größe (Isobasins).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Hydrologisch konditioniertes Eingabe-DEM-Raster."
              },
              "target_size": {
                "label": "Zielgröße",
                "description": "Zielfläche der Isobasins in Anzahl Gitterzellen (positive Ganzzahl oder Gleitkommazahl)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "jenson_snap_pour_points": {
            "name": "Auslasspunkte fangen (Jenson)",
            "description": "Fängt jeden Auslasspunkt auf die nächstgelegene Gewässerzelle innerhalb einer Suchdistanz und bewahrt dabei alle Eingabeattribute.",
            "params": {
              "pour_pts": {
                "label": "Auslasspunkte",
                "description": "Eingabe-Vektordatei der Auslasspunkte (Punkt- oder Multipunktgeometrien)."
              },
              "streams": {
                "label": "Gewässer",
                "description": "Eingabe-Gewässernetzraster, in dem Gewässerzellen den Wert > 0 haben und nicht NoData sind."
              },
              "snap_dist": {
                "label": "Fangdistanz",
                "description": "Maximaler Suchradius in Karteneinheiten. Standard ist eine Zellenbreite, wenn ausgelassen oder null."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Vektordatei mit den gefangenen Auslasspunkten (erforderlich; Standard ist `snapped_pour_points.geojson` im Arbeitsverzeichnis, wenn dem Wrapper nichts übergeben wird)."
              }
            }
          },
          "longest_flowpath": {
            "name": "Längster Fließweg",
            "description": "Grenzt für jedes Einzugsgebiet in einem Einzugsgebietsraster die Linien des längsten Fließwegs ab.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster"
              },
              "basins": {
                "label": "Einzugsgebiete",
                "description": "Eingabe-Einzugsgebietsraster"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors"
              }
            }
          },
          "max_branch_length": {
            "name": "Maximale Astlänge",
            "description": "Berechnet die maximale Zweiglänge zwischen benachbarten D8-Fließwegen, nützlich zur Hervorhebung von Wasserscheiden.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Natürliche Log-Transformation auf positive Ausgaben anwenden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "snap_pour_points": {
            "name": "Auslasspunkte fangen",
            "description": "Fängt Auslasspunkte auf die Zelle mit der höchsten Abflussakkumulation innerhalb einer Suchdistanz.",
            "params": {
              "flow_accum": {
                "label": "Abflussakkumulation",
                "description": "Eingabe-Abflussakkumulationsraster."
              },
              "pour_pts": {
                "label": "Auslasspunkte",
                "description": "Eingabe-Vektordatei der Auslasspunkte (Punkt- oder Multipunktgeometrien)."
              },
              "snap_dist": {
                "label": "Fangdistanz",
                "description": "Maximaler Suchradius in Karteneinheiten. Standard ist eine Zellenbreite, wenn ausgelassen oder null."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Vektordatei mit den gefangenen Auslasspunkten (erforderlich; Standard ist `snapped_pour_points.geojson` im Arbeitsverzeichnis, wenn dem Wrapper nichts übergeben wird)."
              }
            }
          },
          "subbasins": {
            "name": "Teileinzugsgebiete",
            "description": "Identifiziert das Einzugsgebiet jedes Gewässerabschnitts (Teileinzugsgebiete) in einem D8-Gewässernetz.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "Von `d8_pointer` erzeugtes D8-Fließrichtungsraster."
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässernetzraster, in dem Gewässerzellen den Wert > 0 haben und nicht NoData sind."
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Wenn wahr, werden die Fließrichtungswerte mit ESRI-Codierung interpretiert. Standard `False`."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "unnest_basins": {
            "name": "Einzugsgebiete entschachteln",
            "description": "Erstellt aus einem D8-Fließrichtungsgitter je Verschachtelungsebene der Auslasspunkte ein Einzugsgebietsraster.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "Eingabe-D8-Fließrichtungsraster"
              },
              "pour_points": {
                "label": "Auslasspunkte",
                "description": "Eingabe-Auslasspunktvektor"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Fließrichtungen im ESRI-Stil interpretieren"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Basis-Ausgabepfad für nummerierte Raster"
              }
            }
          },
          "watershed": {
            "name": "Einzugsgebiet",
            "description": "Grenzt Einzugsgebiete aus einem D8-Fließrichtungsraster und Vektor-Auslasspunkten ab.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "Eingabe-D8-Fließrichtungsraster."
              },
              "pour_pts": {
                "label": "Auslasspunkte",
                "description": "Eingabe-Vektordatei der Auslasspunkte (Punkt- oder Multipunktgeometrien)."
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Wenn wahr, werden die Fließrichtungswerte mit der ESRI-D8-Codierung interpretiert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "watershed_from_raster_pour_points": {
            "name": "Einzugsgebiet aus Raster-Auslasspunkten",
            "description": "Grenzt Einzugsgebiete aus einem D8-Fließrichtungsraster und einem Raster mit Auslass-IDs der Auslasspunkte ab.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "Eingabe-D8-Fließrichtungsraster."
              },
              "pour_points": {
                "label": "Auslasspunkte",
                "description": "Auslasspunktraster; Zellwerte ungleich null und nicht NoData werden zu Auslass-IDs."
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Wenn wahr, werden die Fließrichtungswerte mit der ESRI-D8-Codierung interpretiert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "depth_to_water": {
            "name": "Tiefe bis zum Wasser",
            "description": "Berechnet die kartografische Tiefe bis zum Wasser (Depth-to-Water) mittels kostenminimaler Akkumulation ausgehend von Gewässer-/Seeobjekten als Quellen.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "stream_raster": {
                "label": "Gewässerraster",
                "description": "Gewässerraster"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "distance_to_outlet": {
            "name": "Distanz zum Auslass",
            "description": "Berechnet für jede Gewässerzelle die Distanz flussabwärts bis zum Auslass.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässer"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Nullhintergrund"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "downslope_distance_to_stream": {
            "name": "Unterliegende Distanz zum Gewässer",
            "description": "Berechnet die unterliegende Distanz von jeder DEM-Zelle zum nächstgelegenen Gewässer entlang der Fließwege.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Senkenfreies Eingabe-DEM-Raster."
              },
              "streams": {
                "label": "Gewässer",
                "description": "Eingabe-Gewässerraster; Gewässerzellen haben Werte `> 0` und sind nicht NoData."
              },
              "dinf": {
                "label": "D-Infinity",
                "description": "Wenn wahr, wird D-Infinity-Routing verwendet; andernfalls D8-Routing."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "downslope_index": {
            "name": "Downslope-Index",
            "description": "Berechnet den Downslope-Index nach Hjerdt et al. (2004) anhand von D8-Fließrichtungen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "output_type": {
                "label": "Ausgabetyp",
                "description": "Ausgabemaß: tangent, degrees, radians, distance (Standard tangent)."
              },
              "vertical_drop": {
                "label": "Vertikaler Abfall",
                "description": "Schwellenwert des vertikalen Höhenabfalls d für die hangabwärts gerichtete Traversierung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "edge_contamination": {
            "name": "Randkontamination",
            "description": "Identifiziert DEM-Zellen, deren oberliegende Fläche bei gängigen Abflussrouting-Verfahren über den DEM-Rand hinausreicht.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Senkenfreies Eingabe-DEM-Raster."
              },
              "flow_type": {
                "label": "Fließtyp",
                "description": "Zu verwendende Routing-Methode: eine von `\"d8\"`, `\"mfd\"`/`\"fd8\"` oder `\"dinf\"`."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler vertikaler Skalierungsfaktor. Werte `<= 0` werden als `1.0` behandelt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "elev_relative_to_watershed_min_max": {
            "name": "Höhe relativ zu Min/Max des Einzugsgebiets",
            "description": "Berechnet die relative Höhenlage einer DEM-Zelle innerhalb jedes Einzugsgebiets als Prozentwert.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "watersheds": {
                "label": "Einzugsgebiete",
                "description": "Pfad des Einzugsgebiets-ID-Rasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "elevation_above_stream": {
            "name": "Höhe über dem Gewässer",
            "description": "Berechnet die Höhe über dem nächstgelegenen Gewässer, gemessen entlang unterliegender Fließwege.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Senkenfreies Eingabe-DEM-Raster."
              },
              "streams": {
                "label": "Gewässer",
                "description": "Eingabe-Gewässerraster; Gewässerzellen haben Werte `> 0` und sind nicht NoData."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "elevation_above_stream_euclidean": {
            "name": "Höhe über dem Gewässer (euklidisch)",
            "description": "Berechnet die Höhe über dem nächstgelegenen Gewässer anhand der geradlinigen (euklidischen) Nähe.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "streams": {
                "label": "Gewässer",
                "description": "Eingabe-Gewässerraster; Gewässerzellen haben Werte `> 0` und sind nicht NoData."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "find_noflow_cells": {
            "name": "Zellen ohne Abfluss finden",
            "description": "Findet DEM-Zellen, die keinen tiefer liegenden D8-Nachbarn haben.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "interior_only": {
                "label": "Nur Innenbereich",
                "description": "Wenn wahr, werden nur echte innere Zellen ohne Abfluss markiert (ohne Auslässe am Rasterrand und neben NoData)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "find_parallel_flow": {
            "name": "Parallelen Abfluss finden",
            "description": "Identifiziert Gewässerzellen mit parallelen D8-Fließrichtungen.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "Eingabe-D8-Fließrichtungsraster."
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "hydrologic_connectivity": {
            "name": "Hydrologische Konnektivität",
            "description": "Berechnet die Konnektivitätsindizes DUL und UDSA aus einem DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "convergence_threshold": {
                "label": "Konvergenzschwellenwert",
                "description": "Optionaler Schwellenwert der Gewässerinitiierung in beitragenden Zellen."
              },
              "exponent": {
                "label": "Exponent",
                "description": "Kompatibilitätsparameter für die Dispersionssteuerung."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler vertikaler Skalierungsfaktor."
              },
              "output1": {
                "label": "Ausgabe 1",
                "description": "Optionaler Ausgabepfad für das DUL-Raster."
              },
              "output2": {
                "label": "Ausgabe 2",
                "description": "Optionaler Ausgabepfad für das UDSA-Raster."
              }
            }
          },
          "relative_stream_power_index": {
            "name": "Index der relativen Fließkraft",
            "description": "Berechnet den Index der relativen Fließkraft aus spezifischer Einzugsgebietsfläche und Neigung.",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Pfad des Rasters der spezifischen Einzugsgebietsfläche oder typisiertes Rasterobjekt."
              },
              "slope": {
                "label": "Neigung",
                "description": "Neigungsraster in Grad."
              },
              "exponent": {
                "label": "Exponent",
                "description": "Exponent p der spezifischen Einzugsgebietsfläche (Standard 1.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "sediment_transport_index": {
            "name": "Sedimenttransportindex",
            "description": "Berechnet den Sedimenttransportindex (LS-Faktor) aus spezifischer Einzugsgebietsfläche und Neigung.",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Pfad des Rasters der spezifischen Einzugsgebietsfläche oder typisiertes Rasterobjekt."
              },
              "slope": {
                "label": "Neigung",
                "description": "Neigungsraster in Grad."
              },
              "sca_exponent": {
                "label": "SCA-Exponent",
                "description": "Exponent n der spezifischen Einzugsgebietsfläche (Standard 0.4)."
              },
              "slope_exponent": {
                "label": "Neigungsexponent",
                "description": "Neigungsexponent m (Standard 1.3)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "wetness_index": {
            "name": "Feuchteindex",
            "description": "Berechnet den topografischen Feuchteindex ln(SCA / tan(slope)).",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Pfad des Rasters der spezifischen Einzugsgebietsfläche oder typisiertes Rasterobjekt."
              },
              "slope": {
                "label": "Neigung",
                "description": "Neigungsraster in Grad."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "extract_streams": {
            "name": "Gewässer extrahieren",
            "description": "Extrahiert Gewässer anhand eines Schwellenwerts der Abflussakkumulation.",
            "params": {
              "flow_accumulation": {
                "label": "Abflussakkumulation",
                "description": "Eingabe-Abflussakkumulationsraster."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Minimaler Akkumulationswert, um Teil eines Gewässergerinnes zu sein."
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Wenn wahr, ist der Nicht-Gewässer-Hintergrund 0 statt NoData."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Gewässerrasters."
              }
            }
          },
          "extract_valleys": {
            "name": "Täler extrahieren",
            "description": "Extrahiert Täler aus einem DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "filter_size": {
                "label": "Filtergröße",
                "description": "Filtergröße"
              },
              "line_thin": {
                "label": "Linien ausdünnen",
                "description": "Linien ausdünnen"
              },
              "variant": {
                "label": "Variante",
                "description": "Variante"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "prune_vector_streams": {
            "name": "Vektorgewässer beschneiden",
            "description": "Beschneidet ein vektorielles Gewässernetz anhand der Shreve-Magnitude.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster zur Bestimmung der Fließrichtung"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Eingabe-Vektorgewässernetz"
              },
              "max_ridge_cutting_height": {
                "label": "Maximale Kammdurchschneidungshöhe",
                "description": "Maximal zulässiger Höhenanstieg beim Verbinden flussabwärts liegender Abschnitte"
              },
              "snap_distance": {
                "label": "Fangdistanz",
                "description": "Maximale Fangdistanz für die Endpunktkonnektivität"
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Minimale beizubehaltende Shreve-Magnitude"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors"
              }
            }
          },
          "raster_streams_to_vector": {
            "name": "Rastergewässer zu Vektor",
            "description": "Wandelt ein Raster-Gewässernetz in Vektordaten um.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "streams_raster": {
                "label": "Gewässerraster",
                "description": "Gewässerraster"
              },
              "all_vertices": {
                "label": "Alle Stützpunkte",
                "description": "Alle Stützpunkte"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "rasterize_streams": {
            "name": "Gewässer rastern",
            "description": "Rastert ein vektorielles Gewässernetz.",
            "params": {
              "input_vector": {
                "label": "Eingabevektor",
                "description": "Eingabevektor"
              },
              "reference_raster": {
                "label": "Referenzraster",
                "description": "Referenzraster"
              },
              "use_feature_id": {
                "label": "Objekt-ID verwenden",
                "description": "Objekt-ID verwenden"
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Nullhintergrund"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "remove_short_streams": {
            "name": "Kurze Gewässerabschnitte entfernen",
            "description": "Entfernt Gewässerabschnitte, die kürzer als die Mindestlänge sind.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässer"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "min_length": {
                "label": "Minimale Länge",
                "description": "Minimale Länge"
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Nullhintergrund"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "repair_stream_vector_topology": {
            "name": "Vektortopologie der Gewässer reparieren",
            "description": "Repariert die Topologie eines vektoriellen Gewässernetzes.",
            "params": {
              "input_vector": {
                "label": "Eingabevektor",
                "description": "Eingabevektor"
              },
              "snap": {
                "label": "Fangen",
                "description": "Fangen"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "river_centerlines": {
            "name": "Flussmittellinien",
            "description": "Extrahiert Flussmittellinien aus einem Wasserraster mithilfe der Mittelachse.",
            "params": {
              "raster": {
                "label": "Raster",
                "description": "Binäres Wasser/Nicht-Wasser-Raster"
              },
              "min_length": {
                "label": "Minimale Länge",
                "description": "Minimale Mittellinienlänge in Rasterzellen"
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Suchradius (Zellen) zum Verbinden nahegelegener Endpunkte"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Mittellinienvektors"
              }
            }
          },
          "farthest_channel_head": {
            "name": "Entferntester Gerinneursprung",
            "description": "Berechnet die Distanz zum entferntesten Gerinneursprung.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässer"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Nullhintergrund"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "find_main_stem": {
            "name": "Hauptgerinne finden",
            "description": "Identifiziert den Hauptstrang eines Gewässernetzes.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässer"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Nullhintergrund"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "length_of_upstream_channels": {
            "name": "Länge der oberliegenden Gerinne",
            "description": "Berechnet die gesamte oberliegende Gerinnelänge.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässer"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Nullhintergrund"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "long_profile": {
            "name": "Längsprofil",
            "description": "Erstellt ein Längsprofil eines Gewässers.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "streams_raster": {
                "label": "Gewässerraster",
                "description": "Gewässerraster"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "long_profile_from_points": {
            "name": "Längsprofil aus Punkten",
            "description": "Erstellt ein Längsprofil aus Vektorpunkten.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "points": {
                "label": "Punkte",
                "description": "Punkte"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "hack_stream_order": {
            "name": "Hack-Gewässerordnung",
            "description": "Weist Gewässerzellen die Hack-Gewässerordnung zu.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässerraster"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Fließrichtung im ESRI-Stil verwenden"
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Hintergrund den Wert null zuweisen"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "horton_ratios": {
            "name": "Horton-Verhältnisse",
            "description": "Berechnet die Horton-Verhältnisse für Verzweigung, Länge, Einzugsgebietsfläche und Gefälle.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "streams_raster": {
                "label": "Gewässerraster",
                "description": "Binäres Gewässerraster (positiv = Gewässer)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Textberichts (optional)."
              }
            }
          },
          "horton_stream_order": {
            "name": "Horton-Gewässerordnung",
            "description": "Weist Gewässerzellen die Horton-Gewässerordnung zu.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässerraster"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Fließrichtung im ESRI-Stil verwenden"
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Hintergrund den Wert null zuweisen"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "shreve_stream_magnitude": {
            "name": "Shreve-Gewässermagnitude",
            "description": "Berechnet die Shreve-Gewässermagnitude.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässerraster"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Fließrichtung im ESRI-Stil verwenden"
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Hintergrund den Wert null zuweisen"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "strahler_order_basins": {
            "name": "Einzugsgebiete nach Strahler-Ordnung",
            "description": "Grenzt Einzugsgebiete ab, die nach der Horton-Strahler-Ordnung ihres entwässernden Gewässerabschnitts beschriftet sind.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster."
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässernetzraster, in dem Gewässerzellen den Wert > 0 haben und nicht NoData sind."
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Flag für ESRI-Fließrichtungscodierung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "strahler_stream_order": {
            "name": "Strahler-Gewässerordnung",
            "description": "Weist Gewässerzellen die Strahler-Gewässerordnung zu.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässerraster (positive Werte = Gewässerzellen)"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Fließrichtungswerte im ESRI-Stil verwenden (Standard: Whitebox)"
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Hintergrund den Wert null statt NoData zuweisen"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "stream_link_class": {
            "name": "Klasse des Gewässerabschnitts",
            "description": "Klassifiziert Gewässerabschnitte als innere, äußere oder Quellabschnitte.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässer"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Nullhintergrund"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "stream_link_identifier": {
            "name": "Kennung des Gewässerabschnitts",
            "description": "Weist jedem Gewässerabschnitt eine eindeutige ID zu.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässer"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Nullhintergrund"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "stream_link_length": {
            "name": "Länge des Gewässerabschnitts",
            "description": "Berechnet die Gesamtlänge jedes Gewässerabschnitts.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "linkid": {
                "label": "Link-ID",
                "description": "Link-ID"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässer"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "stream_link_slope": {
            "name": "Gefälle des Gewässerabschnitts",
            "description": "Berechnet das mittlere Gefälle jedes Gewässerabschnitts.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "linkid": {
                "label": "Link-ID",
                "description": "Link-ID"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässer"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "stream_slope_continuous": {
            "name": "Kontinuierliches Gewässergefälle",
            "description": "Berechnet den Gefällewert jeder Gewässerzelle.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässer"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Nullhintergrund"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "topological_stream_order": {
            "name": "Topologische Gewässerordnung",
            "description": "Weist anhand der Abschnittsanzahl eine topologische Gewässerordnung zu.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässer"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Nullhintergrund"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "tributary_identifier": {
            "name": "Nebenflusskennung",
            "description": "Weist jedem Nebenfluss eine eindeutige ID zu.",
            "params": {
              "d8_pntr": {
                "label": "D8-Fließrichtung",
                "description": "D8-Fließrichtungsraster"
              },
              "streams": {
                "label": "Gewässer",
                "description": "Gewässer"
              },
              "esri_pntr": {
                "label": "Esri-Fließrichtung",
                "description": "Esri-Fließrichtung"
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Nullhintergrund"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "vector_stream_network_analysis": {
            "name": "Analyse des vektoriellen Gewässernetzes",
            "description": "Umfassende Analyse eines vektoriellen Gewässernetzes.",
            "params": {
              "streams": {
                "label": "Gewässer",
                "description": "Eingabe-Gewässernetz-Vektorlayer."
              },
              "dem": {
                "label": "DEM",
                "description": "Eingabe-Höhenraster (DEM)."
              },
              "max_ridge_cutting_height": {
                "label": "Maximale Kammdurchschneidungshöhe",
                "description": "Maximal zulässige Höhe für das Durchschneiden von Graten."
              },
              "snap_distance": {
                "label": "Fangdistanz",
                "description": "Fangdistanztoleranz für die Netzbereinigung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad."
              }
            }
          },
          "add_point_coordinates_to_table": {
            "name": "Punktkoordinaten zur Tabelle hinzufügen",
            "description": "Kopiert einen Punktlayer und fügt die Attributfelder XCOORD und YCOORD an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-Punktvektors."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors. Wenn ausgelassen, wird ein GeoJSON-Pfad neben der Eingabe abgeleitet."
              }
            }
          },
          "clean_vector": {
            "name": "Vektordaten bereinigen",
            "description": "Entfernt leere und ungültige Vektorgeometrien (z. B. zu kleine Linien/Polygone) und bewahrt dabei gültige Objekte und Attribute.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorpfad."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors. Wenn ausgelassen, wird ein GeoJSON-Pfad neben der Eingabe abgeleitet."
              }
            }
          },
          "csv_points_to_vector": {
            "name": "CSV-Punkte zu Vektor",
            "description": "Importiert Punktdatensätze aus einer CSV-Datei in einen Punkt-Vektorlayer.",
            "params": {
              "input_file": {
                "label": "Eingabedatei",
                "description": "Pfad der Eingabe-CSV-Datei."
              },
              "x_field_num": {
                "label": "X-Feldnummer",
                "description": "Nullbasierter Index des X-Koordinatenfelds. Standard ist 0."
              },
              "y_field_num": {
                "label": "Y-Feldnummer",
                "description": "Nullbasierter Index des Y-Koordinatenfelds. Standard ist 1."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Optionaler EPSG-Code für das Ausgabe-KBS."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "export_table_to_csv": {
            "name": "Tabelle als CSV exportieren",
            "description": "Exportiert eine Vektor-Attributtabelle in eine CSV-Datei.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorpfad."
              },
              "output_csv_file": {
                "label": "CSV-Ausgabedatei",
                "description": "Ausgabepfad der CSV-Datei."
              },
              "headers": {
                "label": "Kopfzeilen",
                "description": "Kopfzeile in die Ausgabe aufnehmen. Standard ist wahr."
              }
            }
          },
          "join_tables": {
            "name": "Tabellen verknüpfen",
            "description": "Verknüpft Attribute aus einer fremden Vektortabelle über Schlüsselfelder mit einer primären Vektortabelle.",
            "params": {
              "primary_vector": {
                "label": "Primärer Vektor",
                "description": "Pfad des Primärvektors, der die verknüpften Felder erhält."
              },
              "primary_key_field": {
                "label": "Primärschlüsselfeld",
                "description": "Primärschlüsselfeld im Primärvektor."
              },
              "foreign_vector": {
                "label": "Fremdvektor",
                "description": "Pfad des Fremdvektors mit den Quellfeldern."
              },
              "foreign_key_field": {
                "label": "Fremdschlüsselfeld",
                "description": "Fremdschlüsselfeld im Fremdvektor."
              },
              "import_field": {
                "label": "Importfeld",
                "description": "Optionales einzelnes zu importierendes Feld; Standard sind alle Felder außer Schlüssel- und FID-Feldern."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors. Standard ist ein abgeleiteter GeoJSON-Pfad neben der Primäreingabe."
              }
            }
          },
          "merge_table_with_csv": {
            "name": "Tabelle mit CSV zusammenführen",
            "description": "Führt Attribute aus einer CSV-Tabelle über Schlüsselfelder mit einer Vektor-Attributtabelle zusammen.",
            "params": {
              "primary_vector": {
                "label": "Primärer Vektor",
                "description": "Pfad des Primärvektors, der die zusammengeführten Felder erhält."
              },
              "primary_key_field": {
                "label": "Primärschlüsselfeld",
                "description": "Primärschlüsselfeld im Primärvektor."
              },
              "foreign_csv_filename": {
                "label": "Fremd-CSV-Dateiname",
                "description": "CSV-Datei mit der Fremdtabelle."
              },
              "foreign_key_field": {
                "label": "Fremdschlüsselfeld",
                "description": "Name des Fremdschlüsselfelds in der CSV-Kopfzeile."
              },
              "import_field": {
                "label": "Importfeld",
                "description": "Optionales einzelnes zu importierendes CSV-Feld; Standard sind alle Nicht-Schlüsselfelder."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors. Standard ist ein abgeleiteter GeoJSON-Pfad neben der Primäreingabe."
              }
            }
          },
          "merge_vectors": {
            "name": "Vektordaten zusammenführen",
            "description": "Kombiniert zwei oder mehr Eingabevektoren desselben Geometrietyps zu einem einzigen Ausgabevektor.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array der Eingabe-Vektorpfade (mindestens zwei erforderlich)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "reinitialize_attribute_table": {
            "name": "Attributtabelle zurücksetzen",
            "description": "Erstellt eine Kopie eines Vektorlayers, die nur ein neu erzeugtes FID-Attribut enthält.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorpfad."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors. Wenn ausgelassen, wird der Eingabepfad überschrieben."
              }
            }
          },
          "vector_summary_statistics": {
            "name": "Zusammenfassende Vektorstatistik",
            "description": "Berechnet Anzahl, Summe, Mittelwert, Minimum, Maximum und Standardabweichung nach kategorialen Gruppen und exportiert sie als CSV.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "group_field": {
                "label": "Gruppierungsfeld",
                "description": "Name des Gruppierungsfelds."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Name des numerischen Wertfelds."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der CSV-Datei."
              }
            }
          },
          "fix_dangling_arcs": {
            "name": "Hängende Bögen korrigieren",
            "description": "Behebt zu kurze und zu lange überhängende Linien in einem Liniennetz, indem Linienendpunkte innerhalb einer Schwellendistanz gefangen werden.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-Polylinienvektors."
              },
              "snap": {
                "label": "Fangen",
                "description": "Schwellenwert der Fangdistanz in Karteneinheiten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors. Wenn ausgelassen, wird ein GeoJSON-Pfad neben der Eingabe abgeleitet."
              }
            }
          },
          "lines_to_polygons": {
            "name": "Linien zu Polygonen",
            "description": "Wandelt Polylinienobjekte in Polygonobjekte um, wobei der erste Teil als äußerer Ring und spätere Teile als Löcher behandelt werden.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-Polylinienvektors."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Polygonvektors. Wenn ausgelassen, wird ein GeoJSON-Pfad neben der Eingabe abgeleitet."
              }
            }
          },
          "multipart_to_singlepart": {
            "name": "Mehrteilig zu einteilig",
            "description": "Wandelt einen Vektor mit mehrteiligen Objekten in einen Vektor mit ausschließlich einteiligen Objekten um.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabevektors (Polylinie, Polygon oder Multipunkt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors. Standard ist eine GeoJSON-Datei mit Zeitstempel neben der Eingabe."
              },
              "exclude_holes": {
                "label": "Löcher ausschließen",
                "description": "Wenn wahr, bleiben Polygonlöcher an ihrem umschließenden äußeren Ring (Standard: falsch)."
              }
            }
          },
          "polygons_to_lines": {
            "name": "Polygone zu Linien",
            "description": "Wandelt Polygon- und Multipolygonobjekte in Linien um, die ihre Grenzen nachzeichnen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-Polygonvektors."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Linienvektors. Wenn ausgelassen, wird ein GeoJSON-Pfad neben der Eingabe abgeleitet."
              }
            }
          },
          "remove_polygon_holes": {
            "name": "Polygonlöcher entfernen",
            "description": "Entfernt innere Ringe aus Polygonobjekten und bewahrt dabei die Attribute.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-Polygonvektors."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Polygonvektors. Wenn ausgelassen, wird ein GeoJSON-Pfad neben der Eingabe abgeleitet."
              }
            }
          },
          "singlepart_to_multipart": {
            "name": "Einteilig zu mehrteilig",
            "description": "Führt einteilige Objekte zu mehrteiligen Objekten zusammen, gruppiert nach einem optionalen kategorialen Feld.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorpfad."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors. Standard ist eine GeoJSON-Datei mit Zeitstempel neben der Eingabe."
              },
              "field": {
                "label": "Feld",
                "description": "Optionaler Name des Attributfelds zum Gruppieren der Objekte. Wenn ausgelassen, werden alle Objekte zu einer Geometrie zusammengeführt."
              }
            }
          },
          "topology_rule_autofix": {
            "name": "Topologieregeln automatisch korrigieren",
            "description": "Wendet automatisch sichere, nachvollziehbare Korrekturen auf die von topology_rule_validate erkannten Topologieverletzungen an: objektübergreifendes Fangen von Endpunkten, Fangen/Projizieren überhängender Endpunkte und Projektion von Punkten auf Linien. Für polygon_must_not_have_gaps gibt es keine automatische Korrektur; hier werden null Änderungen gemeldet.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorpfad."
              },
              "rule_set": {
                "label": "Regelsatz",
                "description": "Regelkonfiguration als JSON-Array/-Objekt, CSV-Zeichenkette oder Dateipfad. Regeln mit automatischen Korrekturen: line_endpoints_must_snap_within_tolerance, line_must_not_have_dangles, point_must_be_covered_by_line. polygon_must_not_have_gaps wird akzeptiert, erzeugt aber nie Änderungen."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Toleranz für Fangoperationen in Koordinateneinheiten. Standard ist 0.01."
              },
              "dry_run": {
                "label": "Probelauf",
                "description": "Wenn wahr (DER STANDARD), nur Vorschau: der Änderungsbericht wird ausgegeben, aber keine Ausgabe geschrieben. Falsch übergeben, um Korrekturen anzuwenden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors für korrigierte Objekte. Wenn ausgelassen, neben der Eingabe abgeleitet."
              },
              "change_report": {
                "label": "Änderungsbericht",
                "description": "Optionaler Pfad des JSON-Berichts mit dem Änderungsprotokoll."
              }
            }
          },
          "topology_rule_validate": {
            "name": "Topologieregeln validieren",
            "description": "Validiert die Vektortopologie anhand von Regelprüfungen (Selbstüberschneidung, Überlappung, Lücken, überhängende Linien, Punktabdeckung, Fangen von Endpunkten) und gibt Verletzungen auf Objektebene aus.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorpfad."
              },
              "rule_set": {
                "label": "Regelsatz",
                "description": "Regelkonfiguration als JSON-Array/-Objekt, CSV-Zeichenkette oder Dateipfad. Standard sind alle 6 MVP-Regeln. Unterstützt: line_must_not_self_intersect, polygon_must_not_overlap, polygon_must_not_have_gaps, line_must_not_have_dangles, point_must_be_covered_by_line, line_endpoints_must_snap_within_tolerance."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Toleranz für die Regel line_endpoints_must_snap_within_tolerance in Koordinateneinheiten. Standard ist 1.0."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors für Verstöße. Wenn ausgelassen, neben der Eingabe abgeleitet."
              },
              "report": {
                "label": "Bericht",
                "description": "Optionaler Pfad des JSON-Zusammenfassungsberichts."
              }
            }
          },
          "topology_validation_report": {
            "name": "Bericht zur Topologievalidierung",
            "description": "Prüft einen Vektorlayer auf Topologieprobleme und schreibt einen CSV-Bericht je Objekt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorpfad."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der CSV-Datei."
              }
            }
          },
          "convert_nodata_to_zero": {
            "name": "NoData in Null umwandeln",
            "description": "Ersetzt NoData-Zellen eines Rasters durch 0 und lässt gültige Zellen unverändert.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "modify_nodata_value": {
            "name": "NoData-Wert ändern",
            "description": "Ändert den NoData-Wert eines Rasters und schreibt vorhandene NoData-Zellen auf den neuen Wert um.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "new_value": {
                "label": "Neuer Wert",
                "description": "Neuer NoData-Wert. Standard ist -32768.0."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "new_raster_from_base_raster": {
            "name": "Neues Raster aus Basisraster",
            "description": "Erstellt ein neues Raster mit Ausdehnung, Abmessungen und KBS eines Basisrasters.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Pfad des Basisrasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              },
              "out_val": {
                "label": "Ausgabewert",
                "description": "Optionaler Füllwert. Standard ist der NoData-Wert des Rasters."
              },
              "data_type": {
                "label": "Datentyp",
                "description": "Optionaler Datentyp: 'float', 'double' oder 'integer'."
              }
            }
          },
          "new_raster_from_base_vector": {
            "name": "Neues Raster aus Basisvektor",
            "description": "Erstellt ein neues Raster aus der Ausdehnung eines Basisvektors und einer Zellengröße, gefüllt mit einem optionalen Wert.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Pfad des Basisvektors."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Zellengröße des Ausgabegitters (> 0)."
              },
              "out_val": {
                "label": "Ausgabewert",
                "description": "Optionaler Füllwert. Standard ist NoData (-32768)."
              },
              "data_type": {
                "label": "Datentyp",
                "description": "Optionales Schlüsselwort des Ausgabedatentyps: integer, float oder double."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "raster_to_vector_lines": {
            "name": "Raster zu Vektorlinien",
            "description": "Wandelt Linienzellen eines Rasters, die nicht null und nicht NoData sind, in Polylinien-Vektorobjekte um.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters (Einzelband)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors. Wenn ausgelassen, wird ein GeoJSON-Pfad neben der Eingabe abgeleitet."
              }
            }
          },
          "raster_to_vector_points": {
            "name": "Raster zu Vektorpunkten",
            "description": "Wandelt Zellen eines Rasters, die nicht null und nicht NoData sind, in Punktobjekte in den Zellmittelpunkten um.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Punktvektors. Wenn ausgelassen, wird ein GeoJSON-Pfad neben der Eingabe abgeleitet."
              }
            }
          },
          "raster_to_vector_polygons": {
            "name": "Raster zu Vektorpolygonen",
            "description": "Wandelt Rasterbereiche, die nicht null und nicht NoData sind, in Polygon-Vektorobjekte mit den Attributen FID und VALUE um.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters (Einzelband)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors. Wenn ausgelassen, wird ein GeoJSON-Pfad neben der Eingabe abgeleitet."
              }
            }
          },
          "remove_raster_polygon_holes": {
            "name": "Löcher in Rasterpolygonen entfernen",
            "description": "Entfernt innere Hintergrundlöcher (vom Vordergrund umschlossene Bereiche mit 0 oder NoData) aus Rasterpolygonen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters (Einzelband)."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Optionale maximale Lochgröße in Zellen, die entfernt werden soll. 0 bedeutet alle eingeschlossenen Löcher."
              },
              "use_diagonals": {
                "label": "Diagonalen verwenden",
                "description": "8er-Nachbarschaft für Clumping und Randkonnektivität verwenden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "set_nodata_value": {
            "name": "NoData-Wert festlegen",
            "description": "Legt den NoData-Wert eines Rasters fest und bildet vorhandene NoData-Zellen auf den angegebenen Hintergrundwert ab.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "back_value": {
                "label": "Hintergrundwert",
                "description": "Als NoData zuzuweisender Hintergrundwert. Standard ist 0.0."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird ein In-Memory-Raster zurückgegeben."
              }
            }
          },
          "vector_lines_to_raster": {
            "name": "Vektorlinien zu Raster",
            "description": "Rastert Linien- und Polygongrenzgeometrien in ein Rastergitter.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabevektors (Linien oder Polygone)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              },
              "field": {
                "label": "Feld",
                "description": "Optionaler Name des numerischen Felds zum Einbrennen. Standard ist FID."
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Wenn wahr, wird der Ausgabehintergrund mit 0 statt NoData initialisiert."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße, wenn 'base' nicht angegeben ist. Wenn ausgelassen und keine Basis angegeben, ist die automatische Zellengröße maximale Ausdehnung / 500."
              },
              "base": {
                "label": "Basis",
                "description": "Optionaler Pfad des Basisrasters, das Ausgabegitter und -ausdehnung definiert."
              }
            }
          },
          "vector_points_to_raster": {
            "name": "Vektorpunkte zu Raster",
            "description": "Rastert Punkt- oder Multipunktvektoren mit einer gewählten Zuweisungsoperation in ein Gitter.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabevektors (Punkt/Multipunkt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              },
              "field": {
                "label": "Feld",
                "description": "Optionales numerisches Feld für die Rasterwerte. Standard ist FID."
              },
              "assign": {
                "label": "Zuweisen",
                "description": "Zuweisungsoperation: last, first, min, max, sum, num, mean."
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Wenn wahr, wird der Hintergrund mit 0 initialisiert; andernfalls NoData."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße. Erforderlich, wenn 'base' nicht angegeben ist."
              },
              "base": {
                "label": "Basis",
                "description": "Optionaler Pfad des Basisrasters zur Festlegung von Ausdehnung/Gitter."
              }
            }
          },
          "vector_polygons_to_raster": {
            "name": "Vektorpolygone zu Raster",
            "description": "Rastert Polygonvektoren in ein Gitter und unterstützt attributgesteuerte Einbrennwerte.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-Polygonvektors."
              },
              "field": {
                "label": "Feld",
                "description": "Optionaler Name des numerischen Felds für die Einbrennwerte (Standard FID)."
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Wenn wahr, wird der Ausgabehintergrund mit 0 statt NoData initialisiert."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße, wenn 'base' nicht angegeben ist."
              },
              "base": {
                "label": "Basis",
                "description": "Optionaler Pfad des Basisrasters, das Ausgabegitter und -ausdehnung definiert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, bleibt die Ausgabe im Speicher."
              }
            }
          },
          "local_morans_i_lisa_raster": {
            "name": "Lokales Morans I (LISA), Raster",
            "description": "Berechnet eine LISA-Clusteranalyse aus Punkten und gibt ein kategoriales Raster aus (HH/LL/HL/LH/NS). Ermöglicht eine rasterbasierte Integration.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer mit Beobachtungspunkten."
              },
              "field": {
                "label": "Feld",
                "description": "Zu analysierendes numerisches Attributfeld."
              },
              "weights_mode": {
                "label": "Gewichtungsmodus",
                "description": "Nachbarschaftsmodus: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "k-Wert für den Modus k_nearest (Standard 8)."
              },
              "distance": {
                "label": "Distanz",
                "description": "Entfernungsschwellenwert für den Modus distance_band."
              },
              "row_standardize": {
                "label": "Zeilenstandardisierung",
                "description": "Zeilenstandardisierung auf die Gewichte anwenden (Standard true)."
              },
              "island_policy": {
                "label": "Inselregel",
                "description": "Behandlung von Inseln: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Signifikanzschwellenwert in [0, 1]; Standard 0.05."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Zellengröße des Ausgaberasters (optional; wird automatisch aus der Ausdehnung berechnet)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters (Klassifikation: 0=NS, 1=HH, 2=LL, 3=HL, 4=LH)."
              }
            }
          },
          "getis_ord_gi_star_raster": {
            "name": "Getis-Ord Gi*, Raster",
            "description": "Berechnet Gi*-Klassifikationen von Hotspots/Coldspots aus Punkten und gibt ein Raster aus (-1=kalt, 0=NS, 1=heiß). Für hotspotbasierte Analysen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer mit Beobachtungspunkten."
              },
              "field": {
                "label": "Feld",
                "description": "Zu analysierendes numerisches Attributfeld."
              },
              "weights_mode": {
                "label": "Gewichtungsmodus",
                "description": "Nachbarschaftsmodus: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "k-Wert für den Modus k_nearest (Standard 8)."
              },
              "distance": {
                "label": "Distanz",
                "description": "Entfernungsschwellenwert für den Modus distance_band."
              },
              "row_standardize": {
                "label": "Zeilenstandardisierung",
                "description": "Zeilenstandardisierung auf die Gewichte anwenden (Standard true)."
              },
              "island_policy": {
                "label": "Inselregel",
                "description": "Behandlung von Inseln: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Signifikanzschwellenwert in [0, 1]; Standard 0.05."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Zellengröße des Ausgaberasters (optional; wird automatisch aus der Ausdehnung berechnet)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters (Klassifikation: -1=Cold, 0=NS, 1=Hot)."
              }
            }
          },
          "ordinary_kriging": {
            "name": "Ordinary Kriging",
            "description": "Führt eine Interpolation mittels Ordinary Kriging durch, um Werte in nicht kartierten Gitterzellen auf Basis einer Stichprobe von Punktmessungen zu schätzen. Ordinary Kriging ist ein geostatistisches Verfahren, das die Struktur der räumlichen Autokorrelation nutzt, um sowohl Vorhersagen als auch die zugehörige Kriging-Varianz (Vorhersageunsicherheit) zu liefern. Das Werkzeug schätzt automatisch ein empirisches Variogramm aus den Eingabepunktdaten und passt ein theoretisches Variogrammmodell (sphärisch, exponentiell oder gaußsch) an, um die räumliche Abhängigkeit zu erfassen.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Numerisches Attributfeld mit den zu interpolierenden Werten."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße in Karteneinheiten (erforderlich, wenn kein base_raster)."
              },
              "base_raster": {
                "label": "Basisraster",
                "description": "Optionales Basisraster, das die Ausgabegeometrie steuert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "local_kriging": {
            "name": "Lokales Kriging",
            "description": "Führt eine lokale Interpolation mittels Ordinary Kriging mit k nächsten Nachbarn durch und bietet so eine effiziente räumliche Schätzung für große Datensätze. Dieser Ansatz ist für Datensätze mit Tausenden von Punkten rechnerisch praktikabler als globales Ordinary Kriging.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Numerisches Attributfeld mit den zu interpolierenden Werten."
              },
              "k_neighbors": {
                "label": "K Nachbarn",
                "description": "Anzahl der zu verwendenden nächsten Nachbarn; Standard ist 10."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße in Karteneinheiten (erforderlich, wenn kein base_raster)."
              },
              "base_raster": {
                "label": "Basisraster",
                "description": "Optionales Basisraster, das die Ausgabegeometrie steuert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "simple_kriging": {
            "name": "Simple Kriging",
            "description": "Führt eine Interpolation mittels Simple Kriging durch, wenn der Mittelwert des räumlichen Felds vorab bekannt ist. Dieses Verfahren verringert die Kriging-Varianz und liefert stabilere Vorhersagen, wenn der Mittelwert aus externen Informationen zuverlässig bekannt ist.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Numerisches Attributfeld mit den zu interpolierenden Werten."
              },
              "known_mean": {
                "label": "Bekannter Mittelwert",
                "description": "Bekannter Mittelwert des räumlichen Feldes."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße in Karteneinheiten (erforderlich, wenn kein base_raster)."
              },
              "base_raster": {
                "label": "Basisraster",
                "description": "Optionales Basisraster, das die Ausgabegeometrie steuert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "universal_kriging": {
            "name": "Universal Kriging",
            "description": "Führt eine Interpolation mittels Universal Kriging durch, wenn das räumliche Phänomen einen systematischen Trend oder eine Drift aufweist. Kombiniert Kriging mit der Schätzung einer polynomialen Trendfläche.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Numerisches Attributfeld mit den zu interpolierenden Werten."
              },
              "trend_order": {
                "label": "Trendordnung",
                "description": "Ordnung des Polynomtrends (1=linear, 2=quadratisch); Standard ist 1."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße in Karteneinheiten (erforderlich, wenn kein base_raster)."
              },
              "base_raster": {
                "label": "Basisraster",
                "description": "Optionales Basisraster, das die Ausgabegeometrie steuert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "spacetime_kriging": {
            "name": "Raum-Zeit-Kriging",
            "description": "Führt eine Raum-Zeit-Kriging-Interpolation durch, um räumliche und zeitliche Variation in Punktmessungen gemeinsam zu modellieren. Ideal für räumlich verteilte Zeitreihendaten.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Numerisches Attributfeld mit den zu interpolierenden Werten."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Zeitliches Attributfeld mit den Zeitwerten."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße in Karteneinheiten (erforderlich, wenn kein base_raster)."
              },
              "base_raster": {
                "label": "Basisraster",
                "description": "Optionales Basisraster, das die Ausgabegeometrie steuert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "spatial_lag_regression_raster": {
            "name": "Regression mit räumlicher Verzögerung (Raster)",
            "description": "Schätzt ein SAR-Modell und gibt eine Oberfläche der angepassten Werte aus.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "response_field": {
                "label": "Antwortfeld",
                "description": "Antwortvariable."
              },
              "predictor_fields": {
                "label": "Prädiktorfelder",
                "description": "Prädiktorfelder."
              },
              "weights_mode": {
                "label": "Gewichtungsmodus",
                "description": "Nachbarschaftsmodus."
              },
              "k": {
                "label": "K",
                "description": "k für k_nearest."
              },
              "distance": {
                "label": "Distanz",
                "description": "Entfernungsschwellenwert."
              },
              "row_standardize": {
                "label": "Zeilenstandardisierung",
                "description": "Gewichte zeilenstandardisieren."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Zellengröße des Ausgaberasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster."
              }
            }
          },
          "spatial_error_regression_raster": {
            "name": "Regression mit räumlichem Fehler (Raster)",
            "description": "Schätzt ein SEM-Modell und gibt eine Oberfläche der angepassten Werte aus.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "response_field": {
                "label": "Antwortfeld",
                "description": "Antwortvariable."
              },
              "predictor_fields": {
                "label": "Prädiktorfelder",
                "description": "Prädiktorfelder."
              },
              "weights_mode": {
                "label": "Gewichtungsmodus",
                "description": "Nachbarschaftsmodus."
              },
              "k": {
                "label": "K",
                "description": "k für k_nearest."
              },
              "distance": {
                "label": "Distanz",
                "description": "Entfernungsschwellenwert."
              },
              "row_standardize": {
                "label": "Zeilenstandardisierung",
                "description": "Gewichte zeilenstandardisieren."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Zellengröße des Ausgaberasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster."
              }
            }
          },
          "geographically_weighted_regression_raster": {
            "name": "Geographisch gewichtete Regression (Raster)",
            "description": "Schätzt eine GWR und gibt Rasteroberflächen der lokalen Koeffizienten aus.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "response_field": {
                "label": "Antwortfeld",
                "description": "Antwortvariable."
              },
              "predictor_fields": {
                "label": "Prädiktorfelder",
                "description": "Prädiktorfelder."
              },
              "bandwidth": {
                "label": "Bandbreite",
                "description": "Kernelbandbreite."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Kerneltyp."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Zellengröße des Ausgaberasters."
              },
              "output_prefix": {
                "label": "Ausgabepräfix",
                "description": "Präfix des Ausgaberasters."
              }
            }
          },
          "inhomogeneous_intensity_raster": {
            "name": "Inhomogene Intensität (Raster)",
            "description": "Berechnet eine Oberfläche der Kerndichteschätzung (KDE), die die räumliche Punktintensität visualisiert. Zeigt Hotspots und Coldspots über die einfache Dichte hinaus.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer."
              },
              "bandwidth": {
                "label": "Bandbreite",
                "description": "Kernelbandbreite."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Kerneltyp."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Zellengröße des Ausgaberasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Intensitätsraster."
              }
            }
          },
          "add": {
            "name": "Addieren",
            "description": "Addiert zwei Raster zellenweise.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "average_overlay": {
            "name": "Overlay-Mittelwert",
            "description": "Berechnet den zellenweisen Mittelwert über einen Rasterstapel und ignoriert NoData, sofern nicht alle Eingaben NoData sind.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel als Array von Pfaden oder als durch Semikolon/Komma getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "bool_and": {
            "name": "Logisches UND",
            "description": "Berechnet ein logisches AND zweier Raster zellenweise.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "bool_not": {
            "name": "Logisches NICHT",
            "description": "Berechnet ein logisches NOT jeder Rasterzelle und gibt 1 für Zellen mit dem Wert null und andernfalls 0 aus.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "bool_or": {
            "name": "Logisches ODER",
            "description": "Berechnet ein logisches OR zweier Raster zellenweise.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "bool_xor": {
            "name": "Logisches XODER",
            "description": "Berechnet ein logisches XOR zweier Raster zellenweise.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "count_if": {
            "name": "Zählen wenn",
            "description": "Zählt die Anzahl der Eingaberaster, deren Zelle einem Vergleichswert entspricht.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel als Array von Pfaden oder als durch Semikolon/Komma getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison_value": {
                "label": "Vergleichswert",
                "description": "Vergleichswert, der im Rasterstapel gezählt werden soll."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "divide": {
            "name": "Dividieren",
            "description": "Dividiert das erste Raster zellenweise durch das zweite.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "highest_position": {
            "name": "Höchste Position",
            "description": "Gibt für jede Zelle den nullbasierten Index im Rasterstapel zurück, der den höchsten Wert enthält.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel als Array von Pfaden oder als durch Semikolon/Komma getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "lowest_position": {
            "name": "Niedrigste Position",
            "description": "Gibt für jede Zelle den nullbasierten Index im Rasterstapel zurück, der den niedrigsten Wert enthält.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel als Array von Pfaden oder als durch Semikolon/Komma getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "max_absolute_overlay": {
            "name": "Overlay-Maximum (absolut)",
            "description": "Berechnet den zellenweisen maximalen Absolutwert über einen Rasterstapel und überträgt NoData, wenn eine Eingabezelle NoData ist.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel als Array von Pfaden oder als durch Semikolon/Komma getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "max_overlay": {
            "name": "Overlay-Maximum",
            "description": "Berechnet das zellenweise Maximum über einen Rasterstapel und überträgt NoData, wenn eine Eingabezelle NoData ist.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel als Array von Pfaden oder als durch Semikolon/Komma getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "min_absolute_overlay": {
            "name": "Overlay-Minimum (absolut)",
            "description": "Berechnet den zellenweisen minimalen Absolutwert über einen Rasterstapel und überträgt NoData, wenn eine Eingabezelle NoData ist.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel als Array von Pfaden oder als durch Semikolon/Komma getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "min_overlay": {
            "name": "Overlay-Minimum",
            "description": "Berechnet das zellenweise Minimum über einen Rasterstapel und überträgt NoData, wenn eine Eingabezelle NoData ist.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel als Array von Pfaden oder als durch Semikolon/Komma getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "modulo": {
            "name": "Modulo",
            "description": "Berechnet zellenweise den Rest der Division des ersten Rasters durch das zweite.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "multiply": {
            "name": "Multiplizieren",
            "description": "Multipliziert zwei Raster zellenweise.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "multiply_overlay": {
            "name": "Overlay-Produkt",
            "description": "Berechnet das zellenweise Produkt über einen Rasterstapel und überträgt NoData, wenn eine Eingabezelle NoData ist.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel als Array von Pfaden oder als durch Semikolon/Komma getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "percent_equal_to": {
            "name": "Prozent gleich",
            "description": "Berechnet für jede Zelle den Anteil der Raster in einem Stapel, deren Werte dem Vergleichsraster entsprechen.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel als Array von Pfaden oder als durch Semikolon/Komma getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "Vergleich",
                "description": "Pfad des Vergleichsrasters oder In-Memory-Rasterhandle."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "percent_greater_than": {
            "name": "Prozent größer als",
            "description": "Berechnet für jede Zelle den Anteil der Raster in einem Stapel, deren Werte größer als das Vergleichsraster sind.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel als Array von Pfaden oder als durch Semikolon/Komma getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "Vergleich",
                "description": "Pfad des Vergleichsrasters oder In-Memory-Rasterhandle."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "percent_less_than": {
            "name": "Prozent kleiner als",
            "description": "Berechnet für jede Zelle den Anteil der Raster in einem Stapel, deren Werte kleiner als das Vergleichsraster sind.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel als Array von Pfaden oder als durch Semikolon/Komma getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "Vergleich",
                "description": "Pfad des Vergleichsrasters oder In-Memory-Rasterhandle."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "pick_from_list": {
            "name": "Aus Liste auswählen",
            "description": "Wählt zellenweise Werte aus einem Rasterstapel anhand eines nullbasierten Positionsrasters aus.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel als Array von Pfaden oder als durch Semikolon/Komma getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "pos_input": {
                "label": "Positions-Eingabe",
                "description": "Nullbasiertes Raster der Stapelpositionen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "power": {
            "name": "Potenz",
            "description": "Potenziert das erste Raster zellenweise mit dem zweiten.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "standard_deviation_overlay": {
            "name": "Overlay-Standardabweichung",
            "description": "Berechnet die zellenweise Standardabweichung über einen Rasterstapel und überträgt NoData, wenn eine Eingabezelle NoData ist.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel als Array von Pfaden oder als durch Semikolon/Komma getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "subtract": {
            "name": "Subtrahieren",
            "description": "Subtrahiert das zweite Raster zellenweise vom ersten.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "sum_overlay": {
            "name": "Overlay-Summe",
            "description": "Berechnet die zellenweise Summe über einen Rasterstapel und überträgt NoData, wenn eine Eingabezelle NoData ist.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel als Array von Pfaden oder als durch Semikolon/Komma getrennte Zeichenkette."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "update_nodata_cells": {
            "name": "NoData-Zellen aktualisieren",
            "description": "Belegt NoData-Zellen in input1 mit den entsprechenden gültigen Zellen aus input2.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Zu aktualisierendes Primärraster."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Sekundärraster mit den Ersatzwerten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "weighted_overlay": {
            "name": "Gewichtetes Overlay",
            "description": "Kombiniert Faktorraster mit normierten Gewichten, optionalen Kostenkennzeichen und optionalen binären Einschränkungen.",
            "params": {
              "factors": {
                "label": "Faktoren",
                "description": "Eingabe-Faktorrasterstapel."
              },
              "weights": {
                "label": "Gewichte",
                "description": "Numerische Gewichte für jedes Faktorraster."
              },
              "cost": {
                "label": "Kosten",
                "description": "Optionale boolesche Flags, die Kostenfaktoren kennzeichnen."
              },
              "constraints": {
                "label": "Einschränkungen",
                "description": "Optionaler Stapel von Beschränkungsrastern; Werte <= 0 erzwingen die Ausgabe null."
              },
              "scale_max": {
                "label": "Skalenmaximum",
                "description": "Maximaler Skalenwert nach der Faktornormalisierung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "weighted_sum": {
            "name": "Gewichtete Summe",
            "description": "Berechnet eine gewichtete Summe über einen Rasterstapel, nachdem die Gewichte auf die Summe eins normiert wurden.",
            "params": {
              "input_rasters": {
                "label": "Eingaberaster",
                "description": "Eingabe-Rasterstapel."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "weights": {
                "label": "Gewichte",
                "description": "Numerische Gewichte für jedes Eingaberaster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "image_correlation_neighbourhood_analysis": {
            "name": "Nachbarschaftsanalyse der Bildkorrelation",
            "description": "Führt eine Korrelationsanalyse in einem gleitenden Fenster zwischen zwei Rastern durch und gibt Raster für Korrelation und p-Wert zurück.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Pfad des ersten Eingaberasters."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Pfad des zweiten Eingaberasters."
              },
              "filter_size": {
                "label": "Filtergröße",
                "description": "Größe des gleitenden Fensters in Zellen (mindestens 3, Standard 11)."
              },
              "correlation_stat": {
                "label": "Korrelationsstatistik",
                "description": "Korrelationsmaß: pearson, spearman oder kendall (Standard pearson)."
              },
              "output1": {
                "label": "Ausgabe 1",
                "description": "Optionaler Ausgabepfad für das Korrelationsraster."
              },
              "output2": {
                "label": "Ausgabe 2",
                "description": "Optionaler Ausgabepfad für das Signifikanzraster (p-Wert)."
              }
            }
          },
          "natural_neighbour_interpolation": {
            "name": "Natural-Neighbour-Interpolation",
            "description": "Interpoliert ein Raster aus Punktstichproben mit echter Flächengewichtung natürlicher Nachbarn nach Sibson.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer."
              },
              "field_name": {
                "label": "Feldname",
                "description": "Optionales numerisches Attributfeld; Standard ist der FID-Rückfall."
              },
              "use_z": {
                "label": "Z verwenden",
                "description": "Z-Werte aus der Punktgeometrie statt aus den Attributen verwenden."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße, wenn base_raster nicht angegeben ist."
              },
              "base_raster": {
                "label": "Basisraster",
                "description": "Optionales Basisraster, das die Ausgabegeometrie steuert."
              },
              "clip_to_hull": {
                "label": "Auf Hülle zuschneiden",
                "description": "Interpolation auf die konvexe Hülle der Punkte beschränken."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "nearest_neighbour_interpolation": {
            "name": "Nächster-Nachbar-Interpolation",
            "description": "Interpoliert ein Raster aus Punktstichproben, indem jeder Zelle der Wert der nächstgelegenen Stichprobe zugewiesen wird.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer."
              },
              "field_name": {
                "label": "Feldname",
                "description": "Optionales numerisches Attributfeld; Standard ist der FID-Rückfall."
              },
              "use_z": {
                "label": "Z verwenden",
                "description": "Z-Werte aus der Punktgeometrie statt aus den Attributen verwenden."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße, wenn base_raster nicht angegeben ist."
              },
              "base_raster": {
                "label": "Basisraster",
                "description": "Optionales Basisraster, das die Ausgabegeometrie steuert."
              },
              "max_dist": {
                "label": "Maximale Distanz",
                "description": "Optionale maximale Suchdistanz in Karteneinheiten; Standard ist unendlich."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "conditional_evaluation": {
            "name": "Bedingte Auswertung",
            "description": "Führt eine bedingte Wenn-Dann-Sonst-Auswertung für Rasterzellen durch.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "statement": {
                "label": "Anweisung",
                "description": "Je Zelle ausgewerteter bedingter Ausdruck."
              },
              "true": {
                "label": "Wahr",
                "description": "Wert oder Raster/Ausdruck, wenn die Bedingung wahr ist."
              },
              "false": {
                "label": "Falsch",
                "description": "Wert oder Raster/Ausdruck, wenn die Bedingung falsch ist."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "reclass": {
            "name": "Reklassifizieren",
            "description": "Klassifiziert Rasterwerte anhand von Bereichen oder exakten Zuordnungspaaren neu.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster."
              },
              "reclass_values": {
                "label": "Reklassifizierungswerte",
                "description": "Reklassifizierungswerte als Zeilen [new, from, to_less_than] oder [new, old] bei assign_mode=true."
              },
              "assign_mode": {
                "label": "Zuweisungsmodus",
                "description": "Wenn wahr, wird der exakte Zuweisungsmodus mit [new_value, old_value]-Paaren verwendet."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "reclass_equal_interval": {
            "name": "Reklassifizieren nach gleichen Intervallen",
            "description": "Klassifiziert Rasterwerte in Intervalle gleicher Breite über einen optionalen Wertebereich neu.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster."
              },
              "interval_size": {
                "label": "Intervallgröße",
                "description": "Klassenbreite bei gleichen Intervallen."
              },
              "start_value": {
                "label": "Startwert",
                "description": "Optionale Untergrenze der Reklassifizierung; Standard ist das Rasterminimum."
              },
              "end_value": {
                "label": "Endwert",
                "description": "Optionale Obergrenze der Reklassifizierung; Standard ist das Rastermaximum."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "buffer_raster": {
            "name": "Raster-Puffer",
            "description": "Erstellt eine binäre Pufferzone um Rasterzellen, die nicht null und nicht NoData sind, innerhalb einer festgelegten Distanz.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster, in dem Zellen ungleich null die Pufferziele sind."
              },
              "buffer_size": {
                "label": "Puffergröße",
                "description": "Schwellenwert der Pufferdistanz."
              },
              "grid_cell_units": {
                "label": "Rasterzelleneinheiten",
                "description": "Wenn wahr, wird buffer_size in Gitterzelleneinheiten statt Karteneinheiten interpretiert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "cost_allocation": {
            "name": "Kostenzuordnung",
            "description": "Weist jede Zelle anhand eines Backlink-Rasters aus einer Kostendistanzanalyse einer Quellregion zu.",
            "params": {
              "source": {
                "label": "Quelle",
                "description": "Quellraster mit positiven Quellzellen."
              },
              "backlink": {
                "label": "Backlink",
                "description": "Backlink-Raster aus cost_distance."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "cost_distance": {
            "name": "Kostendistanz",
            "description": "Berechnet Raster der akkumulierten Reisekosten und Backlinks aus Quell- und Kostenoberflächen.",
            "params": {
              "source": {
                "label": "Quelle",
                "description": "Quellraster mit positiven Quellzellen."
              },
              "cost": {
                "label": "Kosten",
                "description": "Kosten-/Reibungsraster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters der akkumulierten Kosten."
              },
              "backlink_output": {
                "label": "Backlink-Ausgabe",
                "description": "Optionaler Ausgabepfad des Backlink-Rasters."
              }
            }
          },
          "cost_pathway": {
            "name": "Kostenpfad",
            "description": "Verfolgt kostenminimale Pfade von Zielzellen aus mithilfe eines Backlink-Rasters.",
            "params": {
              "destination": {
                "label": "Ziel",
                "description": "Zielraster mit positiven Zielzellen."
              },
              "backlink": {
                "label": "Backlink",
                "description": "Backlink-Raster aus cost_distance."
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Wenn wahr, ist der Ausgabehintergrund null statt NoData."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "euclidean_allocation": {
            "name": "Euklidische Zuordnung",
            "description": "Weist jeder gültigen Zelle den Wert der nächstgelegenen Zielzelle ungleich null zu.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster mit Zielzellen ungleich null."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "euclidean_distance": {
            "name": "Euklidische Distanz",
            "description": "Berechnet die euklidische Distanz zur nächstgelegenen Zielzelle ungleich null in einem Raster.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster mit Zielzellen ungleich null."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "abs": {
            "name": "Betrag",
            "description": "Berechnet den Absolutwert jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "aggregate_raster": {
            "name": "Raster aggregieren",
            "description": "Verringert die Rasterauflösung, indem Blöcke per Mittelwert, Summe, Minimum, Maximum oder Spannweite aggregiert werden.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster."
              },
              "aggregation_factor": {
                "label": "Aggregationsfaktor",
                "description": "Blockgröße in Quellzellen."
              },
              "aggregation_type": {
                "label": "Aggregationstyp",
                "description": "Einer von mean, sum, maximum, minimum oder range."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "anova": {
            "name": "ANOVA",
            "description": "Führt eine einfaktorielle ANOVA für Rasterwerte durch, gruppiert nach den Kategorien eines Klassenrasters.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Messwertrasters."
              },
              "features": {
                "label": "Objekte",
                "description": "Pfad des Klassen-/Kategorierasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts (Alias: output_html_file)."
              }
            }
          },
          "arccos": {
            "name": "Arkuskosinus",
            "description": "Berechnet den Arkuskosinus (arccos) jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "arcosh": {
            "name": "Areakosinus hyperbolicus",
            "description": "Berechnet den Areakosinus hyperbolicus jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "arcsin": {
            "name": "Arkussinus",
            "description": "Berechnet den Arkussinus (arcsin) jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "arctan": {
            "name": "Arkustangens",
            "description": "Berechnet den Arkustangens (arctan) jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "arsinh": {
            "name": "Areasinus hyperbolicus",
            "description": "Berechnet den Areasinus hyperbolicus jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "artanh": {
            "name": "Areatangens hyperbolicus",
            "description": "Berechnet den Areatangens hyperbolicus jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "atan2": {
            "name": "Atan2",
            "description": "Berechnet den Vier-Quadranten-Arkustangens zellenweise aus zwei Rastern.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "block_maximum": {
            "name": "Blockmaximum",
            "description": "Rastert Punktobjekte, indem jeder Ausgabezelle der darin beobachtete Maximalwert zugewiesen wird.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer."
              },
              "field_name": {
                "label": "Feldname",
                "description": "Optionales numerisches Attributfeld zum Rastern; Standard ist der FID-Rückfall."
              },
              "use_z": {
                "label": "Z verwenden",
                "description": "Z-Werte aus der Punktgeometrie statt aus den Attributen verwenden."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße, wenn base_raster nicht angegeben ist."
              },
              "base_raster": {
                "label": "Basisraster",
                "description": "Optionales Basisraster, das die Ausgabegeometrie steuert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "block_minimum": {
            "name": "Blockminimum",
            "description": "Rastert Punktobjekte, indem jeder Ausgabezelle der darin beobachtete Minimalwert zugewiesen wird.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer."
              },
              "field_name": {
                "label": "Feldname",
                "description": "Optionales numerisches Attributfeld zum Rastern; Standard ist der FID-Rückfall."
              },
              "use_z": {
                "label": "Z verwenden",
                "description": "Z-Werte aus der Punktgeometrie statt aus den Attributen verwenden."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße, wenn base_raster nicht angegeben ist."
              },
              "base_raster": {
                "label": "Basisraster",
                "description": "Optionales Basisraster, das die Ausgabegeometrie steuert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "boundary_shape_complexity": {
            "name": "Formkomplexität der Grenze",
            "description": "Berechnet die Komplexität der Grenzform von Rasterflächen anhand einer Zweigkennzahl des durch Linienverdünnung erzeugten Skeletts.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Patch-ID-Raster mit positiven ganzzahligen IDs."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "ceil": {
            "name": "Aufrunden",
            "description": "Rundet jede Rasterzelle auf die nächste ganze Zahl auf.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "centroid_raster": {
            "name": "Rasterschwerpunkt",
            "description": "Berechnet die Schwerpunktzelle für jede Flächen-ID mit positivem Wert in einem Raster.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Patchraster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "clip_raster_to_polygon": {
            "name": "Raster auf Polygon zuschneiden",
            "description": "Schneidet ein Raster auf die Ausdehnung von Polygonen zu; Zellen außerhalb der Polygone werden auf NoData gesetzt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster."
              },
              "polygons": {
                "label": "Polygone",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "maintain_dimensions": {
                "label": "Dimensionen beibehalten",
                "description": "Ursprüngliche Rasterabmessungen beibehalten, statt auf die Polygonausdehnung zuzuschneiden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "clump": {
            "name": "Verklumpen",
            "description": "Gruppiert zusammenhängende Rasterzellen gleichen Werts zu eindeutigen Flächenkennungen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Kategoriales Eingaberaster."
              },
              "diag": {
                "label": "Diagonal",
                "description": "Wenn wahr, wird die diagonale Konnektivität einbezogen (8er-Nachbarschaft); andernfalls 4er-Nachbarschaft."
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Wenn wahr, werden Zellen mit dem Wert null als Hintergrund behandelt und in der Ausgabe als null beibehalten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "cos": {
            "name": "Kosinus",
            "description": "Berechnet den Kosinus jedes Rasterzellenwerts.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "cosh": {
            "name": "Kosinus hyperbolicus",
            "description": "Berechnet den Kosinus hyperbolicus jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "create_plane": {
            "name": "Ebene erstellen",
            "description": "Erstellt ein Raster aus einer Ebenengleichung unter Verwendung der Geometrie eines Basisrasters.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Basisraster, das die Ausgabegeometrie definiert."
              },
              "gradient": {
                "label": "Gradient",
                "description": "Neigungsgradient der Ebene in Grad."
              },
              "aspect": {
                "label": "Exposition",
                "description": "Exposition der Ebene in Grad."
              },
              "constant": {
                "label": "Konstante",
                "description": "Additiver konstanter Term in der Ebenengleichung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "crispness_index": {
            "name": "Schärfeindex",
            "description": "Berechnet den Schärfeindex (Crispness) für ein Raster der Zugehörigkeitswahrscheinlichkeit.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts (Alias: output_html_file)."
              }
            }
          },
          "cross_tabulation": {
            "name": "Kreuztabellierung",
            "description": "Führt eine Kreuztabellierung zweier kategorialer Raster durch.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Pfad des Eingaberasters 1."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Pfad des Eingaberasters 2."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts (Alias: output_html_file)."
              }
            }
          },
          "cumulative_distribution": {
            "name": "Kumulative Verteilung",
            "description": "Wandelt Rasterwerte in Wahrscheinlichkeiten der kumulativen Verteilung um.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "dbscan": {
            "name": "DBSCAN",
            "description": "Führt ein unüberwachtes dichtebasiertes DBSCAN-Clustering auf einem Stapel von Eingaberastern durch.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Durch Komma/Semikolon getrennte Liste oder JSON-Array der Eingabe-Rasterpfade (Merkmalsbänder)."
              },
              "scaling_method": {
                "label": "Skalierungsmethode",
                "description": "Merkmalsskalierung: 'none' (Standard), 'normalize' (Bereich 0-1) oder 'standardize' (z-Werte)."
              },
              "search_distance": {
                "label": "Suchdistanz",
                "description": "Epsilon: Suchradius der Nachbarschaft im Merkmalsraum (Standard 1.0)."
              },
              "min_points": {
                "label": "Minimale Punkte",
                "description": "Minimale Anzahl an Nachbarn innerhalb von Epsilon für einen Kernpunkt (Standard 5)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters für die Cluster-ID-Labels."
              }
            }
          },
          "decrement": {
            "name": "Dekrement",
            "description": "Subtrahiert einen Wert (Standard 1.0) von jeder Rasterzelle, die nicht NoData ist.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "value": {
                "label": "Wert",
                "description": "Der von jeder Zelle zu subtrahierende Betrag. Standard ist 1.0."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "edge_proportion": {
            "name": "Randanteil",
            "description": "Berechnet den Anteil der Randzellen an den Zellen jeder Fläche und bildet ihn auf die Flächenzellen zurück ab.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Patch-ID-Raster mit positiven ganzzahligen IDs."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "equal_to": {
            "name": "Gleich",
            "description": "Prüft zellenweise, ob zwei Raster gleich sind.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "erase_polygon_from_raster": {
            "name": "Polygon aus Raster löschen",
            "description": "Setzt Rasterzellen innerhalb von Polygonen auf NoData und bewahrt dabei Zellen in Polygonlöchern.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster."
              },
              "polygons": {
                "label": "Polygone",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "exp": {
            "name": "Exponentialfunktion",
            "description": "Berechnet e hoch dem Wert jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "exp2": {
            "name": "Exponentialfunktion zur Basis 2",
            "description": "Berechnet 2 hoch dem Wert jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "fft_random_field": {
            "name": "FFT-Zufallsfeld",
            "description": "Erstellt ein räumlich autokorreliertes Zufallsfeld mittels FFT-Spektralsynthese.",
            "params": {
              "base_raster": {
                "label": "Basisraster",
                "description": "Pfad des Basisrasters für die Gittergeometrie."
              },
              "range": {
                "label": "Bereich",
                "description": "Näherungsweise Korrelationsreichweite in Karteneinheiten. Standard: 1.0."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "filter_raster_features_by_area": {
            "name": "Rasterobjekte nach Fläche filtern",
            "description": "Entfernt ganzzahlig beschriftete Rasterobjekte, die kleiner als ein Schwellenwert der Zellenanzahl sind.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster mit ganzzahligen Klassenlabels."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Minimale beizubehaltende Objektgröße in Zellen."
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Wenn wahr, erhalten entfernte Objekte den Wert 0; andernfalls NoData."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "find_patch_edge_cells": {
            "name": "Randzellen der Fläche finden",
            "description": "Identifiziert Randzellen für jede positive Flächen-ID eines Rasters; Flächenzellen, die keine Randzellen sind, werden auf null gesetzt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Patch-ID-Raster; positive Werte werden als Patchzellen behandelt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "floor": {
            "name": "Abrunden",
            "description": "Rundet jede Rasterzelle auf die nächste ganze Zahl ab.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "greater_than": {
            "name": "Größer als",
            "description": "Prüft zellenweise, ob das erste Raster größer als das zweite ist.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "heat_map": {
            "name": "Heatmap",
            "description": "Erzeugt ein Heatmap-Raster der Kerndichte aus Punktvorkommen.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer."
              },
              "field_name": {
                "label": "Feldname",
                "description": "Optionales numerisches Gewichtsfeld; Standard sind ungewichtete Vorkommen."
              },
              "bandwidth": {
                "label": "Bandbreite",
                "description": "Kernelbandbreite in Karteneinheiten."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße, wenn base_raster nicht angegeben ist."
              },
              "base_raster": {
                "label": "Basisraster",
                "description": "Optionales Basisraster, das die Ausgabegeometrie steuert."
              },
              "kernel_function": {
                "label": "Kernelfunktion",
                "description": "Typ der Kernelfunktion; Standard ist quartic."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "idw_interpolation": {
            "name": "IDW-Interpolation",
            "description": "Interpoliert ein Raster aus Punktstichproben mittels inverser Distanzgewichtung.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer."
              },
              "field_name": {
                "label": "Feldname",
                "description": "Optionales numerisches Attributfeld; Standard ist der FID-Rückfall."
              },
              "use_z": {
                "label": "Z verwenden",
                "description": "Z-Werte aus der Punktgeometrie statt aus den Attributen verwenden."
              },
              "weight": {
                "label": "Gewichtung",
                "description": "IDW-Distanzexponent; Standard ist 2.0."
              },
              "radius": {
                "label": "Radius",
                "description": "Optionaler Nachbarschaftsradius in Karteneinheiten; <=0 verwendet den k-nächste-Nachbarn-Fallback."
              },
              "min_points": {
                "label": "Minimale Punkte",
                "description": "Mindestanzahl der zu verwendenden Nachbarn; Standard ist 0."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße, wenn base_raster nicht angegeben ist."
              },
              "base_raster": {
                "label": "Basisraster",
                "description": "Optionales Basisraster, das die Ausgabegeometrie steuert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "image_autocorrelation": {
            "name": "Bildautokorrelation",
            "description": "Berechnet Moran's I für ein oder mehrere Rasterbilder.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Liste der Eingabe-Rasterpfade."
              },
              "contiguity": {
                "label": "Kontiguität",
                "description": "Nachbarschaftsregel: rook, king/queen oder bishop."
              }
            }
          },
          "image_correlation": {
            "name": "Bildkorrelation",
            "description": "Berechnet die Pearson-Korrelationsmatrix für zwei oder mehr Rasterbilder.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Liste der Eingabe-Rasterpfade."
              }
            }
          },
          "image_regression": {
            "name": "Bildregression",
            "description": "Führt eine bivariate lineare Regression zwischen zwei Rastern durch und gibt ein Residuenraster und einen Bericht aus.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Rasterpfad der unabhängigen Variable."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Rasterpfad der abhängigen Variable."
              },
              "standardize_residuals": {
                "label": "Residuen standardisieren",
                "description": "Ob die Residuen durch den Standardfehler des Modells standardisiert werden sollen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für das Residuenraster."
              }
            }
          },
          "increment": {
            "name": "Inkrement",
            "description": "Addiert einen Wert (Standard 1.0) zu jeder Rasterzelle, die nicht NoData ist.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "value": {
                "label": "Wert",
                "description": "Der zu jeder Zelle addierte Betrag. Standard ist 1.0."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "inplace_add": {
            "name": "Addition an Ort und Stelle",
            "description": "Führt eine direkte Additionsoperation durch (input1 += input2).",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Zu veränderndes Eingaberaster."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Eingabe-Rasterpfad oder numerische Konstante."
              }
            }
          },
          "inplace_divide": {
            "name": "Division an Ort und Stelle",
            "description": "Führt eine direkte Divisionsoperation durch (input1 /= input2).",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Zu veränderndes Eingaberaster."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Eingabe-Rasterpfad oder numerische Konstante ungleich null."
              }
            }
          },
          "inplace_multiply": {
            "name": "Multiplikation an Ort und Stelle",
            "description": "Führt eine direkte Multiplikationsoperation durch (input1 *= input2).",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Zu veränderndes Eingaberaster."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Eingabe-Rasterpfad oder numerische Konstante."
              }
            }
          },
          "inplace_subtract": {
            "name": "Subtraktion an Ort und Stelle",
            "description": "Führt eine direkte Subtraktionsoperation durch (input1 -= input2).",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Zu veränderndes Eingaberaster."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Eingabe-Rasterpfad oder numerische Konstante."
              }
            }
          },
          "integer_division": {
            "name": "Ganzzahldivision",
            "description": "Dividiert zwei Raster und schneidet jedes Ergebnis in Richtung null ab.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "inverse_pca": {
            "name": "Inverse PCA",
            "description": "Rekonstruiert die ursprünglichen Bandbilder aus PCA-Komponentenrastern mithilfe gespeicherter Eigenvektoren.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Pfade der Komponentenraster."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "pca_report": {
                "label": "PCA-Bericht",
                "description": "JSON-Berichtszeichenkette aus der PCA."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Basis-Ausgabepfad."
              }
            }
          },
          "is_nodata": {
            "name": "Ist NoData",
            "description": "Gibt 1 für NoData-Zellen und 0 für alle gültigen Zellen aus.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "kappa_index": {
            "name": "Kappa-Index",
            "description": "Berechnet Cohens Kappa und Übereinstimmungskennzahlen zwischen zwei kategorialen Rastern.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Pfad des Eingabe-Klassifikationsrasters."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Pfad des Eingabe-Referenzrasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts (Alias: output_html_file)."
              }
            }
          },
          "ks_normality_test": {
            "name": "KS-Normalitätstest",
            "description": "Prüft, ob die Rasterwerte einer Normalverteilung entstammen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "num_samples": {
                "label": "Anzahl Stichproben",
                "description": "Optionale Zufallsstichprobengröße. Weglassen, um alle gültigen Zellen zu verwenden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts (Alias: output_html_file)."
              }
            }
          },
          "less_than": {
            "name": "Kleiner als",
            "description": "Prüft zellenweise, ob das erste Raster kleiner als das zweite ist.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "list_unique_values_raster": {
            "name": "Eindeutige Werte auflisten (Raster)",
            "description": "Listet eindeutige gültige Rasterkategorien und ihre Häufigkeiten auf.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-CSV-Pfad."
              },
              "strict_parity": {
                "label": "Strikte Parität",
                "description": "Wenn wahr, wird die vollständige Kategorie-Häufigkeitsausgabe zurückgegeben (Standard wahr)."
              },
              "max_values": {
                "label": "Maximale Werte",
                "description": "Maximale Anzahl eindeutiger Werte, die einbezogen werden, wenn strict_parity falsch ist (Standard 10000)."
              }
            }
          },
          "ln": {
            "name": "Natürlicher Logarithmus",
            "description": "Berechnet den natürlichen Logarithmus jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "log10": {
            "name": "Logarithmus zur Basis 10",
            "description": "Berechnet den Zehnerlogarithmus jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "log2": {
            "name": "Logarithmus zur Basis 2",
            "description": "Berechnet den Zweierlogarithmus jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "map_features": {
            "name": "Objekte abbilden",
            "description": "Kartiert einzelne erhöhte Geländeformen aus einem Raster mittels Regionenwachstum nach absteigender Priorität.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster."
              },
              "min_feature_height": {
                "label": "Minimale Objekthöhe",
                "description": "Minimaler vertikaler Abstand für unabhängige Objekte."
              },
              "min_feature_size": {
                "label": "Minimale Objektgröße",
                "description": "Minimale Objektgröße in Zellen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "max": {
            "name": "Maximum",
            "description": "Führt eine MAX-Operation auf zwei Rastern oder einem Raster und einem konstanten Wert durch.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erster Rasterpfad oder numerische Konstante."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweiter Rasterpfad oder numerische Konstante."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "min": {
            "name": "Minimum",
            "description": "Führt eine MIN-Operation auf zwei Rastern oder einem Raster und einem konstanten Wert durch.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erster Rasterpfad oder numerische Konstante."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweiter Rasterpfad oder numerische Konstante."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "modified_shepard_interpolation": {
            "name": "Modifizierte Shepard-Interpolation",
            "description": "Interpoliert ein Raster aus Punktstichproben mittels lokal gewichteter modifizierter Shepard-Überblendung.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer."
              },
              "field_name": {
                "label": "Feldname",
                "description": "Optionales numerisches Attributfeld; Standard ist der FID-Rückfall."
              },
              "use_z": {
                "label": "Z verwenden",
                "description": "Z-Werte aus der Punktgeometrie statt aus den Attributen verwenden."
              },
              "weight": {
                "label": "Gewichtung",
                "description": "Shepard-Gewichtungsexponent; Standard ist 2.0."
              },
              "radius": {
                "label": "Radius",
                "description": "Optionaler Nachbarschaftsradius in Karteneinheiten."
              },
              "min_points": {
                "label": "Minimale Punkte",
                "description": "Mindestanzahl der Nachbarn; Standard ist 8."
              },
              "use_quadratic_basis": {
                "label": "Quadratische Basis verwenden",
                "description": "Lokale quadratische Basiskorrekturen anwenden (Legacy-kompatibler Modus)."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße, wenn base_raster nicht angegeben ist."
              },
              "base_raster": {
                "label": "Basisraster",
                "description": "Optionales Basisraster, das die Ausgabegeometrie steuert."
              },
              "use_data_hull": {
                "label": "Datenhülle verwenden",
                "description": "Interpolation auf die konvexe Hülle der Punkte beschränken."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "narrowness_index": {
            "name": "Schmalheitsindex",
            "description": "Berechnet den Schmalheitsindex von Rasterflächen als Fläche geteilt durch die Fläche des größten enthaltenen Kreises auf Basis der maximalen Distanz zum Rand.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Patch-ID-Raster mit positiven ganzzahligen IDs."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "negate": {
            "name": "Negieren",
            "description": "Negiert den Wert jeder Rasterzelle, die nicht NoData ist.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "nibble": {
            "name": "Nibble",
            "description": "Füllt Hintergrundbereiche mittels Zuweisung nach dem nächsten Nachbarn.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster, das per Nibble aufgefüllt werden soll."
              },
              "mask": {
                "label": "Maske",
                "description": "Binäres Maskenraster."
              },
              "use_nodata": {
                "label": "NoData verwenden",
                "description": "Eingabe-NoData als Klassenwert behandeln (nicht als Hintergrund)."
              },
              "nibble_nodata": {
                "label": "NoData auffüllen",
                "description": "Auch in ausmaskierte NoData-Bereiche hinein auffüllen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "not_equal_to": {
            "name": "Ungleich",
            "description": "Prüft zellenweise, ob zwei Raster ungleich sind.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "paired_sample_t_test": {
            "name": "t-Test für verbundene Stichproben",
            "description": "Führt einen t-Test für gepaarte Stichproben auf zwei Rastern anhand gepaarter gültiger Zellen durch.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Pfad des ersten Eingaberasters."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Pfad des zweiten Eingaberasters."
              },
              "num_samples": {
                "label": "Anzahl Stichproben",
                "description": "Optionale Stichprobengröße mit Zurücklegen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts (Alias: output_html_file)."
              }
            }
          },
          "phi_coefficient": {
            "name": "Phi-Koeffizient",
            "description": "Führt eine Bewertung der Übereinstimmung binärer Klassifikationen mithilfe des Phi-Koeffizienten durch.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Pfad des ersten Binärrasters."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Pfad des zweiten Binärrasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts (Alias: output_html_file)."
              }
            }
          },
          "principal_component_analysis": {
            "name": "Hauptkomponentenanalyse",
            "description": "Führt eine PCA auf einem Rasterstapel durch und gibt Komponentenbilder und einen JSON-Bericht zurück.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Eingabe-Rasterpfade (≥3)."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "num_components": {
                "label": "Anzahl Komponenten",
                "description": "Anzahl der Komponenten. Standard: alle."
              },
              "standardized": {
                "label": "Standardisiert",
                "description": "Korrelationsmatrix verwenden. Standard: falsch."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Basis-Ausgabepfad."
              }
            }
          },
          "print_geotiff_tags": {
            "name": "GeoTIFF-Tags ausgeben",
            "description": "Erstellt einen Textbericht mit den TIFF/GeoTIFF-Tags und wichtigen Metadaten eines Eingaberasters aus der GeoTIFF-Familie.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              }
            }
          },
          "quantiles": {
            "name": "Quantile",
            "description": "Transformiert Rasterwerte in Quantilklassen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "num_quantiles": {
                "label": "Anzahl Quantile",
                "description": "Anzahl der Quantile (Standard 5)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "radial_basis_function_interpolation": {
            "name": "Interpolation mit radialen Basisfunktionen",
            "description": "Interpoliert ein Raster aus Punktstichproben mittels lokaler Ähnlichkeitsgewichtung mit radialen Basisfunktionen.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer."
              },
              "field_name": {
                "label": "Feldname",
                "description": "Optionales numerisches Attributfeld; Standard ist der FID-Rückfall."
              },
              "use_z": {
                "label": "Z verwenden",
                "description": "Z-Werte aus der Punktgeometrie statt aus den Attributen verwenden."
              },
              "approximate_mode": {
                "label": "Näherungsmodus",
                "description": "Wenn wahr, wird die schnelle approximative NG-Gewichtung verwendet; wenn falsch, werden lokale RBF-Systeme gelöst (Legacy-Stil)."
              },
              "radius": {
                "label": "Radius",
                "description": "Optionaler Nachbarschaftsradius in Karteneinheiten."
              },
              "min_points": {
                "label": "Minimale Punkte",
                "description": "Mindestanzahl der zu verwendenden Nachbarn."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße, wenn base_raster nicht angegeben ist."
              },
              "base_raster": {
                "label": "Basisraster",
                "description": "Optionales Basisraster, das die Ausgabegeometrie steuert."
              },
              "func_type": {
                "label": "Funktionstyp",
                "description": "Typ der radialen Basisfunktion (thinplatespline, polyharmonic, gaussian, multiquadric, inversemultiquadric)."
              },
              "poly_order": {
                "label": "Polynomgrad",
                "description": "Hinweis zur Polynomordnung (none, constant, quadratic)."
              },
              "weight": {
                "label": "Gewichtung",
                "description": "Formparameter/Exponent der Basisfunktion, abhängig von func_type."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "radius_of_gyration": {
            "name": "Trägheitsradius",
            "description": "Berechnet je Fläche den Trägheitsradius und bildet die Werte auf die Flächenzellen zurück ab.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Patch-ID-Raster mit positiven ganzzahligen IDs."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "random_field": {
            "name": "Zufallsfeld",
            "description": "Erstellt ein Raster mit standardnormalverteilten Zufallswerten.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Pfad des Basisrasters für die Gittergeometrie."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "random_forest_classification_fit": {
            "name": "Random-Forest-Klassifikation anpassen",
            "description": "Passt ein Random-Forest-Klassifikationsmodell an und gibt die serialisierten Modellbytes zurück.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "training_data": {
                "label": "Trainingsdaten",
                "description": "Pfad der Punkt-/Polygon-Vektortrainingsdaten."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Klassenfeld in den Attributen von training_data."
              },
              "scaling": {
                "label": "Skalierung",
                "description": "Skalierungsmodus der Merkmale: none (Standard), normalize, standardize."
              },
              "split_criterion": {
                "label": "Aufteilungskriterium",
                "description": "Hinweis zum Baum-Teilungskriterium (aus Gründen der Legacy-Kompatibilität beibehalten)."
              },
              "n_trees": {
                "label": "Anzahl Bäume",
                "description": "Anzahl der Bäume im Forest (Standard 200)."
              },
              "min_samples_leaf": {
                "label": "Minimale Stichproben pro Blatt",
                "description": "Minimale Anzahl an Stichproben an einem Blattknoten (Standard 1)."
              },
              "min_samples_split": {
                "label": "Minimale Stichproben pro Aufteilung",
                "description": "Minimale Anzahl an Stichproben zum Teilen eines inneren Knotens (Standard 2)."
              },
              "test_proportion": {
                "label": "Testanteil",
                "description": "Legacy-Kompatibilitätsargument; für zukünftige Diagnosen reserviert."
              }
            }
          },
          "random_forest_classification_predict": {
            "name": "Random-Forest-Klassifikation vorhersagen",
            "description": "Wendet ein serialisiertes Random-Forest-Klassifikationsmodell auf mehrbandige Prädiktoren an.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "model_bytes": {
                "label": "Modell-Bytes",
                "description": "Von random_forest_classification_fit erzeugte Modell-Bytes."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "random_forest_regression_fit": {
            "name": "Random-Forest-Regression anpassen",
            "description": "Passt ein Random-Forest-Regressionsmodell an und gibt die serialisierten Modellbytes zurück.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "training_data": {
                "label": "Trainingsdaten",
                "description": "Pfad der Punkt-Vektortrainingsdaten."
              },
              "field": {
                "label": "Feld",
                "description": "Numerisches Zielfeld in den Attributen von training_data."
              },
              "scaling": {
                "label": "Skalierung",
                "description": "Skalierungsmodus der Merkmale: none (Standard), normalize, standardize."
              },
              "n_trees": {
                "label": "Anzahl Bäume",
                "description": "Anzahl der Bäume im Forest (Standard 200)."
              },
              "min_samples_leaf": {
                "label": "Minimale Stichproben pro Blatt",
                "description": "Minimale Anzahl an Stichproben an einem Blattknoten (Standard 1)."
              },
              "min_samples_split": {
                "label": "Minimale Stichproben pro Aufteilung",
                "description": "Minimale Anzahl an Stichproben zum Teilen eines inneren Knotens (Standard 2)."
              },
              "test_proportion": {
                "label": "Testanteil",
                "description": "Legacy-Kompatibilitätsargument; für zukünftige Diagnosen reserviert."
              }
            }
          },
          "random_forest_regression_predict": {
            "name": "Random-Forest-Regression vorhersagen",
            "description": "Wendet ein serialisiertes Random-Forest-Regressionsmodell auf mehrbandige Prädiktoren an.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Array von Einzelband-Eingaberastern."
              },
              "model_bytes": {
                "label": "Modell-Bytes",
                "description": "Von random_forest_regression_fit erzeugte Modell-Bytes."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "random_sample": {
            "name": "Zufallsstichprobe",
            "description": "Erstellt ein Raster mit zufällig platzierten Stichprobenzellen mit eindeutigen IDs.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Pfad des Basisrasters, das für die Rastergeometrie und die Maske gültiger Zellen verwendet wird."
              },
              "num_samples": {
                "label": "Anzahl Stichproben",
                "description": "Anzahl der zu erzeugenden Stichprobenzellen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "raster_area": {
            "name": "Rasterfläche",
            "description": "Schätzt die Fläche der Rasterpolygone je Klasse in Gitterzellen- oder Karteneinheiten und schreibt die Klassensummen in jede Zelle der Klasse.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Kategoriales Eingaberaster."
              },
              "units": {
                "label": "Einheiten",
                "description": "Flächeneinheiten: 'map units' (Standard) oder 'grid cells'."
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Wenn wahr, werden Zellen mit dem Wert null von der Analyse ausgeschlossen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "raster_calculator": {
            "name": "Rasterrechner",
            "description": "Wertet einen mathematischen Ausdruck zellenweise auf einer Liste von Eingaberastern aus.",
            "params": {
              "expression": {
                "label": "Ausdruck",
                "description": "Mathematischer Ausdruck mit in Anführungszeichen gesetzten Raster-Variablennamen."
              },
              "inputs": {
                "label": "Eingaben",
                "description": "Geordnete Eingabe-Rasterpfade."
              },
              "auto_reproject": {
                "label": "Automatisch umprojizieren",
                "description": "Wenn wahr (Standard), werden Stapelraster bei abweichendem KBS automatisch auf inputs[0] umprojiziert."
              },
              "auto_reproject_method": {
                "label": "Methode der automatischen Umprojektion",
                "description": "Optionale Überschreibung der Resampling-Methode für die Umprojektion: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "raster_cell_assignment": {
            "name": "Rasterzellenzuweisung",
            "description": "Erstellt ein von einem Basisraster abgeleitetes Raster, das jeder Zelle Zeilen-, Spalten-, x- oder y-Werte zuweist.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Basisraster."
              },
              "what_to_assign": {
                "label": "Zuzuweisender Wert",
                "description": "Zuweisungsziel: column, row, x oder y."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "raster_histogram": {
            "name": "Rasterhistogramm",
            "description": "Erstellt ein Histogramm mit festen Klassen für gültige Rasterzellen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des HTML-Berichts (Alias: output_html_file)."
              },
              "bins": {
                "label": "Klassen (Bins)",
                "description": "Anzahl der Histogrammklassen (Standard log2(rows*cols)+1)."
              }
            }
          },
          "raster_perimeter": {
            "name": "Rasterumfang",
            "description": "Schätzt den Umfang der Rasterpolygone je Klasse mithilfe einer Antialiasing-Nachschlagetabelle und schreibt die Klassensummen in jede Zelle der Klasse.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Kategoriales Eingaberaster."
              },
              "units": {
                "label": "Einheiten",
                "description": "Umfangseinheiten: 'map units' (Standard) oder 'grid cells'."
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Wenn wahr, werden Zellen mit dem Wert null von der Analyse ausgeschlossen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "raster_summary_stats": {
            "name": "Zusammenfassende Rasterstatistik",
            "description": "Berechnet grundlegende zusammenfassende Statistiken für gültige Rasterzellen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für den Bericht (.json oder .csv)."
              }
            }
          },
          "reciprocal": {
            "name": "Kehrwert",
            "description": "Berechnet den Kehrwert (1/x) jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "rescale_value_range": {
            "name": "Wertebereich neu skalieren",
            "description": "Skaliert Rasterwerte linear auf einen Zielbereich um.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "out_min": {
                "label": "Ausgabeminimum",
                "description": "Minimaler Ausgabewert."
              },
              "out_max": {
                "label": "Ausgabe Maximum",
                "description": "Maximaler Ausgabewert."
              },
              "clip_min": {
                "label": "Untere Beschneidungsgrenze",
                "description": "Optionales Eingabeminimum zum Abschneiden vor der Neuskalierung."
              },
              "clip_max": {
                "label": "Obere Beschneidungsgrenze",
                "description": "Optionales Eingabemaximum zum Abschneiden vor der Neuskalierung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "root_mean_square_error": {
            "name": "Wurzel des mittleren quadratischen Fehlers",
            "description": "Berechnet den RMSE und zugehörige Genauigkeitsstatistiken zwischen zwei Rastern.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Vergleichsrasters."
              },
              "base": {
                "label": "Basis",
                "description": "Pfad des Basisrasters."
              }
            }
          },
          "round": {
            "name": "Runden",
            "description": "Rundet jede Rasterzelle auf die nächste ganze Zahl.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "shape_complexity_index_raster": {
            "name": "Formkomplexitätsindex (Raster)",
            "description": "Berechnet die Formkomplexität von Rasterflächen aus der Häufigkeit horizontaler/vertikaler Übergänge, normiert auf die Ausdehnung der Fläche.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Patch-ID-Raster mit positiven ganzzahligen IDs."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "sieve": {
            "name": "Sieben",
            "description": "Entfernt kleine isolierte Flächen unterhalb eines Schwellenwerts der Zellenanzahl.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Kategoriales Eingaberaster."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Minimale zu erhaltende Patchgröße in Zellen."
              },
              "zero_background": {
                "label": "Nullhintergrund",
                "description": "Hintergrundzellen (Wert 0) in der Ausgabe auf null setzen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "sin": {
            "name": "Sinus",
            "description": "Berechnet den Sinus jedes Rasterzellenwerts.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "sinh": {
            "name": "Sinus hyperbolicus",
            "description": "Berechnet den Sinus hyperbolicus jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "sqrt": {
            "name": "Quadratwurzel",
            "description": "Berechnet die Quadratwurzel jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "square": {
            "name": "Quadrat",
            "description": "Quadriert jeden Rasterzellenwert.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "tan": {
            "name": "Tangens",
            "description": "Berechnet den Tangens jedes Rasterzellenwerts.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "tanh": {
            "name": "Tangens hyperbolicus",
            "description": "Berechnet den Tangens hyperbolicus jeder Rasterzelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "tin_interpolation": {
            "name": "TIN-Interpolation",
            "description": "Interpoliert ein Raster aus Punktstichproben mittels Delaunay-Triangulation und ebener Interpolation innerhalb jedes Dreiecks.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer."
              },
              "field_name": {
                "label": "Feldname",
                "description": "Optionales numerisches Attributfeld; Standard ist der FID-Rückfall."
              },
              "use_z": {
                "label": "Z verwenden",
                "description": "Z-Werte aus der Punktgeometrie statt aus den Attributen verwenden."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße, wenn base_raster nicht angegeben ist."
              },
              "base_raster": {
                "label": "Basisraster",
                "description": "Optionales Basisraster, das die Ausgabegeometrie steuert."
              },
              "max_triangle_edge_length": {
                "label": "Maximale Dreieckskantenlänge",
                "description": "Optionale maximal zulässige Dreieckskantenlänge in Karteneinheiten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "to_degrees": {
            "name": "In Grad",
            "description": "Wandelt jede Rasterzelle von Radiant in Grad um.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "to_radians": {
            "name": "In Bogenmaß",
            "description": "Wandelt jede Rasterzelle von Grad in Radiant um.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "trend_surface": {
            "name": "Trendfläche",
            "description": "Passt eine polynomiale Trendfläche per Kleinste-Quadrate-Regression an ein Raster an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "polynomial_order": {
                "label": "Polynomgrad",
                "description": "Polynomordnung 1–10. Standard: 1."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "trend_surface_vector_points": {
            "name": "Trendfläche aus Vektorpunkten",
            "description": "Passt eine polynomiale Trendfläche per Kleinste-Quadrate-Regression an Vektorpunktdaten an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Vektorpunktdatei."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Zellengröße des Ausgaberasters in Karteneinheiten."
              },
              "field_name": {
                "label": "Feldname",
                "description": "Attributfeld für Z-Werte. Standard: 'FID'."
              },
              "polynomial_order": {
                "label": "Polynomgrad",
                "description": "Polynomordnung 1–10. Standard: 1."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "truncate": {
            "name": "Abschneiden",
            "description": "Schneidet jeden Rasterzellenwert auf seinen ganzzahligen Anteil ab.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "turning_bands_simulation": {
            "name": "Turning-Bands-Simulation",
            "description": "Erstellt ein räumlich autokorreliertes Zufallsfeld mit dem Turning-Bands-Algorithmus.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Basisrasters."
              },
              "range": {
                "label": "Bereich",
                "description": "Korrelationsreichweite in Karteneinheiten. Standard: 1.0."
              },
              "iterations": {
                "label": "Iterationen",
                "description": "Anzahl der Bandrichtungen. Standard: 1000."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "two_sample_ks_test": {
            "name": "KS-Test für zwei Stichproben",
            "description": "Führt einen Kolmogorov-Smirnov-Zweistichprobentest für zwei Verteilungen von Rasterwerten durch.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Pfad des ersten Eingaberasters."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Pfad des zweiten Eingaberasters."
              },
              "num_samples": {
                "label": "Anzahl Stichproben",
                "description": "Optionale Stichprobengröße mit Zurücklegen je Raster."
              }
            }
          },
          "wilcoxon_signed_rank_test": {
            "name": "Wilcoxon-Vorzeichen-Rang-Test",
            "description": "Führt einen Wilcoxon-Vorzeichen-Rang-Test für gepaarte Rasterdifferenzen durch.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Pfad des ersten Eingaberasters."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Pfad des zweiten Eingaberasters."
              },
              "num_samples": {
                "label": "Anzahl Stichproben",
                "description": "Optionale Stichprobengröße mit Zurücklegen."
              }
            }
          },
          "z_scores": {
            "name": "Z-Werte",
            "description": "Standardisiert Rasterwerte mithilfe des globalen Mittelwerts und der Standardabweichung zu z-Werten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "zonal_statistics": {
            "name": "Zonale Statistik",
            "description": "Fasst die Werte eines Datenrasters innerhalb von Zonen zusammen, die durch ein Objektraster definiert sind.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-Datenrasters."
              },
              "features": {
                "label": "Objekte",
                "description": "Pfad des Zonendefinitionsrasters."
              },
              "stat_type": {
                "label": "Statistiktyp",
                "description": "Statistik: 'mean', 'median', 'min', 'max', 'range', 'standard deviation', 'diversity', 'total'. Standard: 'mean'."
              },
              "zero_is_background": {
                "label": "Null ist Hintergrund",
                "description": "Zellen der Zone 0 ausschließen. Standard: falsch."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "assess_route": {
            "name": "Route bewerten",
            "description": "Segmentiert Routenlinien und wertet je Segment Geländekennzahlen aus einem DEM aus.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "routes": {
                "label": "Routen",
                "description": "Pfad der Eingabe-Vektordatei mit Polylinienrouten."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Sichtbarkeits-Suchradius in Rasterzellen (Standard 15, Minimum 4)."
              },
              "segment_length": {
                "label": "Segmentlänge",
                "description": "Ziellänge der Routensegmente in Karteneinheiten (Standard 100.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad."
              }
            }
          },
          "breakline_mapping": {
            "name": "Bruchkantenkartierung",
            "description": "Kartiert Bruchkanten durch Schwellenwertbildung auf der logarithmisch transformierten Krümmungsstärke (Curvedness) und Vektorisierung verdünnter linearer Strukturen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Minimaler Log-Curvedness-Schwellenwert für die Bruchkantenextraktion (Standard 0.8)."
              },
              "min_length": {
                "label": "Minimale Länge",
                "description": "Minimale Länge der Ausgabelinien in Rasterzellen (Standard 3)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Standard temporäre .shp)."
              }
            }
          },
          "convergence_index": {
            "name": "Konvergenzindex",
            "description": "Fließkonvergenz/-divergenz aus der lokalen Ausrichtung der Exposition. Identifiziert Täler (konvergent) und Rücken (divergent) ohne vollständiges Abflussrouting. Effiziente Alternative zu Fließrichtungsalgorithmen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Z-Umrechnungsfaktor."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "dem_void_filling": {
            "name": "Lückenfüllung im DGM",
            "description": "Füllt DEM-Lücken mithilfe einer sekundären Oberfläche und interpolierter Höhenversätze für eine nahtlose Fusion.",
            "params": {
              "fill": {
                "label": "Füllen",
                "description": "Pfad des Füll-DEM-Rasters oder typisiertes Rasterobjekt zum Auffüllen der Lücken."
              },
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters (mit Lücken) oder typisiertes Rasterobjekt."
              },
              "edge_treatment": {
                "label": "Randbehandlung",
                "description": "Behandlung der Lückenränder: 'dem', 'fill' oder 'average' (Standard 'dem')."
              },
              "mean_plane_dist": {
                "label": "Mittlere Ebenendistanz",
                "description": "Entfernung in Zellen von den Lückenrändern, ab der die Versätze auf den globalen mittleren Versatz gesetzt werden (Standard 20)."
              },
              "weight_value": {
                "label": "Gewichtungswert",
                "description": "Exponent der Inverse-Distanz-Interpolation für die Versatzinterpolation nahe der Ränder (Standard 2.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "deviation_from_mean_elevation": {
            "name": "Abweichung von der mittleren Höhe",
            "description": "Berechnet den lokalen topografischen z-Wert anhand des lokalen Mittelwerts und der Standardabweichung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Ungerade Filterbreite in Zellen (Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Ungerade Filterhöhe in Zellen (Standard filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "difference_from_mean_elevation": {
            "name": "Differenz zur mittleren Höhe",
            "description": "Berechnet die Differenz zwischen jeder Höhe und der lokalen mittleren Höhe.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Ungerade Filterbreite in Zellen (Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Ungerade Filterhöhe in Zellen (Standard filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "directional_relief": {
            "name": "Gerichtetes Relief",
            "description": "Berechnet das richtungsabhängige Relief durch Raytracing der Höhe in einem festgelegten Azimut.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Richtungsazimut in Grad im Uhrzeigersinn von Norden."
              },
              "max_dist": {
                "label": "Maximale Distanz",
                "description": "Optionale maximale Strahldistanz in Karteneinheiten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "elev_above_pit": {
            "name": "Höhe über der Senke",
            "description": "Berechnet die Höhe über der nächstgelegenen unterliegenden Einzelzellsenke (oder Randsenke).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "elev_above_pit_dist": {
            "name": "Distanz der Höhe über der Senke",
            "description": "Kompatibilitätsalias für elev_above_pit.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "elevation_percentile": {
            "name": "Höhenperzentil",
            "description": "Lokaler Perzentilrang der Höhe innerhalb der Nachbarschaft (0-100). Identifiziert Täler (niedriger %-Wert), Rücken (hoher %-Wert) und Hänge (mittlerer %-Wert). Kennzahl der Landformklassifikation unabhängig von der absoluten Höhe.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Ungerade Filterbreite in Zellen (Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Ungerade Filterhöhe in Zellen (Standard filter_size_x). Alias: filtery."
              },
              "sig_digits": {
                "label": "Signifikante Stellen",
                "description": "Anzahl der signifikanten Dezimalstellen, die bei der Klassenbildung erhalten bleiben (Standard 2)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "embankment_mapping": {
            "name": "Dammkartierung",
            "description": "Kartiert Verkehrsdämme aus einem DEM und einem Straßennetz, optional mit Entfernung der Dammoberfläche durch Interpolation. Verfasst von John Lindsay und Nigel VanNieuwenhuizen.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "roads_vector": {
                "label": "Straßenvektor",
                "description": "Pfad der Eingabe-Vektordatei mit Straßen (Polyliniengeometrie)."
              },
              "embankment_max_width": {
                "label": "Maximale Dammbreite",
                "description": "Maximale Dammbreite in Karteneinheiten (Standard 60.0)."
              },
              "max_upwards_increment": {
                "label": "Maximales Aufwärtsinkrement",
                "description": "Maximal zulässiger lokaler Aufwärtsschritt während des Wachstums (Standard 0.05)."
              },
              "min_road_width": {
                "label": "Minimale Straßenbreite",
                "description": "Minimale kartierte Straßenbreite in Karteneinheiten (Standard 6.0)."
              },
              "remove_embankments": {
                "label": "Dämme entfernen",
                "description": "Wenn wahr, wird zusätzlich ein DEM mit entfernten Dämmen mittels lokaler Interpolation ausgegeben."
              },
              "search_dist": {
                "label": "Suchdistanz",
                "description": "Verschiebungsdistanz der Straßen-Saatpunkte in Karteneinheiten (Standard 2.5)."
              },
              "spillout_slope": {
                "label": "Überlaufneigung",
                "description": "Maximale Überlaufneigung in Grad für bergauf gerichtete Übergänge (Standard 4.0)."
              },
              "typical_embankment_max_height": {
                "label": "Typische maximale Dammhöhe",
                "description": "Typische maximale Dammhöhe in Höheneinheiten (Standard 2.0)."
              },
              "typical_embankment_width": {
                "label": "Typische Dammbreite",
                "description": "Typische Dammbreite in Karteneinheiten (Standard 30.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für die Dammmaske."
              },
              "output_dem": {
                "label": "Ausgabe-DEM",
                "description": "Optionaler Ausgabepfad für das DEM mit entfernten Dämmen, wenn remove_embankments=true."
              }
            }
          },
          "exposure_towards_wind_flux": {
            "name": "Exposition gegenüber dem Windfluss",
            "description": "Berechnet die Geländeexposition relativ zur vorherrschenden Windrichtung und die Abschirmung durch den luvseitigen Horizont.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Dominanter Windazimut in Grad im Uhrzeigersinn von Norden."
              },
              "max_dist": {
                "label": "Maximale Distanz",
                "description": "Maximale Suchdistanz für den luvseitigen Horizontwinkel in Karteneinheiten."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler vertikaler Skalierungsfaktor für projizierte DEMs."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "feature_preserving_smoothing": {
            "name": "Formerhaltende Glättung",
            "description": "Glättet die Rauheit eines DEM mittels Normalenvektorfilterung und bewahrt dabei Neigungsknicke.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "filter_size": {
                "label": "Filtergröße",
                "description": "Ungerade Filtergröße in Zellen (Standard 11)."
              },
              "iterations": {
                "label": "Iterationen",
                "description": "Anzahl der Glättungsiterationen (Standard 3)."
              },
              "max_elevation_diff": {
                "label": "Maximale Höhendifferenz",
                "description": "Maximal zulässige vertikale Änderung gegenüber dem ursprünglichen DEM (Standard inf)."
              },
              "normal_diff_threshold": {
                "label": "Normalendifferenz-Schwellenwert",
                "description": "Maximale Winkeldifferenz der Normalen in Grad (Standard 8.0)."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "feature_preserving_smoothing_multiscale": {
            "name": "Formerhaltende Glättung (multiskalig)",
            "description": "Glättet die Rauheit eines DEM mit einer mehrskaligen Fortsetzung von grob zu fein. Jeder Maßstab leitet die Normalen neu ab, wendet eine adaptive robuste Diffusion des Normalenfelds an und rekonstruiert die Höhen mit einer abgeschirmten Poisson-Lösung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "smoothing_amount": {
                "label": "Glättungsbetrag",
                "description": "Gesamtglättungsstärke in [0,1] (Standard 0.65). Höhere Werte erhöhen das Diffusionsbudget, insbesondere auf groben Skalen."
              },
              "edge_preservation": {
                "label": "Kantenerhaltung",
                "description": "Stärke der Kantenerhaltung in [0,1] (Standard 0.75). Höhere Werte unterdrücken die Glättung über markante Neigungsbrüche hinweg stärker."
              },
              "scale_levels": {
                "label": "Skalenstufen",
                "description": "Anzahl der Pyramidenstufen für die Glättung von grob nach fein (Standard 3)."
              },
              "fidelity": {
                "label": "Wiedergabetreue",
                "description": "Datentreue-Gewicht in der Screened-Poisson-Rekonstruktion (Standard 0.45). Höhere Werte halten das Ergebnis näher am Quell-DEM."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "fetch_analysis": {
            "name": "Fetch-Analyse",
            "description": "Berechnet die luvseitige Distanz zum ersten topografischen Hindernis entlang eines festgelegten Azimuts.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Windazimut in Grad im Uhrzeigersinn von Norden."
              },
              "hgt_inc": {
                "label": "Höheninkrement",
                "description": "Schwellenwert des Höhenzuwachses in m/m (Standard 0.05)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "fill_missing_data": {
            "name": "Fehlende Daten füllen",
            "description": "Füllt NoData-Lücken mittels inverser Distanzgewichtung aus gültigen Zellen am Lückenrand.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingaberasters oder typisiertes Rasterobjekt."
              },
              "exclude_edge_nodata": {
                "label": "Rand-NoData ausschließen",
                "description": "Randverbundene NoData-Bereiche vom Füllen ausschließen (Standard falsch). Alias: no_edges."
              },
              "filter_size": {
                "label": "Filtergröße",
                "description": "Suchradius in Rasterzellen (Standard 11)."
              },
              "weight": {
                "label": "Gewichtung",
                "description": "Exponent der inversen Distanzgewichtung (Standard 2.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "find_ridges": {
            "name": "Grate finden",
            "description": "Identifiziert potenzielle Rücken- und Gipfelzellen in einem DEM, optional mit Linienverdünnung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "line_thin": {
                "label": "Linien ausdünnen",
                "description": "Iterative Linienausdünnung anwenden (Standard wahr)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "hillshade": {
            "name": "Schummerung",
            "description": "Richtungsabhängige Schummerung mit einer einzelnen Lichtquelle (Graustufen 0-255). Die Parameter Azimut und Höhe steuern die Lichtrichtung. Schnelle Geländevisualisierung zur DEM-Prüfung und Kartendarstellung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-DEM-Raster"
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Auf die Höhen angewendete vertikale Überhöhung"
              },
              "altitude": {
                "label": "Sonnenhöhe",
                "description": "Beleuchtungshöhe über dem Horizont in Grad"
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Beleuchtungsazimut in Grad im Uhrzeigersinn von Norden"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "hypsometrically_tinted_hillshade": {
            "name": "Hypsometrisch getönte Schummerung",
            "description": "Erstellt eine Geländedarstellung im Schweizer Stil, indem eine Schummerung aus mehreren Azimuten mit hypsometrischer Tönung und optionalem atmosphärischem Dunst überblendet wird.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des Eingabe-DEM-Rasters."
              },
              "solar_altitude": {
                "label": "Sonnenhöhe",
                "description": "Sonnenhöhe in Grad [0, 90]."
              },
              "hillshade_weight": {
                "label": "Schummerungsgewichtung",
                "description": "Mischgewicht der Schummerung in [0, 1]."
              },
              "brightness": {
                "label": "Helligkeit",
                "description": "Helligkeitssteuerung in [0, 1]."
              },
              "atmospheric_effects": {
                "label": "Atmosphärische Effekte",
                "description": "Atmosphärische Dunstmenge in [0, 1]."
              },
              "palette": {
                "label": "Palette",
                "description": "Palettenname (atlas, high_relief, arid, soft, muted, viridis, dem, grey, white usw.)."
              },
              "reverse_palette": {
                "label": "Palette umkehren",
                "description": "Palettenreihenfolge umkehren."
              },
              "full_360_mode": {
                "label": "Vollständiger 360-Grad-Modus",
                "description": "8-Richtungs-Beleuchtung anstelle des 4-Richtungs-Modus verwenden."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Multiplikator der vertikalen Überhöhung."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des Ausgaberasters."
              }
            }
          },
          "local_hypsometric_analysis": {
            "name": "Lokale hypsometrische Analyse",
            "description": "Berechnet das minimale lokale hypsometrische Integral über einen nichtlinear abgetasteten Bereich von Nachbarschaftsmaßstäben.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "min_scale": {
                "label": "Minimale Skala",
                "description": "Minimaler Halbfensterradius in Zellen (Standard 4)."
              },
              "step_size": {
                "label": "Schrittweite",
                "description": "Basis-Schrittweite in Zellen (Standard 1). Alias: step."
              },
              "num_steps": {
                "label": "Anzahl Schritte",
                "description": "Anzahl der auszuwertenden Skalen (Standard 10)."
              },
              "step_nonlinearity": {
                "label": "Schritt-Nichtlinearität",
                "description": "Nichtlinearität der Skalenschritte in [1,4] (Standard 1.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für das Raster des lokalen HI-Minimums."
              },
              "output_scale": {
                "label": "Skala ausgeben",
                "description": "Optionaler Ausgabepfad für das Raster der Skala des HI-Minimums."
              }
            }
          },
          "low_points_on_headwater_divides": {
            "name": "Tiefpunkte auf Quellgebietsscheiden",
            "description": "Ermittelt niedrige Passpunkte entlang der Wasserscheiden zwischen benachbarten Quellteileinzugsgebieten.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des senkenfreien Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "streams": {
                "label": "Gewässer",
                "description": "Pfad des Eingabe-Gewässerrasters (positive Werte kennzeichnen Gerinnezellen)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Standard temporäre .shp)."
              }
            }
          },
          "max_downslope_elev_change": {
            "name": "Maximale abwärtige Höhenänderung",
            "description": "Berechnet den maximalen Höhenabfall zu tiefer liegenden Nachbarzellen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "max_upslope_elev_change": {
            "name": "Maximale aufwärtige Höhenänderung",
            "description": "Berechnet den maximalen Höhenanstieg zu höher liegenden Nachbarzellen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "min_downslope_elev_change": {
            "name": "Minimale abwärtige Höhenänderung",
            "description": "Berechnet den minimalen nichtnegativen Höhenabfall zu Nachbarzellen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "multidirectional_hillshade": {
            "name": "Mehrfachrichtungs-Schummerung",
            "description": "Mehrfachrichtungs-Schummerung (8+ Lichtquellen), die Schattenartefakte einer einzelnen Lichtquelle beseitigt. Ausgewogene Sichtbarkeit von Geländeformen in komplexem Gelände; bevorzugt für Veröffentlichungen und detaillierte Analysen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-DEM-Raster"
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Auf die Höhen angewendete vertikale Überhöhung"
              },
              "altitude": {
                "label": "Sonnenhöhe",
                "description": "Beleuchtungshöhe über dem Horizont in Grad"
              },
              "full_360_mode": {
                "label": "Vollständiger 360-Grad-Modus",
                "description": "8 Lichtquellen über die vollen 360 Grad kombinieren anstelle der standardmäßigen 4"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters"
              }
            }
          },
          "num_downslope_neighbours": {
            "name": "Anzahl unterliegender Nachbarn",
            "description": "Zählt die Anzahl der 8-Nachbarzellen, die tiefer als jede DEM-Zelle liegen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "num_upslope_neighbours": {
            "name": "Anzahl oberliegender Nachbarn",
            "description": "Zählt die Anzahl der 8-Nachbarzellen, die höher als jede DEM-Zelle liegen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "profile": {
            "name": "Profil",
            "description": "Erstellt ein HTML-Diagramm des Höhenprofils für ein oder mehrere Eingabe-Polylinienobjekte, abgetastet aus einem Oberflächenraster.",
            "params": {
              "lines_vector": {
                "label": "Linienvektor",
                "description": "Pfad des Eingabe-Polylinienvektors."
              },
              "surface": {
                "label": "Oberfläche",
                "description": "Pfad des Eingabe-Oberflächenrasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des HTML-Ausgabeberichts."
              }
            }
          },
          "slope_vs_aspect_plot": {
            "name": "Diagramm Neigung gegen Exposition",
            "description": "Erstellt ein radiales HTML-Analysediagramm Neigung gegen Exposition für ein Eingabe-DEM.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "aspect_bin_size": {
                "label": "Expositionsklassengröße",
                "description": "Klassenbreite der Exposition in Grad (Standard 2.0)."
              },
              "min_slope": {
                "label": "Minimale Neigung",
                "description": "Neigungen unterhalb dieses Schwellenwerts in Grad ignorieren (Standard 0.1)."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Vertikaler Skalierungsfaktor für Höhenwerte."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des HTML-Ausgabeberichts."
              }
            }
          },
          "slope_vs_elev_plot": {
            "name": "Diagramm Neigung gegen Höhe",
            "description": "Erstellt ein HTML-Analysediagramm Neigung gegen Höhe für ein oder mehrere DEMs.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Eingabe-DEM-Pfade als durch ';' oder ',' getrennte Zeichenkette oder als Liste."
              },
              "watershed": {
                "label": "Einzugsgebiet",
                "description": "Optionale Einzugsgebietsraster passend zu jedem Eingabe-DEM."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des HTML-Ausgabeberichts."
              }
            }
          },
          "surface_area_ratio": {
            "name": "Oberflächenverhältnis",
            "description": "Verhältnis von 3D-Oberfläche zu planimetrischer Fläche (Jenness-Methode). >1.0=raues Gelände, ≈1.0=flach. Dimensionslose Rugositätskennzahl, die einen regionsübergreifenden Geländevergleich ermöglicht.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "topographic_hachures": {
            "name": "Topografische Schraffuren",
            "description": "Erstellt topografische Schraffen als Polylinien aus einem DEM mithilfe von an Höhenlinien beginnenden abwärts und aufwärts gerichteten Fließlinien. Die frühere Urheberangabe wird für dieses Werkzeug bewusst beibehalten.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "base": {
                "label": "Basis",
                "description": "Basishöhe der Höhenlinien (Standard 0.0)."
              },
              "depth": {
                "label": "Tiefe",
                "description": "Rekursive Auffülltiefe in divergenten Bereichen (Standard 16)."
              },
              "discretization": {
                "label": "Diskretisierung",
                "description": "Schrittlänge der Fließlinien in mittleren Zelleneinheiten (Standard 0.5)."
              },
              "distmax": {
                "label": "Maximale Distanz",
                "description": "Maximaler Abstandsmultiplikator zum Einfügen zusätzlicher Schraffen (Standard 2.0)."
              },
              "distmin": {
                "label": "Minimale Distanz",
                "description": "Minimaler Abstandsmultiplikator zum Kürzen benachbarter Schraffen (Standard 0.5)."
              },
              "interval": {
                "label": "Intervall",
                "description": "Äquidistanz der Höhenlinien (Standard 10.0)."
              },
              "separation": {
                "label": "Trennung",
                "description": "Nomineller Abstand der Höhenlinien-Saatpunkte in mittleren Zelleneinheiten (Standard 2.0)."
              },
              "slopemin": {
                "label": "Minimale Neigung",
                "description": "Minimaler Neigungswinkel in Grad für die Fortsetzung der Verfolgung (Standard 0.5)."
              },
              "smooth": {
                "label": "Glätten",
                "description": "Filtergröße der Höhenlinienglättung (ungerade ganze Zahl bevorzugt, Standard 9)."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Minimaler Biegungswinkel der Höhenlinien in Grad, der bei der Vereinfachung erhalten bleibt (Standard 10.0)."
              },
              "turnmax": {
                "label": "Maximale Drehung",
                "description": "Maximal zulässiger Drehwinkel in Grad beim Verfolgen der Schraffen (Standard 45.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "map_off_terrain_objects": {
            "name": "Objekte über dem Gelände kartieren",
            "description": "Kartiert Segmente von Nicht-Geländeobjekten in DSMs mittels neigungsbeschränktem Regionenwachstum und optionaler Filterung nach Mindestobjektgröße.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DSM-Rasters oder typisiertes Rasterobjekt."
              },
              "max_slope": {
                "label": "Maximale Neigung",
                "description": "Maximale Verbindungsneigung in Grad [1, 90] (Standard inf, auf 90 begrenzt)."
              },
              "min_feature_size": {
                "label": "Minimale Objektgröße",
                "description": "Minimale beibehaltene Segmentgröße in Zellen (Standard 0). Kleinere Segmente werden der Hintergrundklasse 1 zugewiesen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "remove_off_terrain_objects": {
            "name": "Objekte über dem Gelände entfernen",
            "description": "Entfernt steile Nicht-Geländeobjekte aus DEMs mittels Normalisierung durch weiße Top-Hat-Transformation, neigungsbeschränktem Regionenwachstum und lokaler Interpolation.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "filter_size": {
                "label": "Filtergröße",
                "description": "Maximal erwartete Objektbreite in Zellen; wird auf eine ungerade Größe >= 3 gebracht (Standard 11)."
              },
              "slope_threshold": {
                "label": "Neigungsschwellenwert",
                "description": "Minimale Neigung der Objektkanten in Grad (Standard 15.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "ridge_and_valley_vectors": {
            "name": "Grat- und Talvektoren",
            "description": "Extrahiert Mittellinien von Rücken und Tälern als Vektoren aus einem DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster."
              },
              "filter_size": {
                "label": "Filtergröße",
                "description": "Nachbarschaftsgröße für das Höhenperzentil."
              },
              "ep_threshold": {
                "label": "EP-Schwellenwert",
                "description": "Schwellenwert des Höhenperzentils [5, 50]."
              },
              "slope_threshold": {
                "label": "Neigungsschwellenwert",
                "description": "Minimaler Neigungsschwellenwert in Grad."
              },
              "min_length": {
                "label": "Minimale Länge",
                "description": "Minimale Mittellinienlänge in Zellen."
              },
              "output_ridges": {
                "label": "Kämme ausgeben",
                "description": "Ausgabepfad der Kammmittellinien."
              },
              "output_valleys": {
                "label": "Täler ausgeben",
                "description": "Ausgabepfad der Talmittellinien."
              }
            }
          },
          "smooth_vegetation_residual": {
            "name": "Vegetationsrestwert glätten",
            "description": "Verringert die verbleibende Rauheit des Kronendachs, indem hohe lokale DEV-Antworten in kleinen Maßstäben maskiert und die maskierten Höhen neu interpoliert werden.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "max_scale": {
                "label": "Maximale Skala",
                "description": "Maximaler DEV-Halbfensterradius in Zellen (Standard 30)."
              },
              "dev_threshold": {
                "label": "Abweichungsschwellenwert",
                "description": "Minimaler DEV-Betrag zur Kennzeichnung von Rauheitszellen (Standard 1.0)."
              },
              "scale_threshold": {
                "label": "Skalenschwellenwert",
                "description": "Maximale als Rauheit betrachtete Skala (Standard 5)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "average_horizon_distance": {
            "name": "Mittlere Horizontdistanz",
            "description": "Berechnet die mittlere Distanz zum Horizont über alle Azimutrichtungen.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des Eingabe-DEM/DSM-Rasters."
              },
              "az_fraction": {
                "label": "Azimutanteil",
                "description": "Azimutschritt in Grad [1, 45]."
              },
              "max_dist": {
                "label": "Maximale Distanz",
                "description": "Maximale Suchdistanz in Karteneinheiten."
              },
              "observer_hgt_offset": {
                "label": "Beobachterhöhenversatz",
                "description": "Höhenversatz des Beobachters über dem Gelände."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des Ausgaberasters."
              }
            }
          },
          "horizon_angle": {
            "name": "Horizontwinkel",
            "description": "Berechnet den Horizontwinkel (maximale Neigung) entlang einer festgelegten Azimutrichtung.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des Eingabe-DEM-Rasters."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut in Grad [0, 360)."
              },
              "max_dist": {
                "label": "Maximale Distanz",
                "description": "Maximale Suchdistanz in Karteneinheiten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des Ausgaberasters."
              }
            }
          },
          "horizon_area": {
            "name": "Horizontfläche",
            "description": "Berechnet die Fläche des Horizontpolygons (Hektar).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des Eingabe-DEM/DSM-Rasters."
              },
              "az_fraction": {
                "label": "Azimutanteil",
                "description": "Azimutschritt in Grad [1, 45]."
              },
              "max_dist": {
                "label": "Maximale Distanz",
                "description": "Maximale Suchdistanz in Karteneinheiten."
              },
              "observer_hgt_offset": {
                "label": "Beobachterhöhenversatz",
                "description": "Höhenversatz des Beobachters über dem Gelände."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des Ausgaberasters."
              }
            }
          },
          "openness": {
            "name": "Openness",
            "description": "Topografische Offenheit nach Yokoyama: Expositionskennzahlen für positive (exponierte Rücken/Gipfel) und negative (eingeschlossene Täler) Offenheit. Landformklassifikation sowie Sichtbarkeits- und Mikroklimaanalysen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "dist": {
                "label": "Distanz",
                "description": "Suchdistanz in Zellen (Standard 20)."
              },
              "neg_output": {
                "label": "Negative Ausgabe",
                "description": "Optionaler Ausgabepfad für die negative Openness."
              },
              "pos_output": {
                "label": "Positive Ausgabe",
                "description": "Optionaler Ausgabepfad für die positive Openness."
              }
            }
          },
          "shadow_animation": {
            "name": "Schattenanimation",
            "description": "Erstellt einen interaktiven HTML-Viewer und ein animiertes GIF, die Geländeschatten im Tagesverlauf zeigen.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des Eingabe-DEM/DSM-Rasters."
              },
              "date": {
                "label": "Datum",
                "description": "Datum im Format DD/MM/YYYY."
              },
              "delay": {
                "label": "Verzögerung",
                "description": "GIF-Verzögerung je Bild in Millisekunden."
              },
              "image_height": {
                "label": "Bildhöhe",
                "description": "Angezeigte Bildhöhe in Pixeln."
              },
              "label": {
                "label": "Beschriftung",
                "description": "Optionale im Viewer angezeigte Beschriftung."
              },
              "location": {
                "label": "Standort",
                "description": "Positionszeichenkette LAT/LON/UTC_OFFSET, z. B. 43.5448/-80.2482/-4."
              },
              "max_dist": {
                "label": "Maximale Distanz",
                "description": "Maximale Horizont-Suchdistanz in Karteneinheiten."
              },
              "palette": {
                "label": "Palette",
                "description": "Name der hypsometrischen Palette (z. B. soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "time_interval": {
                "label": "Zeitintervall",
                "description": "Bildintervall in Minuten [1, 60]."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der HTML-Datei."
              }
            }
          },
          "shadow_image": {
            "name": "Schattenbild",
            "description": "Erzeugt ein Raster der Geländeschattenintensität für ein festgelegtes Datum, eine Uhrzeit und einen Standort.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des Eingabe-DEM/DSM-Rasters."
              },
              "date": {
                "label": "Datum",
                "description": "Datum im Format DD/MM/YYYY."
              },
              "location": {
                "label": "Standort",
                "description": "Positionszeichenkette LAT/LON/UTC_OFFSET, z. B. 43.5448/-80.2482/-4."
              },
              "max_dist": {
                "label": "Maximale Distanz",
                "description": "Maximale Horizont-Suchdistanz in Karteneinheiten."
              },
              "palette": {
                "label": "Palette",
                "description": "Name der hypsometrischen Palette (z. B. soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "time": {
                "label": "Zeit",
                "description": "Ortszeit im Format HH:MM oder HH:MMAM/HH:MMPM."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "sky_view_factor": {
            "name": "Himmelssichtfaktor",
            "description": "Berechnet den Anteil des sichtbaren Himmels aus einem DEM/DSM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des Eingabe-DEM/DSM-Rasters."
              },
              "az_fraction": {
                "label": "Azimutanteil",
                "description": "Azimutschritt in Grad [1, 45]."
              },
              "max_dist": {
                "label": "Maximale Distanz",
                "description": "Maximale Suchdistanz in Karteneinheiten."
              },
              "observer_hgt_offset": {
                "label": "Beobachterhöhenversatz",
                "description": "Höhenversatz des Beobachters über dem Gelände."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des Ausgaberasters."
              }
            }
          },
          "skyline_analysis": {
            "name": "Skyline-Analyse",
            "description": "Führt eine Skyline-Analyse für einen oder mehrere Beobachtungspunkte durch und schreibt eine Vektorspur des Horizonts sowie einen HTML-Bericht.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des Eingabe-DEM/DSM-Rasters."
              },
              "points": {
                "label": "Punkte",
                "description": "Pfad des Eingabe-Punktvektors."
              },
              "az_fraction": {
                "label": "Azimutanteil",
                "description": "Azimutschritt in Grad [0.01, 45]."
              },
              "max_dist": {
                "label": "Maximale Distanz",
                "description": "Maximale Suchdistanz in Karteneinheiten."
              },
              "observer_hgt_offset": {
                "label": "Beobachterhöhenversatz",
                "description": "Höhenversatz des Beobachters über dem Gelände."
              },
              "output_as_polygons": {
                "label": "Als Polygone ausgeben",
                "description": "Polygonhorizonte anstelle von Polylinien schreiben."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              },
              "output_html": {
                "label": "HTML-Ausgabe",
                "description": "Optionaler Pfad des HTML-Berichts."
              }
            }
          },
          "time_in_daylight": {
            "name": "Zeit im Tageslicht",
            "description": "Berechnet den Anteil der Tageszeit, in dem jede Zelle beleuchtet ist (nicht im Schatten von Gelände/Objekten).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des Eingabe-DEM/DSM-Rasters."
              },
              "az_fraction": {
                "label": "Azimutanteil",
                "description": "Azimut-Klassenbreite in Grad (0, 360)."
              },
              "end_day": {
                "label": "Endtag",
                "description": "End-Tag des Jahres (1..366)."
              },
              "end_time": {
                "label": "Endzeit",
                "description": "Endzeit HH:MM:SS oder 'sunset'."
              },
              "latitude": {
                "label": "Breitengrad",
                "description": "Optionale Überschreibung der geografischen Breite in Grad; andernfalls aus dem KBS des DEM abgeleitet."
              },
              "longitude": {
                "label": "Längengrad",
                "description": "Optionale Überschreibung der geografischen Länge in Grad; andernfalls aus dem KBS des DEM abgeleitet."
              },
              "max_dist": {
                "label": "Maximale Distanz",
                "description": "Maximale Horizont-Suchdistanz in Karteneinheiten."
              },
              "start_day": {
                "label": "Starttag",
                "description": "Start-Tag des Jahres (1..366)."
              },
              "start_time": {
                "label": "Startzeit",
                "description": "Startzeit HH:MM:SS oder 'sunrise'."
              },
              "utc_offset": {
                "label": "UTC-Versatz",
                "description": "Optionale UTC-Versatz-Zeichenkette wie UTC+00:00; falls weggelassen, aus der mittleren geografischen Länge geschätzt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters."
              }
            }
          },
          "viewshed": {
            "name": "Sichtfeld",
            "description": "Berechnet aus Punktstationen über einem DEM die Anzahl der Stationen, von denen aus jede Zelle sichtbar ist.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "stations": {
                "label": "Stationen",
                "description": "Eingabe-Punktvektordatei der Beobachtungsstandorte."
              },
              "height": {
                "label": "Höhe",
                "description": "Höhe des Beobachtungsstandorts über Grund in Z-Einheiten des DEM (Standard 2.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "visibility_index": {
            "name": "Sichtbarkeitsindex",
            "description": "Berechnet einen topografiebasierten Sichtbarkeitsindex aus abgetasteten Sichtbereichen.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des Eingabe-DEM-Rasters."
              },
              "max_dist": {
                "label": "Maximale Distanz",
                "description": "Maximale Sichtbarkeits-Suchdistanz in Karteneinheiten."
              },
              "resolution_factor": {
                "label": "Auflösungsfaktor",
                "description": "Faktor der Abtastauflösung [1, 25]."
              },
              "station_height": {
                "label": "Stationshöhe",
                "description": "Beobachterhöhe über Grund."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des Ausgaberasters."
              }
            }
          },
          "accumulation_curvature": {
            "name": "Akkumulationskrümmung",
            "description": "Berechnet die Akkumulationskrümmung aus einem DEM.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "aspect": {
            "name": "Exposition",
            "description": "Richtung der maximalen Neigung (0°=N, 90°=O, 180°=S, 270°=W). Entscheidend für Analysen von Sonneneinstrahlung, Vegetationsmustern, Mikroklima und Exposition.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Z-Umrechnungsfaktor."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "casorati_curvature": {
            "name": "Casorati-Krümmung",
            "description": "Berechnet die Casorati-Krümmung aus einem DEM.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "curvedness": {
            "name": "Gekrümmtheit",
            "description": "Berechnet den Oberflächenformdeskriptor Krümmungsstärke (Curvedness) aus einem DEM.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "difference_curvature": {
            "name": "Differenzkrümmung",
            "description": "Berechnet die Differenzkrümmung aus einem DEM.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "gaussian_curvature": {
            "name": "Gaußsche Krümmung",
            "description": "Berechnet die gaußsche (intrinsische) Krümmung (Produkt der Hauptkrümmungen). Zeigt die lokale Oberflächentopologie: positiv (Mulde/Kuppe), negativ (Sattel), null (zylindrisch). Klassifiziert Gelände in Landformkategorien: konvexe Formen (Rücken), konkave Formen (Täler), Sattelformen (Pässe/Scharten). Wird in der fortgeschrittenen Landformklassifikation verwendet.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor, wenn vertikale und horizontale Einheiten abweichen (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte zur besseren Lesbarkeit (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "generating_function": {
            "name": "Erzeugende Funktion",
            "description": "Berechnet die Erzeugendenfunktion aus einem DEM.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "horizontal_excess_curvature": {
            "name": "Horizontale Überschusskrümmung",
            "description": "Berechnet die horizontale Überschusskrümmung aus einem DEM.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "maximal_curvature": {
            "name": "Maximale Krümmung",
            "description": "Berechnet die maximale Krümmung (maximale Hauptkrümmung) aus einem DEM.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "mean_curvature": {
            "name": "Mittlere Krümmung",
            "description": "Berechnet die mittlere Krümmung (Mittelwert der Hauptkrümmungen). Verwandt mit der Gesamtkrümmung, betont jedoch die Glätte der Oberfläche. Werte nahe 0 weisen auf glattes Gelände hin; hohe Werte auf abrupte Krümmungsänderungen. Nützlich zur Oberflächencharakterisierung und Erkennung von Bruchkanten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor, wenn vertikale und horizontale Einheiten abweichen (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte zur besseren Lesbarkeit (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "minimal_curvature": {
            "name": "Minimale Krümmung",
            "description": "Berechnet die minimale Krümmung (minimale Hauptkrümmung) aus einem DEM.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "plan_curvature": {
            "name": "Horizontalkrümmung",
            "description": "Berechnet die Horizontalkrümmung (Plankrümmung), die Konvergenz/Divergenz des Abflusses quer zu den Höhenlinien misst. Positive Werte (konvergent) weisen auf eine Abflusskonzentration zur Mitte hin (konkav); negative Werte (divergent) auf eine Abflussverteilung von der Mitte weg (konvex). Identifiziert Zonen lateraler Abflusskonzentration (Täler) gegenüber Verteilungszonen (Rücken). Unverzichtbar für die Vorhersage der Bodenfeuchteverteilung und der Hangrutschungsanfälligkeit.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor, wenn vertikale und horizontale Einheiten abweichen (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte zur besseren Lesbarkeit (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "principal_curvature_direction": {
            "name": "Richtung der Hauptkrümmung",
            "description": "Berechnet den Richtungswinkel der Hauptkrümmung (Grad).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "profile_curvature": {
            "name": "Vertikalkrümmung",
            "description": "Berechnet die Vertikalkrümmung (Profilkrümmung in Gefällerichtung), die Beschleunigung/Verzögerung des Abflusses entlang der Hangrichtung misst. Positive Werte (konkav) weisen auf Zonen der Abflussbeschleunigung hin (erosiv); negative Werte (konvex) auf Zonen der Abflussverzögerung (akkumulativ). Zeigt die Hangform: konkav (Talböden, Erosion), konvex (Rücken, Materialabtrag), linear (Übergang).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor, wenn vertikale und horizontale Einheiten abweichen (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte zur besseren Lesbarkeit (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "relative_aspect": {
            "name": "Relative Exposition",
            "description": "Berechnet die Exposition des Geländes relativ zu einem vom Benutzer festgelegten Azimut (0 bis 180 Grad).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Referenzazimut in Grad im Uhrzeigersinn von Norden."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler vertikaler Skalierungsfaktor."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "ring_curvature": {
            "name": "Ringkrümmung",
            "description": "Berechnet die Ringkrümmung (quadrierte Verdrehung der Fließlinien) aus einem DEM.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "rotor": {
            "name": "Rotor",
            "description": "Berechnet den Rotor (Verdrehung der Fließlinien) aus einem DEM.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "shape_index": {
            "name": "Formindex",
            "description": "Berechnet den Oberflächenformdeskriptor Formindex (Shape Index) aus einem DEM.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "slope": {
            "name": "Neigung",
            "description": "Neigungsgradient nach Zevenbergen-Thorne (Grad/Radiant/Prozent). Grundlegende geomorphometrische Kennzahl; nachgelagerte Eingabe für Krümmung, Fließrichtung, Schattierung und Sichtbarkeit.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "units": {
                "label": "Einheiten",
                "description": "Ausgabeeinheiten: degrees, radians, percent."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Z-Umrechnungsfaktor."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "tangential_curvature": {
            "name": "Tangentialkrümmung",
            "description": "Berechnet die Tangentialkrümmung (Komponente in O-W-Richtung), ähnlich der Horizontalkrümmung, jedoch richtungsbezogen. Wird zur umfassenden Krümmungscharakterisierung verwendet und erfasst die laterale Abflussdivergenz senkrecht zur Hangrichtung. Wird häufig mit der Profilkrümmung kombiniert, um ein vollständiges 3D-Verständnis der Krümmung zu erhalten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor, wenn vertikale und horizontale Einheiten abweichen (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte zur besseren Lesbarkeit (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "total_curvature": {
            "name": "Gesamtkrümmung",
            "description": "Berechnet die Gesamtkrümmung (quadratisches Mittel der Hauptkrümmungen). Richtungsunabhängige skalare Kennzahl. Hohe Werte weisen auf stark gekrümmtes Gelände hin (Gipfel, Senken); niedrige Werte auf ebenes Gelände. Nützlich als dimensionslose Rauheitskennzahl für Geländeklassifikation und Anomalieerkennung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor, wenn vertikale und horizontale Einheiten abweichen (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte zur besseren Lesbarkeit (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "unsphericity": {
            "name": "Unsphärizität",
            "description": "Berechnet die Unsphärizitätskrümmung (halbe Differenz der Hauptkrümmungen) aus einem DEM.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "vertical_excess_curvature": {
            "name": "Vertikale Überschusskrümmung",
            "description": "Berechnet die vertikale Überschusskrümmung aus einem DEM.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler Z-Umrechnungsfaktor (Standard 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Optionale Log-Transformation der Ausgabewerte (Standard falsch). Alias: log."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "average_normal_vector_angular_deviation": {
            "name": "Mittlere Winkelabweichung des Normalenvektors",
            "description": "Berechnet die lokale mittlere Winkelabweichung zwischen ursprünglichen und geglätteten Oberflächennormalen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "filter_size": {
                "label": "Filtergröße",
                "description": "Ungerade Nachbarschaftsgröße in Zellen (Standard 11). Alias: filter."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler vertikaler Skalierungsfaktor."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "circular_variance_of_aspect": {
            "name": "Zirkuläre Varianz der Exposition",
            "description": "Berechnet die lokale zirkuläre Varianz der Exposition innerhalb einer gleitenden Nachbarschaft.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "filter": {
                "label": "Filter",
                "description": "Ungerade Nachbarschaftsgröße in Zellen (Standard 11)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "edge_density": {
            "name": "Kantendichte",
            "description": "Berechnet die lokale Dichte von Neigungsknicken anhand von Winkeldifferenzen der Normalenvektoren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "filter_size": {
                "label": "Filtergröße",
                "description": "Ungerade Nachbarschaftsgröße in Zellen (Standard 11). Alias: filter."
              },
              "norm_diff": {
                "label": "Normalendifferenz",
                "description": "Winkelschwellenwert der Normalenvektoren in Grad (Standard 5)."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler vertikaler Skalierungsfaktor."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "ruggedness_index": {
            "name": "Rauheitsindex",
            "description": "Geländerauheit über den Riley-TRI (Summe der quadrierten Höhendifferenzen). Maßstabsunabhängige Kennzahl zur Geländeklassifikation: niedrig=glatte Ebenen, hoch=raue Gebirge. Ökologische und geomorphologische Landformkartierung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "spherical_std_dev_of_normals": {
            "name": "Sphärische Standardabweichung der Normalen",
            "description": "Berechnet die sphärische Standardabweichung der lokalen Oberflächennormalen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "filter_size": {
                "label": "Filtergröße",
                "description": "Ungerade Nachbarschaftsgröße in Zellen (Standard 11). Alias: filter."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler vertikaler Skalierungsfaktor."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "standard_deviation_of_slope": {
            "name": "Standardabweichung der Neigung",
            "description": "Berechnet die lokale Standardabweichung der Neigung als Kennzahl der Geländerauheit.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "filter_size": {
                "label": "Filtergröße",
                "description": "Ungerade Filtergröße in Zellen (Standard 11)."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Ungerade Filterbreite in Zellen (Standard filter_size). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Ungerade Filterhöhe in Zellen (Standard filter_size). Alias: filtery."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Z-Umrechnungsfaktor, wenn vertikale und horizontale Einheiten abweichen (Standard 1.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, bleibt das Ergebnis im Speicher."
              }
            }
          },
          "elev_relative_to_min_max": {
            "name": "Höhe relativ zu Min/Max",
            "description": "Drückt jede Höhe als Prozentsatz (0–100) des Höhenbereichs des Rasters aus.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "geomorphons": {
            "name": "Geomorphone",
            "description": "Klassifiziert Landformen anhand ternärer Sichtlinienmuster in 8 Richtungen, die aus Vergleichen von Zenit- und Nadirwinkeln abgeleitet werden, oder anhand von 10 häufigen Geomorphon-Formen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "analyze_residuals": {
                "label": "Residuen analysieren",
                "description": "Wenn wahr, wird das DEM vor der Klassifikation mittels einer angepassten linearen Ebene trendbereinigt."
              },
              "flatness_distance": {
                "label": "Ebenheitsdistanz",
                "description": "Entfernung in Zellen, ab der der Ebenheitsschwellenwert mit der Horizontdistanz abnimmt (Standard 0)."
              },
              "flatness_threshold": {
                "label": "Ebenheitsschwellenwert",
                "description": "Ebenheitsschwellenwert in Grad (Standard 1.0), angewendet auf die Differenz zwischen Zenit- und Nadirwinkel."
              },
              "output_forms": {
                "label": "Formen ausgeben",
                "description": "Wenn wahr, werden 10 gängige Landformklassen ausgegeben; andernfalls wird der rohe ternäre Geomorphon-Code gegen den Uhrzeigersinn ab Osten ausgegeben."
              },
              "search_distance": {
                "label": "Suchdistanz",
                "description": "Maximale Blickdistanz in Zellen je Richtung (Standard 50); die Endzelle ist eingeschlossen."
              },
              "skip_distance": {
                "label": "Auslassdistanz",
                "description": "Entfernung in Zellen, die vor der Auswertung der Sichtlinie übersprungen wird (Standard 0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "hypsometric_analysis": {
            "name": "Hypsometrische Analyse",
            "description": "Erstellt einen HTML-Bericht mit der hypsometrischen Kurve (Fläche-Höhe) für ein oder mehrere DEMs.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Eingabe-DEM-Pfade als durch ';' oder ',' getrennte Zeichenkette oder als Liste."
              },
              "watershed": {
                "label": "Einzugsgebiet",
                "description": "Optionale Einzugsgebietsraster passend zu jedem Eingabe-DEM."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des HTML-Ausgabeberichts."
              }
            }
          },
          "multiscale_topographic_position_class": {
            "name": "Multiskalige topografische Positionsklasse",
            "description": "Klassifiziert jede DEM-Zelle in ein neunklassiges System der relativen topografischen Lage (großräumig/lokal) mithilfe zweier DEVmax-Maßstabsmosaike.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "local_min_scale": {
                "label": "Lokale minimale Skala",
                "description": "Minimaler Halbfensterradius in Zellen für den lokalen Skalenbereich (Standard 5)."
              },
              "local_max_scale": {
                "label": "Lokale maximale Skala",
                "description": "Maximaler Halbfensterradius in Zellen für den lokalen Skalenbereich (Standard 80)."
              },
              "local_step_size": {
                "label": "Lokale Schrittweite",
                "description": "Skaleninkrement in Zellen für den lokalen Skalenbereich (Standard 1). Alias: local_step."
              },
              "broad_min_scale": {
                "label": "Großräumige minimale Skala",
                "description": "Minimaler Halbfensterradius in Zellen für den großräumigen Skalenbereich (Standard 500)."
              },
              "broad_max_scale": {
                "label": "Großräumige maximale Skala",
                "description": "Maximaler Halbfensterradius in Zellen für den großräumigen Skalenbereich (Standard 2000)."
              },
              "broad_step_size": {
                "label": "Großräumige Schrittweite",
                "description": "Skaleninkrement in Zellen für den großräumigen Skalenbereich (Standard 20). Alias: broad_step."
              },
              "local_threshold": {
                "label": "Lokaler Schwellenwert",
                "description": "DEV-Schwellenwert zur Klassifikation des lokalen Skalenmosaiks in die Zustände Mulde, Mittellage und Kuppe (Standard 0.5)."
              },
              "broad_threshold": {
                "label": "Großräumiger Schwellenwert",
                "description": "DEV-Schwellenwert zur Klassifikation des großräumigen Skalenmosaiks in die Zustände Tiefland, Mittelland und Hochland (Standard 0.5)."
              },
              "min_patch_size": {
                "label": "Minimale Patch-Größe",
                "description": "Optionale minimale Patchgröße in Zellen für die Patchfilterung nach der Klassifikation (Standard 0, deaktiviert)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für das kategoriale Raster mit neun Klassen."
              },
              "output_confidence": {
                "label": "Konfidenz ausgeben",
                "description": "Optionaler Ausgabepfad für ein Konfidenzraster im Bereich [0, 1]."
              }
            }
          },
          "pennock_landform_classification": {
            "name": "Pennock-Landformklassifikation",
            "description": "Klassifiziert Landformelemente in sieben Geländeklassen nach Pennock et al. (1987).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "plan_curv_threshold": {
                "label": "Schwellenwert Horizontalkrümmung",
                "description": "Schwellenwert der Plankrümmung in Grad (Standard 0.0)."
              },
              "prof_curv_threshold": {
                "label": "Schwellenwert Vertikalkrümmung",
                "description": "Schwellenwert der Profilkrümmung in Grad (Standard 0.1)."
              },
              "slope_threshold": {
                "label": "Neigungsschwellenwert",
                "description": "Neigungsschwellenwert in Grad (Standard 3.0)."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Optionaler vertikaler Skalierungsfaktor (wenn < 0 und das KBS geografisch ist, wird er aus der mittleren Breite geschätzt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "percent_elev_range": {
            "name": "Prozentsatz der Höhenspanne",
            "description": "Berechnet die lokale topografische Lage als Prozentsatz des Höhenbereichs der Nachbarschaft.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Ungerade Filterbreite in Zellen (Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Ungerade Filterhöhe in Zellen (Standard filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "relative_topographic_position": {
            "name": "Relative topografische Position",
            "description": "Berechnet die RTP anhand der minimalen, mittleren und maximalen Höhenwerte der Nachbarschaft.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "filter_size_x": {
                "label": "Filtergröße X",
                "description": "Ungerade Filterbreite in Zellen (Standard 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Filtergröße Y",
                "description": "Ungerade Filterhöhe in Zellen (Standard filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad."
              }
            }
          },
          "max_anisotropy_dev": {
            "name": "Maximale Anisotropieabweichung",
            "description": "Berechnet die maximale Anisotropie der Höhenabweichung über einen Bereich von Nachbarschaftsmaßstäben. Verfasst von Dan Newman.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "min_scale": {
                "label": "Minimale Skala",
                "description": "Minimaler Halbfensterradius in Zellen (Standard 3)."
              },
              "max_scale": {
                "label": "Maximale Skala",
                "description": "Maximaler Halbfensterradius in Zellen (Standard 100)."
              },
              "step_size": {
                "label": "Schrittweite",
                "description": "Skaleninkrement in Zellen (Standard 2). Alias: step."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für das Raster des Anisotropiebetrags."
              },
              "output_scale": {
                "label": "Skala ausgeben",
                "description": "Optionaler Ausgabepfad für das Raster mit der Skala der maximalen Antwort."
              }
            }
          },
          "max_anisotropy_dev_signature": {
            "name": "Signatur der maximalen Anisotropieabweichung",
            "description": "Berechnet mehrskalige Anisotropiesignaturen für Eingabepunktstandorte und schreibt einen HTML-Bericht. Verfasst von Dan Newman.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters."
              },
              "points": {
                "label": "Punkte",
                "description": "Pfad der Eingabe-Vektordatei mit Punkten oder Multipunkten."
              },
              "min_scale": {
                "label": "Minimale Skala",
                "description": "Minimaler Halbfensterradius in Zellen (Standard 1)."
              },
              "max_scale": {
                "label": "Maximale Skala",
                "description": "Maximaler Halbfensterradius in Zellen (Standard 100)."
              },
              "step_size": {
                "label": "Schrittweite",
                "description": "Skaleninkrement in Zellen (Standard 1). Alias: step."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für den HTML-Signaturbericht."
              }
            }
          },
          "max_difference_from_mean": {
            "name": "Maximale Differenz zum Mittelwert",
            "description": "Berechnet die maximale absolute Abweichung vom Mittelwert über einen Bereich von Nachbarschaftsmaßstäben.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "min_scale": {
                "label": "Minimale Skala",
                "description": "Minimaler Halbfensterradius in Zellen (Standard 1)."
              },
              "max_scale": {
                "label": "Maximale Skala",
                "description": "Maximaler Halbfensterradius in Zellen (Standard 100)."
              },
              "step_size": {
                "label": "Schrittweite",
                "description": "Skaleninkrement in Zellen (Standard 1). Alias: step."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für das Raster des maximalen Differenzbetrags."
              },
              "output_scale": {
                "label": "Skala ausgeben",
                "description": "Optionaler Ausgabepfad für das Raster mit der Skala der maximalen Antwort."
              }
            }
          },
          "max_elevation_deviation": {
            "name": "Maximale Höhenabweichung",
            "description": "Berechnet die maximale standardisierte Höhenabweichung (DEVmax) über einen Bereich von Nachbarschaftsmaßstäben.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "min_scale": {
                "label": "Minimale Skala",
                "description": "Minimaler Halbfensterradius in Zellen (Standard 1)."
              },
              "max_scale": {
                "label": "Maximale Skala",
                "description": "Maximaler Halbfensterradius in Zellen (Standard 100)."
              },
              "step_size": {
                "label": "Schrittweite",
                "description": "Skaleninkrement in Zellen (Standard 1). Alias: step."
              },
              "min_vertical": {
                "label": "Minimale Vertikale",
                "description": "Minimaler Schwellenwert der lokalen Standardabweichung; Antworten mit schwächerem Relief werden unterdrückt (Standard 0.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für das DEVmax-Betragsraster."
              },
              "output_scale": {
                "label": "Skala ausgeben",
                "description": "Optionaler Ausgabepfad für das Raster mit der Skala der maximalen Antwort."
              }
            }
          },
          "max_elev_dev_signature": {
            "name": "Signatur der maximalen Höhenabweichung",
            "description": "Berechnet mehrskalige Signaturen der Höhenabweichung für Eingabepunktstandorte und schreibt einen HTML-Bericht.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters."
              },
              "points": {
                "label": "Punkte",
                "description": "Pfad der Eingabe-Vektordatei mit Punkten oder Multipunkten."
              },
              "min_scale": {
                "label": "Minimale Skala",
                "description": "Minimaler Halbfensterradius in Zellen (Standard 1)."
              },
              "max_scale": {
                "label": "Maximale Skala",
                "description": "Maximaler Halbfensterradius in Zellen (Standard 100)."
              },
              "step_size": {
                "label": "Schrittweite",
                "description": "Skaleninkrement in Zellen (Standard 10). Alias: step."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für den HTML-Signaturbericht."
              }
            }
          },
          "multiscale_curvatures": {
            "name": "Multiskalige Krümmungen",
            "description": "Berechnet mehrskalige Krümmungen und krümmungsbasierte Indizes aus einem DEM.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt. Alias: dem."
              },
              "curv_type": {
                "label": "Krümmungstyp",
                "description": "Krümmungstyp."
              },
              "out_mag": {
                "label": "Ausgabe Betrag",
                "description": "Optionaler Ausgabepfad für den Betrag. Alias: output."
              },
              "out_scale": {
                "label": "Ausgabe Skala",
                "description": "Optionaler Ausgabepfad für die Skala, wenn num_steps > 1."
              },
              "min_scale": {
                "label": "Minimale Skala",
                "description": "Minimaler Radius der Suchnachbarschaft in Rasterzellen."
              },
              "step": {
                "label": "Schritt",
                "description": "Schrittweite."
              },
              "num_steps": {
                "label": "Anzahl Schritte",
                "description": "Anzahl der abgetasteten Skalenschritte."
              },
              "step_nonlinearity": {
                "label": "Schritt-Nichtlinearität",
                "description": "Nichtlinearitätsfaktor der Schritte."
              },
              "log_transform": {
                "label": "Log-Transformation",
                "description": "Vorzeichenbehaftete Log-Transformation anwenden. Alias: log."
              },
              "standardize": {
                "label": "Standardisieren",
                "description": "Jede Skala auf Z-Scores standardisieren."
              }
            }
          },
          "multiscale_elevated_index": {
            "name": "Multiskaliger Erhebungsindex",
            "description": "Berechnet Raster des mehrskaligen Erhöhungsindex (MsEI) und des Schlüsselmaßstabs anhand von Residuen im gaußschen Skalenraum.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "min_scale": {
                "label": "Minimale Skala",
                "description": "Minimaler Suchradius in Rasterzellen (Standard 2)."
              },
              "num_steps": {
                "label": "Anzahl Schritte",
                "description": "Anzahl der auszuwertenden Skalen (Standard 100)."
              },
              "step_nonlinearity": {
                "label": "Schritt-Nichtlinearität",
                "description": "Nichtlinearität der Skalenschritte in [1,4] (Standard 1.1)."
              },
              "step_size": {
                "label": "Schrittweite",
                "description": "Basis-Schrittweite in Zellen (Standard 1). Alias: step."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für das Indexraster."
              },
              "output_scale": {
                "label": "Skala ausgeben",
                "description": "Optionaler Ausgabepfad für das Schlüsselskalenraster."
              }
            }
          },
          "multiscale_elevation_percentile": {
            "name": "Multiskaliges Höhenperzentil",
            "description": "Berechnet das extremste lokale Höhenperzentil über einen Bereich von Nachbarschaftsmaßstäben.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "min_scale": {
                "label": "Minimale Skala",
                "description": "Minimaler Halbfensterradius in Zellen (Standard 4)."
              },
              "num_steps": {
                "label": "Anzahl Schritte",
                "description": "Anzahl der auszuwertenden Skalen (Standard 10)."
              },
              "step_size": {
                "label": "Schrittweite",
                "description": "Skaleninkrement in Zellen (Standard 1). Alias: step."
              },
              "step_nonlinearity": {
                "label": "Schritt-Nichtlinearität",
                "description": "Nichtlinearer Skalierungsexponent; >1.0 konzentriert die Skalen auf feinere Auflösungen (Standard 1.0)."
              },
              "sig_digits": {
                "label": "Signifikante Stellen",
                "description": "Signifikante Dezimalstellen bei der Perzentil-Klassenbildung (Standard 3)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für das Raster des Perzentilbetrags."
              },
              "output_scale": {
                "label": "Skala ausgeben",
                "description": "Optionaler Ausgabepfad für das Raster mit der Skala der extremsten Perzentilantwort."
              }
            }
          },
          "multiscale_low_lying_index": {
            "name": "Multiskaliger Tieflagenindex",
            "description": "Berechnet Raster des mehrskaligen Tieflagenindex (MsLLI) und des Schlüsselmaßstabs anhand von Residuen im gaußschen Skalenraum.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "min_scale": {
                "label": "Minimale Skala",
                "description": "Minimaler Suchradius in Rasterzellen (Standard 2)."
              },
              "num_steps": {
                "label": "Anzahl Schritte",
                "description": "Anzahl der auszuwertenden Skalen (Standard 100)."
              },
              "step_nonlinearity": {
                "label": "Schritt-Nichtlinearität",
                "description": "Nichtlinearität der Skalenschritte in [1,4] (Standard 1.1)."
              },
              "step_size": {
                "label": "Schrittweite",
                "description": "Basis-Schrittweite in Zellen (Standard 1). Alias: step."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für das Indexraster."
              },
              "output_scale": {
                "label": "Skala ausgeben",
                "description": "Optionaler Ausgabepfad für das Schlüsselskalenraster."
              }
            }
          },
          "multiscale_roughness": {
            "name": "Multiskalige Rauheit",
            "description": "Berechnet die Oberflächenrauheit über einen Bereich von Nachbarschaftsmaßstäben.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "min_scale": {
                "label": "Minimale Skala",
                "description": "Minimaler Halbfensterradius in Zellen (Standard 1)."
              },
              "max_scale": {
                "label": "Maximale Skala",
                "description": "Maximaler Halbfensterradius in Zellen (Standard 100)."
              },
              "step_size": {
                "label": "Schrittweite",
                "description": "Skaleninkrement in Zellen (Standard 1). Alias: step."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Z-Umrechnungsfaktor, wenn vertikale und horizontale Einheiten abweichen (Standard 1.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für das Raster des Rauheitsbetrags."
              },
              "output_scale": {
                "label": "Skala ausgeben",
                "description": "Optionaler Ausgabepfad für das Raster mit der Skala der maximalen Antwort."
              }
            }
          },
          "multiscale_roughness_signature": {
            "name": "Signatur der multiskaligen Rauheit",
            "description": "Berechnet mehrskalige Rauheitssignaturen für Eingabepunktstandorte und schreibt einen HTML-Bericht.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters."
              },
              "points": {
                "label": "Punkte",
                "description": "Pfad der Eingabe-Vektordatei mit Punkten oder Multipunkten."
              },
              "min_scale": {
                "label": "Minimale Skala",
                "description": "Minimaler Halbfensterradius in Zellen (Standard 1)."
              },
              "max_scale": {
                "label": "Maximale Skala",
                "description": "Maximaler Halbfensterradius in Zellen (Standard 100)."
              },
              "step_size": {
                "label": "Schrittweite",
                "description": "Skaleninkrement in Zellen (Standard 1). Alias: step."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Z-Umrechnungsfaktor, wenn vertikale und horizontale Einheiten abweichen (Standard 1.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für den HTML-Signaturbericht."
              }
            }
          },
          "multiscale_std_dev_normals": {
            "name": "Multiskalige Standardabweichung der Normalen",
            "description": "Berechnet die maximale sphärische Standardabweichung der Oberflächennormalen über einen nichtlinear abgetasteten Bereich von Maßstäben.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "min_scale": {
                "label": "Minimale Skala",
                "description": "Minimaler Halbfensterradius in Zellen (Standard 4)."
              },
              "step": {
                "label": "Schritt",
                "description": "Basis-Schrittweite in Zellen für den nichtlinearen Skalenplan (Standard 1)."
              },
              "num_steps": {
                "label": "Anzahl Schritte",
                "description": "Anzahl der abgetasteten Skalen (Standard 10)."
              },
              "step_nonlinearity": {
                "label": "Schritt-Nichtlinearität",
                "description": "Nichtlinearitätsexponent für den Skalenplan (Standard 1.0)."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Z-Umrechnungsfaktor, wenn vertikale und horizontale Einheiten abweichen (Standard 1.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für das Raster des Betrags der sphärischen Standardabweichung."
              },
              "output_scale": {
                "label": "Skala ausgeben",
                "description": "Optionaler Ausgabepfad für das Raster mit der Skala der maximalen Antwort."
              }
            }
          },
          "multiscale_std_dev_normals_signature": {
            "name": "Signatur der multiskaligen Standardabweichung der Normalen",
            "description": "Berechnet Maßstabssignaturen der sphärischen Standardabweichung für Eingabepunktstandorte und schreibt einen HTML-Bericht.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters."
              },
              "points": {
                "label": "Punkte",
                "description": "Pfad der Eingabe-Vektordatei mit Punkten oder Multipunkten."
              },
              "min_scale": {
                "label": "Minimale Skala",
                "description": "Minimaler Halbfensterradius in Zellen (Standard 4)."
              },
              "step": {
                "label": "Schritt",
                "description": "Basis-Schrittweite in Zellen für den nichtlinearen Skalenplan (Standard 1)."
              },
              "num_steps": {
                "label": "Anzahl Schritte",
                "description": "Anzahl der abgetasteten Skalen (Standard 10)."
              },
              "step_nonlinearity": {
                "label": "Schritt-Nichtlinearität",
                "description": "Nichtlinearitätsexponent für den Skalenplan (Standard 1.0)."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Z-Umrechnungsfaktor, wenn vertikale und horizontale Einheiten abweichen (Standard 1.0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für den HTML-Signaturbericht."
              }
            }
          },
          "multiscale_topographic_position_image": {
            "name": "Bild der multiskaligen topografischen Position",
            "description": "Erstellt ein gepacktes RGB-Bild der mehrskaligen topografischen Lage aus lokalen, mittleren und großräumigen DEVmax-Rastern.",
            "params": {
              "local": {
                "label": "Lokal",
                "description": "Pfad des Eingabe-DEVmax-Rasters der lokalen Skala."
              },
              "meso": {
                "label": "Meso",
                "description": "Pfad des Eingabe-DEVmax-Rasters der Mesoskala."
              },
              "broad": {
                "label": "Großräumig",
                "description": "Pfad des Eingabe-DEVmax-Rasters der großräumigen Skala."
              },
              "hillshade": {
                "label": "Schummerung",
                "description": "Optionaler Pfad des Schummerungsrasters zur Modulation der Beleuchtung."
              },
              "lightness": {
                "label": "Helligkeit",
                "description": "Skalierungsfaktor der Bildhelligkeit (Standard 1.2)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für das gepackte RGB-Raster."
              }
            }
          },
          "topographic_position_animation": {
            "name": "Animation der topografischen Position",
            "description": "Erstellt einen interaktiven HTML-Viewer und ein animiertes GIF von DEV oder DEVmax über nichtlinear abgetastete Maßstäbe.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad des Eingabe-DEM-Rasters oder typisiertes Rasterobjekt."
              },
              "delay": {
                "label": "Verzögerung",
                "description": "GIF-Verzögerung je Bild in Millisekunden."
              },
              "image_height": {
                "label": "Bildhöhe",
                "description": "Angezeigte Bildhöhe in Pixeln."
              },
              "label": {
                "label": "Beschriftung",
                "description": "Optionale im Viewer angezeigte Beschriftung."
              },
              "min_scale": {
                "label": "Minimale Skala",
                "description": "Minimaler Halbfensterradius in Zellen (Standard 1)."
              },
              "num_steps": {
                "label": "Anzahl Schritte",
                "description": "Anzahl der Animationsschritte (Standard 10)."
              },
              "palette": {
                "label": "Palette",
                "description": "Palettenname zur Einfärbung der DEV-Werte."
              },
              "step_nonlinearity": {
                "label": "Schritt-Nichtlinearität",
                "description": "Nichtlinearer Skalenexponent in [1, 4], der den Abstand von grob nach fein steuert."
              },
              "use_dev_max": {
                "label": "Maximale Abweichung verwenden",
                "description": "Wenn wahr, akkumulieren die Bilder die bisher stärkste absolute DEV-Antwort."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der HTML-Datei."
              }
            }
          },
          "topo_render": {
            "name": "Topografische Darstellung",
            "description": "Erstellt eine pseudo-3D-Geländedarstellung mit Palettentönung, Schummerung, Schatten und Abschwächung.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Pfad des Eingabe-DEM-Rasters."
              },
              "palette": {
                "label": "Palette",
                "description": "Palettenname (soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "reverse_palette": {
                "label": "Palette umkehren",
                "description": "Palettenreihenfolge umkehren."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut der Lichtquelle in Grad [0, 360]."
              },
              "altitude": {
                "label": "Sonnenhöhe",
                "description": "Höhe der Lichtquelle in Grad [0, 90]."
              },
              "clipping_polygon": {
                "label": "Zuschneidepolygon",
                "description": "Optionaler Polygon-Vektorpfad; nur DEM-Zellen innerhalb der Polygone werden gerendert."
              },
              "background_hgt_offset": {
                "label": "Hintergrundhöhenversatz",
                "description": "Vertikaler Versatz von der minimalen DEM-Höhe zur Hintergrundebene."
              },
              "background_clr": {
                "label": "Hintergrundfarbe",
                "description": "RGBA-Hintergrundfarbe als Array [r,g,b,a]."
              },
              "attenuation_parameter": {
                "label": "Dämpfungsparameter",
                "description": "Exponent der Distanzabschwächung (>= 0)."
              },
              "ambient_light": {
                "label": "Umgebungslicht",
                "description": "Umgebungslichtmenge in [0, 1]."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Multiplikator der vertikalen Überhöhung."
              },
              "max_dist": {
                "label": "Maximale Distanz",
                "description": "Maximale Schattensuchdistanz in Karteneinheiten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des Ausgaberasters."
              }
            }
          },
          "add_surface_information": {
            "name": "Oberflächeninformationen hinzufügen",
            "description": "Fügt je Objekt Oberflächenstatistiken aus einem Höhenraster – Z, 3D-Oberflächenlänge, 3D-Oberfläche, Min/Max/Mittelwert von Z sowie Min/Max/Durchschnitt der Neigung – als Attributfelder an, ohne die Eingabegeometrie zu verändern, wie ArcGIS Add Surface Information.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (Punkte, Linien oder Polygone) mit demselben KBS wie die Oberfläche."
              },
              "surface": {
                "label": "Oberfläche",
                "description": "Abzutastendes Höhen-/Oberflächenraster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              },
              "properties": {
                "label": "Eigenschaften",
                "description": "Kommagetrennte Liste der anzuhängenden Oberflächeneigenschaftsgruppen: Z, SURFACE_LENGTH, SURFACE_AREA, MIN_MAX_MEAN_Z, MIN_MAX_AVG_SLOPE. Standard: alle, die auf die Geometrie des Layers anwendbar sind."
              },
              "sample_distance": {
                "label": "Abtastdistanz",
                "description": "Verdichtungsintervall in KBS-Einheiten für die Abtastung von Linien/Umrissen; lange Segmente werden geteilt, damit sie der Oberfläche folgen. Standard: die Zellengröße des Rasters."
              },
              "method": {
                "label": "Methode",
                "description": "Oberflächenabtastung an den Stützpunkten: 'bilinear' (Standard) oder 'nearest'."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band der Oberfläche für die Abtastung (Standard 1)."
              }
            }
          },
          "add_z_information": {
            "name": "Z-Informationen hinzufügen",
            "description": "Fügt 3D-Objekten aus Z abgeleitete Geometriestatistiken an – Punkt-/Min-/Max-/Mittelwert-Z, 3D-Länge, Mesh-Oberfläche und Volumen, Neigungsstatistiken und Stützpunktanzahlen (ArcGIS Add Z Information). vector_summary_statistics und attribute_histogram fassen Attribute statt Geometrie zusammen, und polygon_volume / surface_volume messen ein Raster gegen eine Referenzebene, sodass derzeit nichts ein 3D-Vektorobjekt aus seinem eigenen Z annotiert.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "3D-Punkt-, Linien-, Polygon- oder Multipatch-Objekte. Beachten Sie, dass ein Z von null nicht von einem fehlenden Z unterscheidbar ist; 'features_with_z' ist daher ein Hinweis und keine Garantie."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Eingabeobjekte mit den angeforderten angehängten Feldern. Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              },
              "properties": {
                "label": "Eigenschaften",
                "description": "Kommagetrennte Teilmenge aus spot_z, min_z, max_z, mean_z, length_3d, surface_area, volume, min_slope, max_slope, mean_slope, point_count, vertex_count. Standard: alle (für eine Geometrie nicht anwendbare Felder bleiben null)."
              },
              "noise_filtering": {
                "label": "Rauschfilterung",
                "description": "Prozentsatz (0-50), der vor min_z / max_z an jedem Ende der Z-Verteilung abgeschnitten wird, damit ein einzelner Ausreißer-Stützpunkt nicht die gemeldeten Extremwerte bestimmt. Standard 0."
              }
            }
          },
          "adjust_3d_z": {
            "name": "Z in 3D anpassen",
            "description": "Wendet eine Z-Einheitenumrechnung, einen vertikalen Versatz und/oder einen multiplikativen Faktor auf die Z-Koordinaten von 3D-Objekten an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (die Objekte sollten Z-Koordinaten tragen)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad. Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              },
              "factor": {
                "label": "Faktor",
                "description": "Multiplikativer Faktor, der auf Z angewendet wird (Standard 1.0). Nützlich für vertikale Überhöhung oder eine Datumsskalierung."
              },
              "offset": {
                "label": "Versatz",
                "description": "Additiver vertikaler Versatz, der nach dem Faktor angewendet wird, in Zieleinheiten (Standard 0.0)."
              },
              "from_unit": {
                "label": "Von Einheit",
                "description": "Voreinstellung der Quell-Z-Einheit (meters, feet, us_feet, centimeters, millimeters, kilometers, miles, yards, inches). Erfordert to_unit."
              },
              "to_unit": {
                "label": "Zu Einheit",
                "description": "Voreinstellung der Ziel-Z-Einheit. Erfordert from_unit. Z wird mit (Meter-pro-from_unit / Meter-pro-to_unit) skaliert."
              }
            }
          },
          "adjust_stream_to_raster": {
            "name": "Gewässer an Raster anpassen",
            "description": "Verschiebt die Stützpunkte von Gewässer-Polylinien auf den durch ein DEM implizierten Fließweg, damit Vektorhydrographie und Höhenoberfläche übereinstimmen, indem Knoten auf Zellen mit hoher Akkumulation gefangen werden und die D8-Fließrichtungskette dazwischen verfolgt wird. Die Umkehrung des Stream Burning. Wie ArcGIS Adjust Stream To Raster.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Anzupassende Gewässer-Polylinienobjekte."
              },
              "dem": {
                "label": "DEM",
                "description": "Oberflächenraster, das den tatsächlichen Fließweg definiert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe des angepassten Gewässerverlaufs. Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              },
              "snap_distance": {
                "label": "Fangdistanz",
                "description": "Suchradius in Karteneinheiten zum Fangen der Knoten an eine Zelle mit hoher Akkumulation (Standard: 5 Zellen)."
              },
              "channel_threshold": {
                "label": "Gerinne-Schwellenwert",
                "description": "Abflussakkumulationswert (in Zellen), ab dem eine Zelle beim Fangen als Gerinne gilt (Standard: 1 % der maximalen Akkumulation des DEM)."
              },
              "remove_disconnected": {
                "label": "Unverbundene entfernen",
                "description": "Linien verwerfen, die überhaupt nicht geroutet werden können (Standard wahr). Wenn falsch, werden sie unverändert durchgereicht und markiert."
              },
              "output_stream_raster": {
                "label": "Gewässerraster ausgeben",
                "description": "Optionales Raster zur Kennzeichnung der angepassten Gewässerzellen."
              },
              "output_flow_direction": {
                "label": "Fließrichtung ausgeben",
                "description": "Optionales aus dem DEM abgeleitetes D8-Fließrichtungsraster."
              },
              "output_split_points": {
                "label": "Teilungspunkte ausgeben",
                "description": "Optionale Punkte, an denen die Fließrichtungsverfolgung fehlschlug und ein Least-Cost-Fallback verwendet wurde."
              }
            }
          },
          "aggregate_multidimensional_raster": {
            "name": "Multidimensionales Raster aggregieren",
            "description": "Gruppiert die Schichten eines Rasterwürfels entlang seiner Dimension in Klassen und reduziert jede Klasse auf ein Ausgabeband – tägliche Szenen zu Monatskompositen, ein Jahrzehnt zu Jahresmitteln (ArcGIS Aggregate Multidimensional Raster). cell_statistics aus Runde 17 reduziert einen Stapel nur auf einen einzelnen Layer und kennt keine Dimension, während multidimensional_anomaly aus Runde 16 die umgekehrte Operation ausführt und die Anzahl der Schichten beibehält.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Ein Multiband-Raster (jedes Band ist eine Schicht) oder eine kommagetrennte Liste koregistrierter Raster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Multiband-Ausgaberaster, ein Band je Klasse. Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              },
              "dimension": {
                "label": "Dimension",
                "description": "Name der Dimension, nur im Bericht verwendet (Standard 'slice')."
              },
              "dimension_values": {
                "label": "Dimensionswerte",
                "description": "Kommagetrennte Koordinate jeder Schicht, streng aufsteigend. Standard ist der 1-basierte Schichtindex."
              },
              "aggregation_definition": {
                "label": "Aggregationsdefinition",
                "description": "'all' (Standard), 'interval_value', 'interval_count' oder 'interval_ranges'."
              },
              "interval_value": {
                "label": "Intervallwert",
                "description": "Klassenbreite in Dimensionseinheiten für 'interval_value'."
              },
              "interval_count": {
                "label": "Intervallanzahl",
                "description": "Anzahl gleich breiter Klassen für 'interval_count'."
              },
              "interval_ranges": {
                "label": "Intervallbereiche",
                "description": "Explizite Klassen als 'start:end,start:end' für 'interval_ranges'."
              },
              "aggregation_method": {
                "label": "Aggregationsmethode",
                "description": "'mean' (Standard), 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'range', 'std', 'sum' oder 'variety'."
              },
              "percentile_value": {
                "label": "Perzentilwert",
                "description": "Perzentil in [0, 100] für die Methode 'percentile' (Standard 50)."
              },
              "ignore_nodata": {
                "label": "NoData ignorieren",
                "description": "NoData-Schichten je Zelle überspringen (Standard wahr). Wenn falsch, macht eine einzige NoData-Schicht die gesamte Klasse an dieser Zelle zu NoData."
              }
            }
          },
          "aggregate_points": {
            "name": "Punkte aggregieren",
            "description": "Gruppiert Punkte, die innerhalb einer Aggregationsdistanz zueinander liegen, zu Cluster-Polygonen (konvexe Hülle oder gepufferte Vereinigung), die jeweils eine Punktanzahl und optionale Feldsummen je Cluster tragen, wie ArcGIS Aggregate Points.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer (Point oder MultiPoint)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonvektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              },
              "aggregation_distance": {
                "label": "Aggregationsdistanz",
                "description": "Maximale Entfernung zwischen Punkten, damit sie demselben Cluster zugeordnet werden (Karteneinheiten)."
              },
              "min_points": {
                "label": "Minimale Punkte",
                "description": "Mindestanzahl an Punkten, die ein Cluster für die Ausgabe benötigt (Standard 2; 1 setzen, um Einzelpunkte zu behalten)."
              },
              "method": {
                "label": "Methode",
                "description": "'convex_hull' (Standard) oder 'buffer' (gepufferte Vereinigung, wieder zurückerodiert)."
              },
              "sum_fields": {
                "label": "Summenfelder",
                "description": "Kommagetrennte numerische Felder, die je Cluster summiert werden (Ausgabespalten 'sum_<field>')."
              }
            }
          },
          "aggregate_polygons": {
            "name": "Polygone aggregieren",
            "description": "Fasst Polygone innerhalb einer Aggregationsdistanz zu größeren Polygonen zusammen (morphologisches Schließen), mit Filtern für Mindestfläche und minimale Lochgröße sowie einem optionalen Barrieren-Layer, den die Aggregation nicht überschreiten darf.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer, Format wird automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "aggregation_distance": {
                "label": "Aggregationsdistanz",
                "description": "Polygone innerhalb dieser Entfernung (KBS-Einheiten) voneinander werden aggregiert. Setzt den Radius der morphologischen Schließung auf die Hälfte dieses Werts."
              },
              "min_area": {
                "label": "Mindestfläche",
                "description": "Aggregierte Polygone verwerfen, deren Fläche (KBS-Einheiten im Quadrat) unter diesem Wert liegt. Standard: alle behalten."
              },
              "min_hole_size": {
                "label": "Minimale Lochgröße",
                "description": "Innere Löcher füllen, deren Fläche (KBS-Einheiten im Quadrat) unter diesem Wert liegt. Standard: alle Löcher behalten."
              },
              "barrier": {
                "label": "Barriere",
                "description": "Optionaler Barrieren-Vektorlayer (Linien oder Polygone), den die Aggregation nicht überschreiten darf; Brücken über eine Barriere werden getrennt. Vorhandene Eingabepolygone werden nie geteilt."
              }
            }
          },
          "align_features": {
            "name": "Objekte ausrichten",
            "description": "Passt Linien-/Polygonkanten einer Quelle innerhalb einer Suchdistanz an einen nahegelegenen vertrauenswürdigen Ziel-Layer an, wobei ganze Kantenabschnitte (nicht nur Endpunkte) mit weichem Übergang und deckungsgleichen gemeinsamen Grenzen herangezogen werden, wie ArcGIS Align Features.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Auszurichtender Quell-Vektorlayer (Linien oder Polygone)."
              },
              "target": {
                "label": "Ziel",
                "description": "Vertrauenswürdiger Ziel-Layer (Linien oder Polygongrenzen), zu dem die Stützpunkte der Quelle hingezogen werden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "search_distance": {
                "label": "Suchdistanz",
                "description": "Maximale Distanz (KBS-Einheiten), um die ein Quellstützpunkt zum Ziel gezogen werden darf. Erforderlich."
              },
              "match_field": {
                "label": "Zuordnungsfeld",
                "description": "Optionales Attributfeld der Quelle; nur Zielkanten, deren Wert in target_match_field übereinstimmt, kommen als Kandidaten für die Stützpunkte dieses Objekts infrage."
              },
              "target_match_field": {
                "label": "Ziel-Zuordnungsfeld",
                "description": "Attributfeld des Ziels, das mit match_field verglichen wird. Standardmäßig der Name von match_field, wenn nicht angegeben; erfordert match_field."
              }
            }
          },
          "analyze_changes_ccdc": {
            "name": "Änderungen mit CCDC analysieren",
            "description": "Kontinuierliche CCDC-Veränderungserkennung auf einer dichten Bildzeitreihe (wie ArcGIS Analyze Changes Using CCDC): harmonische (saisonale) OLS-Regression je Pixel, dann ein gleitender Residuentest (k×RMSE, minimale Anzahl aufeinanderfolgender Anomalien), der Brüche erklärt und Segmente neu anpasst. Gibt Raster für Bruchanzahl, Datum des ersten Bruchs sowie RMSE/Steigung/Amplitude des Anfangssegments aus – die saisonale Veränderungshistorie mit mehreren Brüchen, die das jährliche landtrendr und die Zwei-Zeitpunkt-change_vector_analysis nicht liefern können.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Ein einzelnes Multiband-Raster (jedes Band ist ein Zeitschnitt) ODER eine kommagetrennte Liste koregistrierter Einband-Rasterpfade in zeitlicher Reihenfolge."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster der Bruchanzahl (erkannte Brüche pro Pixel). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "dates": {
                "label": "Daten",
                "description": "Kommagetrennte numerische Datumsangaben (Dezimaljahre oder Tagesnummern), die den Zeitschnitten entsprechen. Standard 0,1,2,..."
              },
              "period": {
                "label": "Periode",
                "description": "Länge eines Saisonzyklus in den Einheiten von 'dates' (Standard 1.0 für Dezimaljahre; 365 für Tagesnummern verwenden)."
              },
              "harmonic_order": {
                "label": "Harmonische Ordnung",
                "description": "Anzahl der Sinus/Kosinus-Harmonischenpaare bei der Jahresfrequenz (Standard 1 = nur jährlich; 2 fügt den halbjährlichen Term hinzu)."
              },
              "change_threshold": {
                "label": "Änderungsschwellenwert",
                "description": "Anomalie-Schwellenwert als Vielfaches k des Segment-RMSE (Standard 3.0). Ein Residuum > k×RMSE markiert eine Beobachtung."
              },
              "min_consecutive": {
                "label": "Minimale aufeinanderfolgende",
                "description": "Anzahl aufeinanderfolgender markierter Beobachtungen, die zum Erklären eines Bruchs erforderlich sind (Standard 3)."
              },
              "min_observations": {
                "label": "Minimale Beobachtungen",
                "description": "Minimale Anzahl gültiger Beobachtungen zur Initialisierung des harmonischen Modells eines Segments (Standard 12). Pixel mit weniger gültigen Beobachtungen werden zu NoData."
              },
              "band": {
                "label": "Band",
                "description": "Für eine kommagetrennte Listeneingabe: 1-basiertes Band, das aus jedem Raster gelesen wird (Standard 1). Wird bei einer einzelnen Multiband-Eingabe ignoriert."
              },
              "break_date_output": {
                "label": "Bruchdatum ausgeben",
                "description": "Optionales Raster mit dem Datum des ersten erkannten Bruchs pro Pixel (NoData, wo kein Bruch vorliegt)."
              },
              "rmse_output": {
                "label": "RMSE ausgeben",
                "description": "Optionales Raster des RMSE des harmonischen Modells des Anfangssegments."
              },
              "slope_output": {
                "label": "Neigung ausgeben",
                "description": "Optionales Raster des linearen Trendkoeffizienten (Steigung) des Anfangssegments."
              },
              "amplitude_output": {
                "label": "Amplitude ausgeben",
                "description": "Optionales Raster der Amplitude der ersten Harmonischen des Anfangssegments sqrt(a²+b²)."
              }
            }
          },
          "apply_radiometric_calibration": {
            "name": "Radiometrische Kalibrierung anwenden",
            "description": "Wandelt rohe SAR-Digitalzahlen in kalibrierte Rückstreuung um – Beta Nought, Sigma Nought oder Gamma Nought –, damit Aufnahmen physikalisch vergleichbar werden und veröffentlichte Schwellenwerte anwendbar sind (ArcGIS Apply Radiometric Calibration). Nichts in einer der beiden Registries leistet dies: rescale_value_range ist eine lineare Streckung ohne radiometrische Bedeutung, und multilook, sar_coherence, die Lee-Speckle-Filter und compute_sar_indices verarbeiten alle die Werte, die sie erhalten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "SAR-Raster in Digitalzahlen, Amplitude, Intensität oder dB (siehe 'input_units')."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster der kalibrierten Rückstreuung. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "calibration_type": {
                "label": "Kalibrierungstyp",
                "description": "'sigma0' (Standard), 'beta0' oder 'gamma0'. sigma0 und gamma0 erfordern 'incidence_angle'."
              },
              "calibration_constant": {
                "label": "Kalibrierungskonstante",
                "description": "Sensor-Kalibrierungskonstante A (Standard 1.0). Wird ignoriert, wenn 'calibration_lut' angegeben ist."
              },
              "calibration_lut": {
                "label": "Kalibrierungs-LUT",
                "description": "Optionales koregistriertes Raster mit Kalibrierungskonstanten A pro Zelle, das 'calibration_constant' überschreibt."
              },
              "incidence_angle": {
                "label": "Einfallswinkel",
                "description": "Lokaler Einfallswinkel in Grad: eine Konstante oder ein koregistrierter Rasterpfad. Erforderlich für 'sigma0' und 'gamma0'."
              },
              "input_units": {
                "label": "Eingabeeinheiten",
                "description": "'dn' (Standard), 'amplitude', 'intensity' oder 'db'. dn und amplitude werden zur Leistung quadriert; db wird zuerst delinearisiert."
              },
              "output_units": {
                "label": "Ausgabeeinheiten",
                "description": "'linear' (Standard) oder 'db'."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das kalibriert wird (Standard 1)."
              }
            }
          },
          "apportion_polygon": {
            "name": "Polygon aufteilen",
            "description": "Überträgt numerische Attribute von einem Quell-Polygon-Layer auf einen Ziel-Polygon-Layer, anteilig nach Überlappungsfläche (dasymetrische Reaggregation zwischen Zonensystemen), wie ArcGIS Apportion Polygon.",
            "params": {
              "target": {
                "label": "Ziel",
                "description": "Ziel-Polygonlayer (erhält die aufgeteilten Werte; seine Objekte und Attribute bleiben erhalten)."
              },
              "source": {
                "label": "Quelle",
                "description": "Quell-Polygonlayer mit den zu verteilenden Werten."
              },
              "fields": {
                "label": "Felder",
                "description": "Kommagetrennte(s) numerische(s) Feld(er) der Quelle, die aufgeteilt werden sollen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (eine Kopie des Ziels mit den aufgeteilten Spalten). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "method": {
                "label": "Methode",
                "description": "'area' (Standard; Aufteilung nach Überlappungsfläche) oder 'weight' (Aufteilung nach Überlappungsfläche mal dem Ziel-'weight_field')."
              },
              "weight_field": {
                "label": "Gewichtungsfeld",
                "description": "Numerisches Feld des Ziels, das bei method=weight als zusätzliches Gewicht verwendet wird."
              },
              "suffix": {
                "label": "Suffix",
                "description": "Suffix für die aufgeteilten Ausgabespalten. Standard '_app'."
              }
            }
          },
          "areal_interpolation": {
            "name": "Flächeninterpolation",
            "description": "Sagt aggregierte Werte für Zielpolygone aus Quellpolygonen mit anderer Geographie vorher, indem eine glatte zugrunde liegende Oberfläche angepasst und neu integriert wird, statt nach Fläche zu gewichten (ArcGIS Areal Interpolation Layer To Polygons). apportion_polygon nimmt an, dass die Größe innerhalb jedes Quellpolygons gleichverteilt ist – der klassische Fehler des Modifiable Areal Unit Problem – und liefert keine Standardfehler; die gebündelte Kriging-Suite arbeitet ausschließlich auf Punktbasis und kann keine Polygonbeobachtungen annehmen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Quellpolygone mit dem gemessenen Feld."
              },
              "target": {
                "label": "Ziel",
                "description": "Zielpolygone, für die Werte vorhergesagt werden sollen."
              },
              "field": {
                "label": "Feld",
                "description": "Numerisches Wertefeld der Quellpolygone."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Zielpolygone mit angehängten Feldern PREDICTED, PRED_STD_ERR und den Diagnosewerten. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "field_type": {
                "label": "Feldtyp",
                "description": "'count' (Standard): eine extensive Summe, reskaliert, um die Quellsumme zu erhalten. 'average': ein intensiver Mittelwert, direkt ohne Reskalierung vorhergesagt."
              },
              "discretization": {
                "label": "Diskretisierung",
                "description": "Ungefähre Anzahl innerer Punkte, die die Flächenstütze jedes Polygons repräsentieren (Standard 25). Höher ist genauer und deutlich langsamer."
              },
              "model": {
                "label": "Modell",
                "description": "Variogrammmodell: 'exponential' (Standard), 'spherical' oder 'gaussian'."
              },
              "preserve_total": {
                "label": "Gesamtsumme erhalten",
                "description": "Zählvorhersagen reskalieren, sodass die Zielsumme der Quellsumme entspricht (Standard wahr für 'count', bei 'average' immer aus). Wird nur angewendet, wenn die Ziele die Quellen abdecken — der angewendete Faktor wird als 'mass_scale' ausgegeben, sodass ein Lauf mit Teilabdeckung erkennbar ist."
              }
            }
          },
          "attribute_uncertainty": {
            "name": "Attributunsicherheit",
            "description": "Monte-Carlo-Fehlerfortpflanzung mit Seed über ein unsicheres Attribut (wie ArcGIS Attribute Uncertainty): zieht NORMAL-/UNIFORM-Realisierungen aus einem objektbezogenen Fehlerfeld oder einem Grenzwertpaar und fügt Statistiken für Mittelwert/Standardabweichung/p5/p50/p95/CV an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (oder Tabelle) mit dem unsicheren Attribut."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Numerisches Feld mit der Schätzung (Mittelwert/Zentrum der Verteilung) für jedes Objekt."
              },
              "error_field": {
                "label": "Fehlerfeld",
                "description": "Numerisches Feld mit der symmetrischen Unsicherheit: ein Standardfehler für NORMAL oder eine halbe Breite für UNIFORM. Entweder dieses Feld ODER sowohl lower_field als auch upper_field angeben."
              },
              "lower_field": {
                "label": "Feld untere Grenze",
                "description": "Numerisches Feld mit der Untergrenze des Wertes. Zusammen mit upper_field anstelle von error_field verwenden."
              },
              "upper_field": {
                "label": "Feld obere Grenze",
                "description": "Numerisches Feld mit der Obergrenze des Wertes. Zusammen mit lower_field anstelle von error_field verwenden."
              },
              "distribution": {
                "label": "Verteilung",
                "description": "Fehlerverteilung: NORMAL (Standard) oder UNIFORM."
              },
              "iterations": {
                "label": "Iterationen",
                "description": "Anzahl der Monte-Carlo-Realisierungen pro Objekt (Standard 1000)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed für den deterministischen Zufallszahlengenerator (Standard 1)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorlayer mit den angehängten Statistiken. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              }
            }
          },
          "band_collection_statistics": {
            "name": "Statistik der Bandsammlung",
            "description": "Min/Max/Mittelwert/Standardabweichung je Band plus bandübergreifende Kovarianz- und Korrelationsmatrizen für einen Rasterstapel (wie ArcGIS Band Collection Statistics) – die multivariate Zusammenfassung (Vorstufe für PCA / Klassifikation), die der gebündelten Suite fehlt; zu unterscheiden von cell_statistics je Pixel.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Ein Multiband-Raster (jedes Band ist ein Layer) oder eine kommagetrennte Liste koregistrierter Raster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler CSV-Pfad für den Statistikbericht. Die Matrizen werden immer im Ergebnis zurückgegeben."
              },
              "detail": {
                "label": "Detail",
                "description": "'detailed' (Standard) enthält Kovarianz-/Korrelationsmatrizen; 'brief' gibt nur Statistiken pro Band zurück."
              }
            }
          },
          "bivariate_spatial_association": {
            "name": "Bivariate räumliche Assoziation",
            "description": "Globale und lokale Lee-L-Statistik, die misst, wo zwei kontinuierliche Variablen räumlich kovariieren, mit einem Permutationstest-p-Wert mit Seed und einer Klasse High-High/High-Low/Low-High/Low-Low je Objekt – wie ArcGIS Bivariate Spatial Association. Das Gegenstück von colocation_analysis für kontinuierliche Felder.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer mit zwei numerischen Feldern."
              },
              "x_field": {
                "label": "X-Feld",
                "description": "Erstes numerisches Variablenfeld."
              },
              "y_field": {
                "label": "Y-Feld",
                "description": "Zweites numerisches Variablenfeld."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabelayer mit Feldern für lokales L, p-Wert und Klasse. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "neighbors": {
                "label": "Nachbarn",
                "description": "Anzahl der nächsten Nachbarn für die räumlichen Gewichte (Standard 8)."
              },
              "permutations": {
                "label": "Permutationen",
                "description": "Anzahl der Permutationen für den Signifikanztest (Standard 199; 0 deaktiviert)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed für den Permutations-Zufallszahlengenerator (Standard 1), für reproduzierbare Ergebnisse."
              }
            }
          },
          "block_statistics": {
            "name": "Blockstatistik",
            "description": "Unterteilt ein Raster in nicht überlappende Blöcke, reduziert jeden Block mit einer Statistik und schreibt diesen Wert in der Eingabeauflösung in jede Zelle des Blocks zurück (ArcGIS Block Statistics). Ergänzt die mitgelieferten focal_statistics (überlappendes Fenster), zonal_statistics (nach Zonen-Layer) und cell_statistics (über einen Stapel); anders als das gebündelte aggregate_raster behält es die Zellengröße bei, sodass Eingabe minus Blockmittel eine lokale Residuenoberfläche ergibt, und es ergänzt die kategorialen Statistiken Majorität/Minorität/Median/Vielfalt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              },
              "statistic": {
                "label": "Statistik",
                "description": "Eines von mean (Standard), majority, maximum, median, minimum, minority, range, std, sum, variety."
              },
              "neighborhood": {
                "label": "Nachbarschaft",
                "description": "Blockform: rectangle (Standard), circle, annulus oder wedge."
              },
              "size": {
                "label": "Größe",
                "description": "Blockabmessungen in Zellen: 'width,height' für rectangle (Standard '3,3'), 'radius' für circle/wedge oder 'inner,outer' für annulus."
              },
              "start_angle": {
                "label": "Startwinkel",
                "description": "Startwinkel des Kreissektors in Grad gegen den Uhrzeigersinn ab Osten (Standard 0)."
              },
              "end_angle": {
                "label": "Endwinkel",
                "description": "Endwinkel des Kreissektors in Grad gegen den Uhrzeigersinn ab Osten (Standard 90)."
              },
              "ignore_nodata": {
                "label": "NoData ignorieren",
                "description": "Wenn wahr (Standard), werden Blöcke nur aus gültigen Zellen berechnet; wenn falsch, macht jede NoData-Zelle den gesamten Block zu NoData."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das gelesen wird (Standard 1)."
              }
            }
          },
          "boundary_clean": {
            "name": "Grenzbereinigung",
            "description": "Glättet Zonengrenzen kategorialer Raster und entfernt Speckle durch Majoritätsfilterung oder Grenzbereinigung per Erweitern/Schrumpfen, die übliche Bereinigung vor der Polygonisierung – wie ArcGIS Boundary Clean / Majority Filter.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Kategoriales (ganzzahliges) Eingaberaster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Rasterpfad. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "method": {
                "label": "Methode",
                "description": "'majority' (Speckle-Entfernung durch Nachbarschaftsmehrheit; Standard) oder 'expand_shrink' (Boundary-Clean-Glättung)."
              },
              "neighbors": {
                "label": "Nachbarn",
                "description": "Nachbarschaftskonnektivität: 4 (Rook) oder 8 (Queen; Standard)."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Nur Modus majority: 'majority' (strikte Mehrheit der Nachbarn; Standard) oder 'half' (mindestens die Hälfte)."
              },
              "iterations": {
                "label": "Iterationen",
                "description": "Anzahl der auszuführenden Durchläufe (Standard 1)."
              },
              "sort": {
                "label": "Sortieren",
                "description": "Nur Modus expand_shrink: Zonenpriorität nach Zellenanzahl — 'descending' (größere Zonen gewinnen; Standard), 'ascending' (kleinere Zonen gewinnen) oder 'none'."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das gelesen wird (Standard 1)."
              }
            }
          },
          "buffer_3d": {
            "name": "3D-Puffer",
            "description": "Puffert 3D-Punkte und -Linien zu volumetrischer Geometrie (Kugeln und Kapseln), ausgegeben als triangulierte Oberfläche, wie ArcGIS Buffer 3D.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "3D-Punkt- oder Polylinien-Eingabelayer (fehlendes Z wird als 0 behandelt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "distance": {
                "label": "Distanz",
                "description": "Pufferradius in Karteneinheiten."
              },
              "distance_field": {
                "label": "Distanzfeld",
                "description": "Optionales Radiusfeld pro Objekt, das 'distance' überschreibt."
              },
              "shape": {
                "label": "Form",
                "description": "round (Standard; halbkugelförmige Kappen) oder flat (Zylinder mit flachen Kappen)."
              },
              "quality": {
                "label": "Qualität",
                "description": "Tessellationsauflösung: Segmente entlang des Umfangs (Standard 12, min 4, max 64)."
              }
            }
          },
          "buffer_vector": {
            "name": "Vektorpuffer",
            "description": "Erweitert Geometrien um eine angegebene Distanz und erzeugt Polygonpuffer mit anpassbaren Abschluss-/Verbindungsstilen. Optionales Zusammenführen (Dissolve) vereinigt überlappende Puffer zu zusammenhängenden Polygonen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "distance": {
                "label": "Distanz",
                "description": "Pufferdistanz in Karteneinheiten."
              },
              "quadrant_segments": {
                "label": "Quadrantensegmente",
                "description": "Bogenauflösung in Segmenten pro Quadrant; Standard 8."
              },
              "cap_style": {
                "label": "Endenstil",
                "description": "Linienendenstil: round, flat oder square."
              },
              "join_style": {
                "label": "Verbindungsstil",
                "description": "Eckenverbindungsstil: round, bevel oder mitre."
              },
              "mitre_limit": {
                "label": "Gehrungsgrenze",
                "description": "Gehrungsgrenze bei join_style=mitre; Standard 5.0."
              },
              "dissolve": {
                "label": "Auflösen",
                "description": "Überlappende Puffer zu einem einzigen vereinigten Polygon zusammenführen; Standard falsch."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad."
              }
            }
          },
          "build_balanced_zones": {
            "name": "Ausgewogene Zonen erstellen",
            "description": "Gruppiert benachbarte Polygone in eine Zielanzahl zusammenhängender Zonen, die Objektanzahl, eine Attributsumme oder Attributhomogenität ausgleichen, mittels SKATER-Spannbaum-Partitionierung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonlayer, Format wird automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "zones": {
                "label": "Zonen",
                "description": "Zielanzahl der zu erstellenden Zonen."
              },
              "criterion": {
                "label": "Kriterium",
                "description": "Ausgleichsziel: 'homogeneity' (Standard), 'equal_count' oder 'equal_sum' (des ersten Feldes)."
              },
              "fields": {
                "label": "Felder",
                "description": "Kommagetrennte(s) numerische(s) Analysefeld(er). Erforderlich für 'homogeneity' und 'equal_sum'; bestimmt die Kantengewichte des Spannbaums."
              },
              "contiguity": {
                "label": "Kontiguität",
                "description": "Nachbarschaftsregel: 'rook' (gemeinsame Kante, Standard) oder 'queen' (gemeinsame Kante oder gemeinsamer Stützpunkt)."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Maximale Distanz, bis zu der zwei Grenzsegmente als gemeinsam gelten (rook). Standard 1e-6."
              }
            }
          },
          "build_seamlines": {
            "name": "Nahtlinien erstellen",
            "description": "Berechnet für eine Menge überlappender Raster (und optionaler Footprints), wo jedes Bild geschnitten werden soll, damit das Mosaik entlang einer minimal sichtbaren Naht zusammengefügt wird, und gibt je Bild ein nicht überlappendes Nahtlinien-Polygon über eine Voronoi-, Prioritätsreihenfolge-, radiometrische oder kantenbewusste Zuweisung aus. Wie ArcGIS Build Seamlines.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Komma-/semikolongetrennte Rasterpfade, die mosaikiert werden sollen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Seamline-Polygone (ein Objekt pro Eingaberaster). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "footprints": {
                "label": "Grundrisse",
                "description": "Optionaler Polygonlayer mit der gültigen Ausdehnung jedes Rasters in Eingabereihenfolge. Wird aus den gültigen Daten abgeleitet, wenn nicht angegeben."
              },
              "method": {
                "label": "Methode",
                "description": "'voronoi' (Standard), 'order', 'radiometry' oder 'edge_detection'."
              },
              "sort_ascending": {
                "label": "Aufsteigend sortieren",
                "description": "Für Methode 'order': wahr (Standard) gibt früheren Rastern Vorrang, falsch gibt späteren Vorrang."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Analyse-Zellengröße (Standard: die feinste Zellengröße der Eingaben)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band für die radiometrischen Methoden (Standard 1)."
              },
              "min_region_size": {
                "label": "Minimale Regionsgröße",
                "description": "Zugewiesene Regionen, die kleiner als diese Zellenanzahl sind, einem benachbarten Bild neu zuweisen (Standard 0, d. h. alle behalten)."
              },
              "blend_width": {
                "label": "Überblendbreite",
                "description": "Breite des Weichzeichnungsübergangs in Karteneinheiten, als Attribut für die nachfolgende Mosaikierung geschrieben (Standard 0)."
              },
              "blend_type": {
                "label": "Überblendtyp",
                "description": "'both' (Standard), 'inside' oder 'outside'; wird als Attribut geschrieben."
              }
            }
          },
          "calculate_adjacent_fields": {
            "name": "Angrenzende Felder berechnen",
            "description": "Befüllt acht Felder für Nachbarblätter nach Richtung (N, NE, E, SE, S, SW, W, NW) auf jeder Kachel eines Kartenserien-Indexgitters mit dem Namen des angrenzenden Blatts, für Randbeschriftungen wie „Fortsetzung auf Blatt …“ – wie ArcGIS Calculate Adjacent Fields.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonraster des Kartenserien-Index (z. B. Ausgabe von grid_index_features)."
              },
              "page_name_field": {
                "label": "Seitennamenfeld",
                "description": "Feld, dessen Wert jede Seite beschriftet (wird in die Richtungsfelder der Nachbarn geschrieben)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonvektor (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "include_diagonal": {
                "label": "Diagonale einschließen",
                "description": "Zusätzlich die vier diagonalen Felder (NE, SE, SW, NW) aus eckberührenden Kacheln füllen. Standard wahr."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Stützpunkte vor dem Abgleich der Grenzen auf ein Gitter dieser Größe (KBS-Einheiten) quantisieren. Standard 0 (exakte Koordinaten)."
              }
            }
          },
          "calculate_central_meridian_and_parallels": {
            "name": "Mittelmeridian und Breitenparallelen berechnen",
            "description": "Berechnet je Objekt einen Zentralmeridian und zwei Standardparallelen aus der Ausdehnung des jeweiligen Objekts, für Kartenserien- und Atlasseiten, wie ArcGIS Calculate Central Meridian And Parallels.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabeobjekte in geografischen Koordinaten (Länge/Breite), typischerweise ein Seitengitter aus grid_index_features."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "field": {
                "label": "Feld",
                "description": "Name des zu schreibenden Mittelmeridian-Feldes (Standard 'central_meridian')."
              },
              "standard_offset": {
                "label": "Standardversatz",
                "description": "Anteil der Breitenspanne, um den jeder Standardparallel vom Objektrand nach innen gerückt wird (Standard 0.1667, Esris 1/6-Regel). Muss in [0, 0.5) liegen."
              }
            }
          },
          "calculate_composite_index": {
            "name": "Zusammengesetzten Index berechnen",
            "description": "Kombiniert mehrere numerische Attribute zu einem zusammengesetzten Index (wie ArcGIS Calculate Composite Index): Skalierung je Variable (Min-Max/Z-Score/Perzentil) mit optionaler Umkehrung, gewichtete Kombination (Mittelwert/Summe/geometrisches Mittel) und Neuskalierung der Ausgabe – das vektorseitige Pendant zu fuzzy_overlay.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (oder Tabelle) mit numerischen Variablenfeldern."
              },
              "fields": {
                "label": "Felder",
                "description": "Kommagetrennte Variablenfelder; ':reverse' an ein Feld anhängen, dessen hohe Werte den Index senken sollen (z. B. 'income:reverse,unemployment')."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorlayer mit den hinzugefügten Indexfeldern. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "scaling": {
                "label": "Skalierung",
                "description": "Skalierung pro Variable: 'minmax' (Standard), 'zscore', 'percentile' oder 'none'."
              },
              "weights": {
                "label": "Gewichte",
                "description": "Kommagetrennte Gewichte passend zu 'fields' (Standard: gleiche Gewichte)."
              },
              "combine": {
                "label": "Kombinieren",
                "description": "Kombination der skalierten Variablen: 'mean' (Standard), 'sum' oder 'geometric_mean'."
              },
              "output_range": {
                "label": "Ausgabebereich",
                "description": "Reskalierung des kombinierten Index: 'minmax' (0–1, Standard), 'zero_to_100', 'zscore' oder 'none'."
              }
            }
          },
          "calculate_distance_band": {
            "name": "Distanzband berechnen",
            "description": "Meldet die minimale, durchschnittliche und maximale Distanz, bei der jedes Objekt mindestens N Nachbarn hat (wie ArcGIS Calculate Distance Band from Neighbor Count) – die Schwellenwertdiagnose, die vor distanzbasierter räumlicher Statistik sicherstellt, dass kein Objekt ohne Nachbarn bleibt. Das gebündelte generate_spatial_weights_matrix baut die Matrix auf, meldet dieses Band aber nie.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punkt-/Objekt-Vektorlayer (projiziertes KBS; Distanzen in dessen Einheiten)."
              },
              "neighbors": {
                "label": "Nachbarn",
                "description": "Nachbaranzahl k (>= 1). Standard 1."
              },
              "distance_method": {
                "label": "Distanzmethode",
                "description": "'euclidean' (Standard) oder 'manhattan'."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler CSV-Pfad für eine Tabelle feature_id,kth_neighbor_distance."
              }
            }
          },
          "calculate_end_time": {
            "name": "Endzeit berechnen",
            "description": "Füllt ein Endzeitfeld aus der Startzeit des nächsten Datensatzes innerhalb jeder Entitätsgruppe und macht aus Beobachtungen zu einem Zeitpunkt Datensätze mit Zeitspanne (ArcGIS Calculate End Time). transform_fields führt Transformationen je Wert aus und summary_statistics aggregiert Gruppen, aber nichts führte eine zeilenweise geordnete zeitliche Auffüllung durch.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer oder Tabelle."
              },
              "start_field": {
                "label": "Startfeld",
                "description": "Zeitstempelfeld: eine numerische Epoche oder eine ISO-8601-Datums-/Datum-Zeit-Zeichenkette."
              },
              "end_field": {
                "label": "Endfeld",
                "description": "Feld, das die Endzeit erhält (Standard 'END_TIME'). Wird erstellt, wenn nicht vorhanden, und überschrieben, wenn vorhanden."
              },
              "id_fields": {
                "label": "ID-Felder",
                "description": "Komma- oder semikolongetrennte Gruppierungsfelder. Endzeiten werden nur innerhalb einer Gruppe abgeleitet, nie über Gruppengrenzen hinweg."
              },
              "last_record": {
                "label": "Letzter Datensatz",
                "description": "Was für die letzte Zeile jeder Gruppe geschrieben wird: 'null' (Standard), 'same_as_start' oder 'duration' (Start + default_duration)."
              },
              "default_duration": {
                "label": "Standarddauer",
                "description": "Sekunden, die bei last_record 'duration' zum Start addiert werden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabelayer. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              }
            }
          },
          "calculate_grid_convergence_angle": {
            "name": "Meridiankonvergenzwinkel berechnen",
            "description": "Berechnet je Objekt den Meridiankonvergenzwinkel zwischen Gitternord und geographisch Nord aus Längen-/Breitengrad des Schwerpunkts und einem Zentralmeridian (standardmäßig der eigene UTM-Zentralmeridian des Objekts) und schreibt ihn in ein Feld für korrekte Symbol-/Beschriftungsrotation auf projizierten Karten – wie ArcGIS Calculate Grid Convergence Angle. Geographische (im Uhrzeigersinn von Nord) oder arithmetische (gegen den Uhrzeigersinn von Ost) Konvention. Reine Mathematik, kein PROJ; ohne Bezug zur gebündelten Geländekennzahl convergence_index. Die Geometrie wird als Längen-/Breitengrad gelesen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (beliebiger Geometrietyp) in geografischen Koordinaten (Länge/Breite in Grad, EPSG:4326)."
              },
              "angle_field": {
                "label": "Winkelfeld",
                "description": "Name des Gleitkommafeldes für den Meridiankonvergenzwinkel in Grad. Standard 'GRID_CONV'."
              },
              "angle_type": {
                "label": "Winkeltyp",
                "description": "Winkelkonvention: 'geographic' (Grad im Uhrzeigersinn ab Norden, positiv nach Osten) oder 'arithmetic' (Grad gegen den Uhrzeigersinn ab Osten, 90 − geographic). Standard 'geographic'."
              },
              "central_meridian": {
                "label": "Zentralmeridian",
                "description": "Länge des Mittelmeridians in Grad. Wenn nicht angegeben, verwendet jedes Objekt den aus seiner Länge abgeleiteten Mittelmeridian seiner UTM-Zone."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "calculate_missing_z_values": {
            "name": "Fehlende Z-Werte berechnen",
            "description": "Füllt Platzhalter- oder fehlende Z-Werte entlang von 3D-Objekten durch Interpolation aus den gültigen Z-Werten auf beiden Seiten, wie ArcGIS Calculate Missing Z Values.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Objektlayer mit 3D-Stützpunkten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "placeholder": {
                "label": "Platzhalter",
                "description": "Sentinel-Wert, der ein fehlendes Z markiert (z. B. -9999). Stützpunkte ganz ohne Z werden immer als fehlend behandelt."
              },
              "method": {
                "label": "Methode",
                "description": "Füllmethode: 'linear' (Standard; Interpolation nach Distanz entlang des Objekts) oder 'nearest'."
              },
              "extrapolate": {
                "label": "Extrapolieren",
                "description": "Führende/nachfolgende Lücken durch Fortführen des nächsten gültigen Stützpunkts füllen (Standard falsch; nicht gefüllte Stützpunkte werden stattdessen gezählt)."
              }
            }
          },
          "calculate_motion_statistics": {
            "name": "Bewegungsstatistik berechnen",
            "description": "Annotiert zeitgestempelte Trackpunkte mit Bewegungsstatistiken – Geschwindigkeit, Beschleunigung, Richtung, Segment- und kumulierte Distanz, verstrichene Zeit und Stillstandskennzeichen – gruppiert nach Track und geordnet nach Zeit, wie ArcGIS Calculate Motion Statistics.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer mit zeitgestempelten Beobachtungen."
              },
              "track_field": {
                "label": "Track-Feld",
                "description": "Feld, das jede Spur/jedes bewegte Objekt identifiziert."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Feld mit der Zeit jedes Punkts: numerische Sekunden oder ein ISO-8601-Zeitstempel."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektor (ursprüngliche Attribute + Bewegungsfelder). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "window": {
                "label": "Fenster",
                "description": "Anzahl zurückliegender Punkte für die geglättete 'avg_speed' (Standard 1 = momentan)."
              },
              "idle_distance": {
                "label": "Leerlaufdistanz",
                "description": "Ruheradius: ein Punkt gilt als ruhend, wenn sich das Objekt in den letzten idle_duration Sekunden höchstens um diese Distanz bewegt hat. Standard 0 (Ruheerkennung aus)."
              },
              "idle_duration": {
                "label": "Leerlaufdauer",
                "description": "Rückblickfenster (Sekunden) für die Ruheerkennung. Standard 60."
              }
            }
          },
          "calculate_polygon_main_angle": {
            "name": "Hauptwinkel des Polygons berechnen",
            "description": "Schreibt die dominante Ausrichtung jedes Polygons (die Längsseitenrichtung seines flächenminimalen umschließenden Rechtecks, über Rotating Calipers) in ein Winkelfeld – wie ArcGIS Calculate Polygon Main Angle. Die Vektorausrichtung je Polygon, die dem gebündelten, rein rasterbasierten patch_orientation fehlt; speist Symbol-/Beschriftungsrotation.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonlayer mit dem hinzugefügten Winkelfeld. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "angle_field": {
                "label": "Winkelfeld",
                "description": "Name des zu schreibenden Winkelfeldes (Standard 'MainAngle')."
              },
              "convention": {
                "label": "Konvention",
                "description": "'arithmetic' (gegen den Uhrzeigersinn ab Osten; Standard), 'geographic' (im Uhrzeigersinn ab Norden) oder 'graphic' (im Uhrzeigersinn ab Osten)."
              }
            }
          },
          "calculate_rates": {
            "name": "Raten berechnen",
            "description": "Berechnet geglättete Raten aus Anzahl- und Bevölkerungsfeldern (wie ArcGIS Calculate Rates): rohe Rate, globales empirisches Bayes nach Marshall oder räumliches empirisches Bayes über k nächste Nachbarn – der übliche Stabilisierungsschritt vor der Hotspot-Analyse von Krankheits-/Kriminalitätsraten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygon- oder Punktlayer mit Anzahl- und Bevölkerungsfeldern."
              },
              "count_field": {
                "label": "Anzahlfeld",
                "description": "Feld mit der Ereignisanzahl (Zähler)."
              },
              "population_field": {
                "label": "Bevölkerungsfeld",
                "description": "Feld mit der Risikobevölkerung (Nenner)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabelayer mit hinzugefügten Ratenfeldern. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "method": {
                "label": "Methode",
                "description": "'crude', 'eb_global' (Standard) oder 'eb_spatial'."
              },
              "per": {
                "label": "Pro",
                "description": "Ratenmultiplikator, z. B. 100000 für pro 100.000 (Standard 100000)."
              },
              "neighbors": {
                "label": "Nachbarn",
                "description": "Nur eb_spatial: Anzahl der nächsten Nachbarn für die lokale Referenzrate (Standard 8)."
              }
            }
          },
          "calculate_transformation_errors": {
            "name": "Transformationsfehler berechnen",
            "description": "Passt eine Ähnlichkeits-/affine/projektive Transformation aus Verschiebungsverbindungen an und meldet den Residuenfehler jeder Verbindung sowie den Gesamt-RMSE, damit schlechte Passpunkte vor der Transformation gefunden und entfernt werden können. Wie ArcGIS Calculate Transformation Errors.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Verschiebungs-Verbindungslinien: der erste Stützpunkt ist der Quellpunkt (von), der letzte Stützpunkt der Zielpunkt (nach)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad für die Verbindungstabelle mit angehängten Residuenfeldern. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "method": {
                "label": "Methode",
                "description": "'affine' (Standard, 6 Parameter), 'similarity' (4) oder 'projective' (8)."
              },
              "keep_geometry": {
                "label": "Geometrie beibehalten",
                "description": "Geometrie jeder Verbindung in der Ausgabe behalten (Standard wahr). Für eine reine Tabelle auf falsch setzen."
              }
            }
          },
          "calculate_transit_service_frequency": {
            "name": "Bedienungshäufigkeit des Nahverkehrs berechnen",
            "description": "Zeitfensterbezogene GTFS-Bedienungshäufigkeit im ÖPNV: zählt für ein Betriebsdatum (über calendar/calendar_dates) und ein Zeitfenster die Fahrten, die jede Haltestelle oder Routenlinie bedienen, und meldet Fahrten pro Stunde, wie ArcGIS Calculate Transit Service Frequency.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad zu einem entpackten GTFS-Feed-Verzeichnis."
              },
              "target": {
                "label": "Ziel",
                "description": "'stops' (Punkt pro Haltestelle, Standard) oder 'lines' (Polylinie pro Route)."
              },
              "date": {
                "label": "Datum",
                "description": "Betriebsdatum JJJJMMTT, aufgelöst über calendar.txt/calendar_dates.txt. Wenn nicht angegeben, zählen alle Verkehrsangebote."
              },
              "start_time": {
                "label": "Startzeit",
                "description": "Fensterbeginn HH:MM oder HH:MM:SS (GTFS-Zeiten können 24:00 überschreiten). Wenn nicht angegeben, zählt der gesamte Tag."
              },
              "duration_minutes": {
                "label": "Dauer (Minuten)",
                "description": "Fensterlänge in Minuten (zusammen mit start_time verwendet; legt auch den Nenner pro Stunde fest)."
              },
              "count": {
                "label": "Anzahl",
                "description": "'departures' (Standard) oder 'arrivals' — welches Haltezeitfeld gezählt wird."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "calculate_utm_zone": {
            "name": "UTM-Zone berechnen",
            "description": "Berechnet für jedes Objekt die optimale UTM-Zone und den WGS84-EPSG-Code aus Längen-/Breitengrad seines Schwerpunkts und fügt ein Zonenfeld (1–60) und ein EPSG-Feld (326##/327##) hinzu – für Kartenserien mit adaptiver Projektion, wie ArcGIS Calculate UTM Zone. Reine Mathematik mit den Ausnahmen für Norwegen/Svalbard; kein PROJ. Die Geometrie wird als Längen-/Breitengrad gelesen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (beliebiger Geometrietyp) in geografischen Koordinaten (Länge/Breite in Grad, EPSG:4326)."
              },
              "zone_field": {
                "label": "Zonenfeld",
                "description": "Name des Ganzzahlfeldes für die UTM-Zonennummer (1–60). Standard 'utm_zone'."
              },
              "epsg_field": {
                "label": "EPSG-Feld",
                "description": "Name des Ganzzahlfeldes für den WGS84-UTM-EPSG-Code (326## Nord, 327## Süd). Standard 'utm_epsg'."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "cartogram": {
            "name": "Kartogramm",
            "description": "Verzerrt Polygone so, dass die Fläche proportional zu einem Attributwert ist: nicht zusammenhängend (jedes Polygon um seinen Schwerpunkt skalieren) oder Dorling (proportionale Kreise mit Überlappungsentfernung).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer, Format wird automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Numerisches Feld, zu dessen Wert die Fläche jedes Objekts proportional sein soll."
              },
              "method": {
                "label": "Methode",
                "description": "'non_contiguous' (Standard; Polygone an Ort und Stelle skalieren) oder 'dorling' (proportionale Kreise)."
              },
              "iterations": {
                "label": "Iterationen",
                "description": "Iterationen der Dorling-Überlappungsentfernung (Standard 100). Wird bei non_contiguous ignoriert."
              }
            }
          },
          "causal_inference_analysis": {
            "name": "Kausalinferenzanalyse",
            "description": "Schätzt den kausalen Effekt einer binären Behandlung auf ein Ergebnis über Propensity-Score-Matching, inverse Wahrscheinlichkeitsgewichtung oder Regressionsanpassung, mit einem Bootstrap-Konfidenzintervall mit Seed und einer Kovariaten-Balance-Tabelle je Störvariable vor/nach der Anpassung (wie ArcGIS Causal Inference Analysis).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Objektlayer."
              },
              "outcome_field": {
                "label": "Ergebnisfeld",
                "description": "Numerisches Ergebnisfeld (abhängige Variable)."
              },
              "treatment_field": {
                "label": "Behandlungsfeld",
                "description": "Binäres (0/1 oder boolesches) Behandlungsfeld. Kontinuierliche Behandlungen werden in dieser Version nicht unterstützt."
              },
              "confounding_fields": {
                "label": "Konfundierende Felder",
                "description": "Kommagetrennte(s) numerische(s) Störvariablenfeld(er), für die adjustiert wird."
              },
              "method": {
                "label": "Methode",
                "description": "'ps_matching' (Standard, Nächster-Nachbar-Caliper-Matching auf dem Propensity Score), 'ipw' (stabilisierte inverse Wahrscheinlichkeitsgewichtung) oder 'regression_adjustment' (Ergebnis ~ Behandlung + Störvariablen)."
              },
              "add_spatial_confounders": {
                "label": "Räumliche Konfundierer hinzufügen",
                "description": "Wenn wahr, wird der Satz der Störvariablen um die x/y-Koordinaten jedes Objekts sowie den k-Nächste-Nachbarn-Mittelwert jeder Störvariable erweitert (Standard falsch)."
              },
              "balance_threshold": {
                "label": "Balance-Schwellenwert",
                "description": "Schwellenwert der standardisierten Mittelwertdifferenz für die Balanceprüfung nach der Adjustierung (Standard 0.1)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Eingabekopie + Spalten für Propensity Score / Gewicht / Match-ID). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "seed": {
                "label": "Seed",
                "description": "Ganzzahliger Seed für das deterministische Bootstrap-Konfidenzintervall (Standard 42)."
              }
            }
          },
          "cell_position_statistics": {
            "name": "Statistik der Zellenposition",
            "description": "Positions- und Rangstatistiken je Zelle über einen Stapel ausgerichteter Raster (ArcGIS Highest Position, Lowest Position, Popularity und Rank): welcher Layer den Extremwert enthält, der Wert, der eine bestimmte Anzahl von Malen vorkommt, oder der n-t-kleinste Wert. cell_statistics reduziert einen Stapel auf einen Wert und kann nie melden, aus welchem Layer dieser Wert stammt, und das gebündelte find_argument_statistics arbeitet entlang der Argumentachse eines einzelnen Multiband-Rasters ohne die Auswahlsemantik von Popularity/Rank.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Ein Multiband-Raster (jedes Band ist ein Layer) oder eine kommagetrennte Liste koregistrierter Raster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "statistic": {
                "label": "Statistik",
                "description": "'highest_position' (Standard), 'lowest_position', 'popularity' oder 'rank'."
              },
              "selector": {
                "label": "Selektor",
                "description": "Erforderlich für 'popularity' und 'rank': ein koregistrierter Rasterpfad oder eine konstante Zahl, die pro Zelle die Vorkommensanzahl (popularity) oder den 1-basierten Rang zur Auswahl angibt."
              },
              "ignore_nodata": {
                "label": "NoData ignorieren",
                "description": "NoData-Beobachtungen pro Zelle überspringen (Standard wahr). Wenn falsch, macht jede NoData-Beobachtung die Zelle zu NoData."
              },
              "process_as_multiband": {
                "label": "Als Multiband verarbeiten",
                "description": "'single_band' (Standard): jedes Band jeder Eingabe ist ein Layer eines einzigen Stapels. 'multi_band': Band i jeder Eingabe bildet einen eigenen Stapel, was ein Multiband-Ergebnis liefert."
              }
            }
          },
          "cell_records_to_sectors": {
            "name": "Zellendatensätze zu Sektoren",
            "description": "Erzeugt Antennenabdeckungsgeometrie aus Mobilfunkmast-Punkten: Keilpolygone oder Winkelhalbierenden-Sektorlinien aus Azimut, Strahlbreite und Radius je Mast – wie ArcGIS Cell Site Records To Feature Class / Generate Sector Lines.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer der Antennen/Masten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              },
              "output_type": {
                "label": "Ausgabetyp",
                "description": "Auszugebende Geometrie: 'wedge' (Abdeckungspolygone, Standard) oder 'line' (Sektor-Winkelhalbierende als Linien)."
              },
              "azimuth_field": {
                "label": "Azimutfeld",
                "description": "Feld mit dem Azimut jeder Antenne (Kompassgrad, 0 = Norden, im Uhrzeigersinn). Fällt auf 'azimuth' zurück, wenn nicht vorhanden."
              },
              "beamwidth_field": {
                "label": "Strahlbreitenfeld",
                "description": "Feld mit der Strahlbreite jeder Antenne in Grad. Fällt auf 'beamwidth' zurück, wenn nicht vorhanden."
              },
              "radius_field": {
                "label": "Radiusfeld",
                "description": "Feld mit dem Abdeckungsradius jeder Antenne in KBS-Einheiten. Fällt auf 'radius' zurück, wenn nicht vorhanden."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Standard-Azimut in Kompassgrad, wenn kein Feld angegeben ist / ein Wert fehlt. Standard 0."
              },
              "beamwidth": {
                "label": "Strahlbreite",
                "description": "Standard-Strahlbreite in Grad (0 < bw ≤ 360; ≥ 360 = omnidirektional). Standard 65."
              },
              "radius": {
                "label": "Radius",
                "description": "Standard-Abdeckungsradius in KBS-Einheiten (muss positiv sein). Standard 1000."
              },
              "segments": {
                "label": "Segmente",
                "description": "Anzahl gerader Segmente zur Annäherung jedes Sektorbogens (≥ 1). Standard 16."
              }
            }
          },
          "cell_statistics": {
            "name": "Zellenstatistik",
            "description": "Statistik je Pixel über einen Stapel ausgerichteter Raster (wie ArcGIS Cell Statistics): Mittelwert, Majorität, Maximum, Median, Minimum, Minorität, Perzentil, Spannweite, Standardabweichung, Summe oder Vielfalt – der lokale Multi-Raster-Reduzierer, den die gebündelten sum_overlay/weighted_sum (nur Summe) und die Nachbarschafts-/Zonenwerkzeuge nicht bieten.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Ein Multiband-Raster (jedes Band ist ein Layer) oder eine kommagetrennte Liste koregistrierter Raster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Einband-Ausgaberaster des reduzierten Wertes. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "statistic": {
                "label": "Statistik",
                "description": "'mean' (Standard), 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'range', 'std', 'sum' oder 'variety'."
              },
              "ignore_nodata": {
                "label": "NoData ignorieren",
                "description": "NoData-Beobachtungen pro Zelle überspringen (Standard wahr). Wenn falsch, macht jede NoData-Beobachtung die Zelle zu NoData."
              },
              "percentile_value": {
                "label": "Perzentilwert",
                "description": "Perzentil in [0, 100] für die Statistik 'percentile' (Standard 50 = Median)."
              }
            }
          },
          "central_feature": {
            "name": "Zentrales Objekt / lineares Richtungsmittel",
            "description": "Das zentrale Objekt (das Eingabeobjekt mit der kleinsten Gesamtdistanz zu allen anderen) oder das lineare Richtungsmittel (mittlere Richtung, zirkuläre Varianz und mittlere Länge von Linienobjekten) – die beiden Mitglieder der Gruppe „Measuring Geographic Distributions“, die directional_distribution fehlen (ArcGIS Central Feature / Linear Directional Mean).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (Punkte für central_feature; Linien für linear_directional_mean)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              },
              "statistic": {
                "label": "Statistik",
                "description": "'central_feature' (Standard) oder 'linear_directional_mean'."
              },
              "weight_field": {
                "label": "Gewichtungsfeld",
                "description": "Optionales numerisches Feld zur Gewichtung jedes Objekts (nur central_feature)."
              },
              "case_field": {
                "label": "Fallfeld",
                "description": "Optionales Feld zur Gruppierung der Objekte; ein Ergebnis pro eindeutigem Wert."
              },
              "distance": {
                "label": "Distanz",
                "description": "Distanzmetrik für central_feature: 'euclidean' (Standard) oder 'manhattan'."
              },
              "orientation_only": {
                "label": "Nur Orientierung",
                "description": "Linien für linear_directional_mean als ungerichtet behandeln (Orientierung mod 180°). Standard falsch."
              }
            }
          },
          "change_point_detection": {
            "name": "Erkennung von Änderungspunkten",
            "description": "Erkennt abrupte Verschiebungen in der Zeitreihe an jedem Ort eines H3-Raum-Zeit-Würfels (wie ArcGIS Change Point Detection): binäre Segmentierung auf einer Mittelwert- oder Steigungsverschiebungs-Kostenfunktion mit sensitivitätsskalierter Strafe (oder einer festen Anzahl von Änderungspunkten) und meldet je Zelle die Anzahl der Änderungen, das Jahr der größten Änderung und die Segmentmittelwerte. Die zeitliche Segmentierung, die die Zwei-Zeitpunkt-change_vector_analysis und die monotonen Mann-Kendall-Tests nicht leisten können.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktlayer zeitgestempelter Ereignisse (Länge/Breite)."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Feld mit der Zeit jedes Punkts: eine Zahl oder ein ISO-8601-Zeitstempel."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-H3-Polygonlayer mit Change-Point-Attributen. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Numerisches Feld, das pro Bin aggregiert wird (Standard: Punktanzahl)."
              },
              "change_type": {
                "label": "Änderungstyp",
                "description": "'mean' (Niveauverschiebungen; Standard) oder 'slope' (Trendverschiebungen)."
              },
              "method": {
                "label": "Methode",
                "description": "'auto' (strafbasiert, Standard) oder 'defined' (genau num_change_points)."
              },
              "num_change_points": {
                "label": "Anzahl Änderungspunkte",
                "description": "Methode defined: Anzahl der pro Standort zu findenden Change Points (Standard 1)."
              },
              "sensitivity": {
                "label": "Empfindlichkeit",
                "description": "Methode auto: Strafskalierung; höher = weniger Change Points (Standard 1.0)."
              },
              "time_step": {
                "label": "Zeitschritt",
                "description": "Breite eines Zeitschritts in den Einheiten von time_field (Standard 1)."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "H3-Auflösung 0..15 (Standard 7)."
              }
            }
          },
          "classification_accuracy_assessment": {
            "name": "Bewertung der Klassifikationsgenauigkeit",
            "description": "Bewertet ein klassifiziertes Raster (oder Punkte, die bereits eine vorhergesagte Klasse tragen) anhand von Referenzpunkten mit Ground-Truth-Beschriftung und erzeugt eine Konfusionsmatrix, Gesamtgenauigkeit, Produzenten-/Nutzergenauigkeit je Klasse und Cohens Kappa – wie ArcGIS Compute Confusion Matrix.",
            "params": {
              "points": {
                "label": "Punkte",
                "description": "Referenz-Punktlayer (Genauigkeitsbewertung) mit dem Feld der Ground-Truth-Klasse."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Attribut der Punkte mit der Klassenbezeichnung der Ground Truth (Referenz)."
              },
              "input": {
                "label": "Eingabe",
                "description": "Klassifiziertes Raster, das an jedem Referenzpunkt abgetastet wird (nächste Zelle). Entweder dieses ODER 'classified_field' angeben."
              },
              "classified_field": {
                "label": "Klassifiziertes Feld",
                "description": "Attribut der Punkte, das bereits die vorhergesagte (Karten-)Klasse enthält und anstelle der Rasterabtastung verwendet wird. Entweder dieses ODER 'input' angeben."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band des klassifizierten Rasters, das abgetastet wird (Standard 1)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad für die mit REF_CLASS, MAP_CLASS, CORRECT annotierten Referenzpunkte. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              }
            }
          },
          "collapse_dual_lines_to_centerline": {
            "name": "Doppellinien auf Mittellinie reduzieren",
            "description": "Erkennt Paare annähernd paralleler Linien innerhalb einer Breitentoleranz (Richtungsfahrbahnen, Straßenränder) und ersetzt jedes Paar durch eine einzelne Mittellinie, wobei Knotenpunkte neu verbunden werden – wie ArcGIS Collapse Dual Lines To Centerline.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Linienvektorlayer (projiziertes KBS; Breiten in dessen Einheiten)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienvektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "min_width": {
                "label": "Minimale Breite",
                "description": "Minimaler Abstand zwischen gepaarten Linien in KBS-Einheiten (Standard 0)."
              },
              "max_width": {
                "label": "Maximale Breite",
                "description": "Maximaler Abstand zwischen gepaarten Linien in KBS-Einheiten. Erforderlich (die Zusammenfassungsbreite)."
              },
              "attribute": {
                "label": "Attribut",
                "description": "Optionales Feld, das übereinstimmen muss, damit zwei Linien gepaart werden (z. B. Straßenname oder Klasse)."
              },
              "sample_distance": {
                "label": "Abtastdistanz",
                "description": "Verdichtungsintervall für die Parallelitätsprüfung in KBS-Einheiten. Standard: max_width / 2."
              },
              "min_overlap": {
                "label": "Minimale Überlappung",
                "description": "Minimaler Anteil einer Linie, der parallel zu ihrem Partner verlaufen muss, um gepaart zu werden (0-1, Standard 0.5)."
              }
            }
          },
          "collapse_hydro_polygon": {
            "name": "Hydrologisches Polygon reduzieren",
            "description": "Reduziert schmale Gewässerpolygone auf Mittellinien und behält breite Abschnitte als Polygone (wie ArcGIS Collapse Hydro Polygon): verfolgt die Mittellinie jedes Polygons entlang seiner Hauptachse über die Mittelpunkte senkrechter Querschnitte, misst die lokale Breite und reduziert dort, wo die mittlere Breite auf oder unter einem Schwellenwert liegt. Die breitenschwellenbasierte Polygon→Linie-Generalisierung, die das Straßenrand-Werkzeug collapse_dual_lines_to_centerline und das Raster-Werkzeug river_centerlines nicht leisten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Gewässerpolygonlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Mittellinienlayer für zusammengefasste (schmale) Polygone. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "collapse_width": {
                "label": "Kollabierbreite",
                "description": "Polygone, deren mittlere Breite höchstens diesem Wert entspricht, werden zu einer Mittellinie zusammengefasst."
              },
              "sample_distance": {
                "label": "Abtastdistanz",
                "description": "Abstand der Querschnittsstationen entlang der Achse (Standard: collapse_width / 2)."
              },
              "min_length": {
                "label": "Minimale Länge",
                "description": "Zusammengefasste Mittellinien verwerfen, die kürzer als dieser Wert sind (Standard 0)."
              },
              "retained": {
                "label": "Beibehalten",
                "description": "Optionaler Ausgabe-Polygonlayer für breite (nicht zusammengefasste) Abschnitte."
              }
            }
          },
          "collapse_road_detail": {
            "name": "Straßendetail reduzieren",
            "description": "Reduziert kleine Straßenschleifen und Versätze (Kreisverkehre, Hantelformen, versetzte Knicke) unterhalb eines Durchmesser-Schwellenwerts auf einzelne Durchgangsverbindungen für die kleinmaßstäbige Darstellung und bewahrt dabei die Netzwerkkonnektivität – wie ArcGIS Collapse Road Detail.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Straßenvektorlayer (Linien), Format wird automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "collapse_distance": {
                "label": "Kollabierdistanz",
                "description": "Maximaler Detaildurchmesser, der zusammengefasst wird. Schleifen/Versätze, deren Begrenzungsdurchmesser darunter liegt (Meter bei einem geografischen KBS, sonst KBS-Einheiten), werden zusammengefasst; größere bleiben erhalten."
              },
              "road_class_field": {
                "label": "Straßenklassenfeld",
                "description": "Optionales Straßenklassenfeld. Wenn gesetzt, werden nur Schleifen zusammengefasst, deren Randstraßen alle denselben Klassenwert haben (Knoten zwischen verschiedenen Klassen bleiben erhalten)."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Distanz, innerhalb derer Straßenendpunkte als derselbe Knoten behandelt werden. Standard 1e-6."
              }
            }
          },
          "collect_events": {
            "name": "Ereignisse sammeln",
            "description": "Fasst deckungsgleiche Ereignispunkte zu eindeutigen Orten zusammen, die jeweils eine ICOUNT-Anzahl der dortigen Ereignisse tragen, wie ArcGIS Collect Events.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer (Point oder MultiPoint)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Fangtoleranz in Karteneinheiten; Punkte, deren Koordinaten auf dieselbe Zelle gerundet werden, gelten als deckungsgleich (Standard 1e-8, d. h. praktisch exakt)."
              }
            }
          },
          "colocation_analysis": {
            "name": "Kolokationsanalyse",
            "description": "Lokaler Kolokationsquotient (Leslie & Kronenfeld), der misst, ob Punkte der Kategorie A überproportional unter Nachbarn der Kategorie B zu finden sind, mit einem Permutationstest-p-Wert mit Seed – wie ArcGIS Colocation Analysis.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer mit einem Kategoriefeld."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (eine Kopie der Eingabe mit Kolokationsfeldern). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "category_field": {
                "label": "Kategoriefeld",
                "description": "Feld mit der Kategorie jedes Punkts."
              },
              "category_a": {
                "label": "Kategorie A",
                "description": "Fokuskategorie (A): die Punkte, deren Kolokation mit B gemessen wird."
              },
              "category_b": {
                "label": "Kategorie B",
                "description": "Nachbarkategorie (B): die Punkte, gegen die A getestet wird."
              },
              "neighbors": {
                "label": "Nachbarn",
                "description": "Anzahl der nächsten Nachbarn k (Standard 8)."
              },
              "weight": {
                "label": "Gewichtung",
                "description": "Nachbargewichtung: 'gaussian' (Distanzabnahme, Standard) oder 'uniform'."
              },
              "permutations": {
                "label": "Permutationen",
                "description": "Anzahl der Label-Permutationen für den Signifikanztest (Standard 99; 0 deaktiviert)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed für den Permutations-Zufallszahlengenerator (Standard 1), für reproduzierbare Ergebnisse."
              }
            }
          },
          "color_polygons": {
            "name": "Polygone einfärben",
            "description": "Weist jedem Polygon einen kleinen ganzzahligen Farbindex zu, sodass keine zwei benachbarten Polygone denselben Wert teilen (wie ArcGIS Calculate Color Theorem Field) – adjazenzsichere Choroplethen-Gestaltung über DSATUR-Graphfärbung auf Basis gemeinsamer Kanten (oder gemeinsamer Ecken).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonlayer mit dem hinzugefügten Farbfeld. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "field": {
                "label": "Feld",
                "description": "Name des zu schreibenden Farbindexfeldes (Standard 'color_id')."
              },
              "adjacency": {
                "label": "Adjazenz",
                "description": "'edge' (Rook, gemeinsame Grenze; Standard) oder 'edge_or_corner' (Queen, gemeinsame Grenze oder gemeinsamer Stützpunkt)."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Gittergröße, auf die Stützpunkte vor dem Abgleich der Grenzen gefangen werden (Standard 0 = exakt)."
              }
            }
          },
          "combine": {
            "name": "Kombinieren",
            "description": "Weist jeder eindeutigen Wertekombination über zwei oder mehr koregistrierte kategoriale Raster eine eindeutige Zonen-ID zu, plus eine Werte-Attributtabelle (ID, Anzahl, eine Spalte je Eingabe).",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Kommagetrennte Liste von >=2 koregistrierten kategorialen/ganzzahligen Rastern, die kombiniert werden sollen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Rasterpfad für das Raster der eindeutigen Kombinations-IDs. Wenn nicht angegeben, wird es im Speicher gehalten."
              },
              "csv_output": {
                "label": "CSV-Ausgabe",
                "description": "Optionaler CSV-Pfad für die Wert-Attributtabelle (Wert, Anzahl, eine Spalte pro Eingaberaster)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das aus jedem Eingaberaster gelesen wird. Standard 1."
              }
            }
          },
          "compare_spatial_weights": {
            "name": "Räumliche Gewichte vergleichen",
            "description": "Ordnet Kandidaten für Konzeptualisierungen räumlicher Gewichte (KNN, feste Distanzklasse, Kontiguität über Kanten / Kanten+Ecken, Delaunay) danach, wie stark jede die räumliche Clusterung eines oder mehrerer Analysefelder erfasst, mittels zeilenstandardisiertem globalem Moran's I mit Z-Score und zweiseitigem p-Wert – wie ArcGIS Compare Neighborhood Conceptualizations. Gibt eine Rangvergleichstabelle und die einzelne beste Methode aus.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (Punkte/Linien/Polygone; Kontiguität erfordert Polygone)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad der Ausgabe-Vergleichstabelle — eine CSV-Datei (Erweiterung .csv) oder eine geometrielose Vektortabelle. Wenn nicht angegeben, wird sie im Speicher gehalten."
              },
              "input_fields": {
                "label": "Eingabefelder",
                "description": "Kommagetrennte Liste numerischer Feldnamen, die auf räumliche Clusterbildung analysiert werden sollen."
              },
              "id_field": {
                "label": "ID-Feld",
                "description": "Feld mit der eindeutigen ID jedes Objekts (aus Kompatibilitätsgründen akzeptiert; zur Berechnung von Morans I nicht erforderlich)."
              },
              "methods": {
                "label": "Methoden",
                "description": "Kommagetrennte Kandidaten-Konzeptualisierungen aus: knn, fixed_distance_band, contiguity_edges, contiguity_edges_corners, delaunay. Standard 'knn,contiguity_edges,contiguity_edges_corners'. Methoden, die nicht auf die Geometrie anwendbar sind (oder fehlschlagen), werden übersprungen."
              },
              "number_of_neighbors": {
                "label": "Anzahl der Nachbarn",
                "description": "Anzahl der nächsten Nachbarn k für die Methode knn. Standard 8."
              },
              "threshold_distance": {
                "label": "Schwellenwertdistanz",
                "description": "Grenzwert des Distanzbandes in Karteneinheiten. Nur erforderlich, wenn fixed_distance_band zu den Methoden gehört."
              }
            }
          },
          "composite_bands": {
            "name": "Bänder kombinieren",
            "description": "Stapelt mehrere Einzelband-Raster in der angegebenen Reihenfolge zu einem Multiband-Raster (ArcGIS Composite Bands). Das gebündelte create_colour_composite ist auf drei RGB-Bänder festgelegt, sodass es keine Möglichkeit gab, die N-Band-Eingabe zusammenzustellen, die band_collection_statistics, principal_component_analysis, spectral_index und die OBIA-Suite alle benötigen.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Komma- oder semikolongetrennte Rasterpfade in der Reihenfolge der Ausgabebänder. Mindestens eines."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das aus jeder Eingabe übernommen wird, wenn eine Eingabe selbst mehrere Bänder hat (Standard 1)."
              },
              "nodata_policy": {
                "label": "NoData-Regel",
                "description": "'any' (Standard): Eine Zelle ist NoData, wenn irgendein Band NoData ist. 'all': nur, wenn jedes Band NoData ist."
              },
              "nodata": {
                "label": "NoData",
                "description": "NoData-Wert für die Ausgabe (Standard: der NoData-Wert der ersten Eingabe)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Mehrband-Ausgaberaster. Wenn nicht angegeben, wird es im Speicher gehalten."
              }
            }
          },
          "compute_accuracy_for_object_detection": {
            "name": "Genauigkeit der Objekterkennung berechnen",
            "description": "Bewertet erkannte Objekte anhand von Ground Truth mittels IoU-Zuordnung und meldet Präzision, Recall und Average Precision je Klasse sowie die Gesamt-mAP, wie ArcGIS Compute Accuracy For Object Detection.",
            "params": {
              "detected": {
                "label": "Erkannt",
                "description": "Erkannte Objekte (Polygone oder Begrenzungsrahmen)."
              },
              "ground_truth": {
                "label": "Referenzdaten",
                "description": "Referenzobjekte, gegen die bewertet wird."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Genauigkeitstabelle. Wenn nicht angegeben, wird sie im Speicher gehalten."
              },
              "detected_class_field": {
                "label": "Feld erkannte Klasse",
                "description": "Klassenbezeichnungsfeld der Erkennungen. Weglassen, um alles als eine einzige Klasse zu bewerten."
              },
              "ground_truth_class_field": {
                "label": "Feld Referenzklasse",
                "description": "Klassenbezeichnungsfeld der Referenzdaten. Weglassen, um alles als eine einzige Klasse zu bewerten."
              },
              "confidence_field": {
                "label": "Konfidenzfeld",
                "description": "Konfidenzfeld der Erkennungen, das zur Rangfolge für die durchschnittliche Präzision verwendet wird. Ohne dieses Feld werden die Erkennungen in Eingabereihenfolge bewertet."
              },
              "min_iou": {
                "label": "Minimale IoU",
                "description": "Minimale Intersection-over-Union, damit eine Erkennung als Treffer zählt (Standard 0.5)."
              }
            }
          },
          "compute_sar_indices": {
            "name": "SAR-Indizes berechnen",
            "description": "Leitet polarimetrische SAR-Indizes – RVI (Radar Vegetation Index), RFDI (Radar Forest Degradation Index), CSI (Canopy Structure Index) und DPSVI (Dual-Pol SAR Vegetation Index) – aus multipolarisierter Rückstreuung ab (ArcGIS Compute SAR Indices). spectral_index deckt nur optische Bandarithmetik ab: seine Formeln und Bandkonventionen liegen im Reflektanzbereich und es kennt keine Polarisationskanäle, sodass die SAR-Kette des Katalogs (multilook, sar_coherence, Speckle-Filter) derzeit keinen Analyse-Endpunkt hat.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Kalibriertes SAR-Raster mit mehreren Polarisationen (ein Band pro Polarisation)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Indexraster. Wenn nicht angegeben, wird es im Speicher gehalten."
              },
              "index": {
                "label": "Index",
                "description": "'rvi' (Standard), 'rfdi', 'csi' oder 'dpsvi'."
              },
              "polarization_bands": {
                "label": "Polarisationsbänder",
                "description": "1-basierte Bandzuordnung, z. B. 'vv=1,vh=2' oder 'hh=1,hv=2,vv=3'. Standard nach Bandanzahl: 2 Bänder = 'vv=1,vh=2', 3+ Bänder = 'hh=1,hv=2,vv=3'."
              },
              "input_units": {
                "label": "Eingabeeinheiten",
                "description": "'linear' (Standard) oder 'db'. dB-Eingaben werden vor der Verhältnisrechnung in lineare Leistung umgewandelt, da Verhältnisse von Dezibelwerten nicht sinnvoll sind."
              }
            }
          },
          "construct_sight_lines": {
            "name": "Sichtlinien konstruieren",
            "description": "Erzeugt Sichtlinien-Objekte zwischen Beobachterpunkten und Zielobjekten, mit Höhenversätzen für Beobachter/Ziel, Abtastung entlang linearer und flächiger Ziele, optionalen Feldern für Azimut und Vertikalwinkel sowie 2D- oder 3D-Distanz. Wie ArcGIS Construct Sight Lines.",
            "params": {
              "observers": {
                "label": "Beobachter",
                "description": "Beobachter-Punktobjekte."
              },
              "targets": {
                "label": "Ziele",
                "description": "Ziel-Punkt-, -Linien- oder -Polygonobjekte."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad der Ausgabe-Sichtlinien. Wenn nicht angegeben, wird er im Speicher gehalten."
              },
              "observer_height_field": {
                "label": "Beobachterhöhenfeld",
                "description": "Optionales Feld mit dem Höhenversatz jedes Beobachters (wird zu seinem Z addiert)."
              },
              "target_height_field": {
                "label": "Zielhöhenfeld",
                "description": "Optionales Feld mit dem Höhenversatz jedes Ziels (wird zu seinem Z addiert)."
              },
              "join_field": {
                "label": "Verknüpfungsfeld",
                "description": "Optionales Feld, das in beiden Eingaben vorhanden ist; nur Beobachter und Ziele mit gleichem Wert werden gepaart. Ohne dieses Feld wird jeder Beobachter mit jedem Ziel gepaart."
              },
              "sample_distance": {
                "label": "Abtastdistanz",
                "description": "Abstand in Karteneinheiten für Zielpunkte, die entlang von Linien-/Polygongrenzen erzeugt werden (Standard: ein Punkt pro Stützpunkt)."
              },
              "output_direction": {
                "label": "Richtung ausgeben",
                "description": "Felder AZIMUTH und VERT_ANGLE hinzufügen (Standard falsch)."
              },
              "distance_method": {
                "label": "Distanzmethode",
                "description": "'2d' (Standard) oder '3d' für das Feld DISTANCE."
              }
            }
          },
          "contiguous_cartogram": {
            "name": "Zusammenhängendes Kartogramm",
            "description": "Dichteausgleichendes Kartogramm (Gastner-Newman-Diffusion): verzerrt Polygonflächen proportional zu einem Attribut und erhält die Karte dabei als zusammenhängende Fläche mit gemeinsamen Grenzen (ArcGIS Generate Contiguous Cartogram). Das mitgelieferte Kartogramm-Werkzeug implementiert nur die nicht zusammenhängende und die Dorling-Methode, die beide die Adjazenz zerstören, und seine eigene Moduldokumentation verweist die zusammenhängende Form auf später.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zusammenhängender Polygonlayer."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Positives numerisches Attribut, zu dessen Summe die Flächen proportional werden sollen."
              },
              "grid_size": {
                "label": "Gittergröße",
                "description": "Auflösung des Dichterasters; muss eine Zweierpotenz sein (Standard 256). Der wichtigste Regler für Genauigkeit/Rechenaufwand."
              },
              "iterations": {
                "label": "Iterationen",
                "description": "Diffusionsschritte (Standard 20). Mehr Schritte gleichen die Dichte weiter aus, auf Kosten stärkerer Verzerrung."
              },
              "blur": {
                "label": "Unschärfe",
                "description": "Gaußsche Vorglättung des Dichtefeldes in Rasterzellen (Standard 0.5). Verhindert die extreme Verzerrung, die eine harte Dichteunstetigkeit erzeugt."
              },
              "sea_density": {
                "label": "Meeresdichte",
                "description": "Dichte außerhalb des Untersuchungsgebiets: 'mean' (Standard) oder 'min'. Dies verändert das Ergebnis am Kartenrand erheblich."
              },
              "densify_spacing": {
                "label": "Verdichtungsabstand",
                "description": "Maximale Kantensegmentlänge in Rasterzellen, bevor Stützpunkte eingefügt werden (Standard 1.0). Lange gerade Grenzen lösen sich sonst von ihren Nachbarn."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonlayer mit verschobenen Stützpunkten und den ursprünglichen Attributen. Wenn nicht angegeben, wird er im Speicher gehalten."
              }
            }
          },
          "contour_list": {
            "name": "Höhenlinienliste",
            "description": "Erzeugt Konturen an einer expliziten Werteliste statt in festem Intervall, als verkettete Polylinien oder gefüllte Polygone, jeweils mit ihrem Niveau beschriftet (ArcGIS Contour List). Das gebündelte contours_from_raster akzeptiert nur „interval“ und „base“, sodass die unregelmäßigen Reihen realer Karten – IHO-Tiefenstufen, Hochwasser-Wiederkehrstufen, veröffentlichte Klassengrenzen – je Wert einen Lauf und eine Zusammenführung erfordern und trotzdem nicht als ein nach Niveau beschrifteter Layer herauskommen können.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Oberflächenraster."
              },
              "contour_values": {
                "label": "Höhenlinienwerte",
                "description": "Kommagetrennte Liste der zu konturierenden Niveaus in den Z-Einheiten des Rasters."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Höhenlinienlayer. Wenn nicht angegeben, wird er im Speicher gehalten."
              },
              "geometry_type": {
                "label": "Geometrietyp",
                "description": "'polyline' (Standard) für Höhenlinien oder 'polygon' für die gefüllte Region auf oder über jedem Niveau."
              },
              "min_length": {
                "label": "Minimale Länge",
                "description": "Höhenlinien verwerfen, die kürzer als dieser Wert in Karteneinheiten sind; dies entfernt die Sprenkel, die eine verrauschte Oberfläche erzeugt."
              },
              "close_rings": {
                "label": "Ringe schließen",
                "description": "Den ersten Stützpunkt bei Höhenlinien wiederholen, die sich selbst schließen (Standard wahr)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das konturiert werden soll (Standard 1)."
              }
            }
          },
          "contour_with_barriers": {
            "name": "Höhenlinien mit Barrieren",
            "description": "Verfolgt Isolinien einer Oberfläche, die an Barrierenobjekten enden, statt sie zu kreuzen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Raster einer kontinuierlichen Oberfläche."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad des Ausgabe-Linienvektors (Treiber aus der Erweiterung). Wenn nicht angegeben, wird er im Speicher gehalten."
              },
              "barriers": {
                "label": "Barrieren",
                "description": "Optionaler Barrieren-Vektorlayer (Linien oder Polygone). Höhenlinien kreuzen diese Objekte nicht."
              },
              "interval": {
                "label": "Intervall",
                "description": "Höhenlinienintervall in Oberflächeneinheiten. Niveaus sind Basis + k*Intervall innerhalb des Datenbereichs. Wird ignoriert, wenn 'levels' angegeben ist."
              },
              "base": {
                "label": "Basis",
                "description": "Basiswert, von dem aus das Intervall gemessen wird (Standard 0)."
              },
              "levels": {
                "label": "Ebenen",
                "description": "Explizite kommagetrennte Höhenlinienwerte (z. B. \"10,20,30\"). Überschreibt Intervall/Basis."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das gelesen wird (Standard 1)."
              }
            }
          },
          "convert_coordinate_notation": {
            "name": "Koordinatennotation umwandeln",
            "description": "Wandelt die Koordinate jedes Objekts zwischen Notationen um – Dezimalgrad (DD), Grad-Minuten-Sekunden (DMS), Grad-Dezimalminuten (DDM), UTM und MGRS/USNG – und schreibt ein neues Feld in der Zielnotation, wie ArcGIS Convert Coordinate Notation. Reine Gittermathematik (Krüger-Transversal-Mercator + MGRS-Buchstabenschema auf WGS84); kein PROJ.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punkt- (oder Tabellen-)Vektorlayer."
              },
              "input_notation": {
                "label": "Eingabenotation",
                "description": "Notation der Eingabekoordinate: DD, DMS, DDM, UTM oder MGRS."
              },
              "output_notation": {
                "label": "Ausgabenotation",
                "description": "Zu schreibende Zielnotation: DD, DMS, DDM, UTM oder MGRS."
              },
              "coord_field": {
                "label": "Koordinatenfeld",
                "description": "Feld mit der Eingabe-Koordinatenzeichenkette. Wenn nicht angegeben, wird die Punktgeometrie verwendet (nur gültig bei input_notation=DD; Geometrie x=Lon, y=Lat)."
              },
              "output_field": {
                "label": "Ausgabefeld",
                "description": "Name des zu schreibenden Feldes. Standard: die kleingeschriebene Ausgabenotation (z. B. 'utm')."
              },
              "precision": {
                "label": "Genauigkeit",
                "description": "MGRS-Ziffern pro Achse (1=10 km … 5=1 m, bis zu 9). Standard 5. Wird von anderen Notationen ignoriert."
              },
              "update_geometry": {
                "label": "Geometrie aktualisieren",
                "description": "Wenn wahr, wird die Geometrie jedes Objekts aus der geparsten Koordinate als Lon/Lat-Punkt in EPSG:4326 neu aufgebaut. Standard falsch (Eingabegeometrie/KBS beibehalten)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "convert_sar_units": {
            "name": "SAR-Einheiten umwandeln",
            "description": "Wandelt ein SAR-Raster zwischen den Darstellungen Amplitude, Intensität, lineare Leistung, Dezibel, komplex-zu-Intensität und abgewickelte Phase-zu-Verschiebung um (ArcGIS Convert SAR Units). raster_calculator kann die Arithmetik auswerten, trägt aber weder Semantik noch Absicherungen – er liefert bei einer Log-Umrechnung -inf für Zellen mit Wert null, und nichts im Katalog hält fest, in welcher Einheit ein SAR-Raster vorliegt, sodass Speckle-Filter und Verhältnisindizes routinemäßig auf die falsche Darstellung angewendet werden.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-SAR-Raster. Für 'complex_to_intensity' ist dies ein Zweiband-I/Q-Raster (Konvention von multilook / sar_coherence)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Rasterpfad. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "conversion": {
                "label": "Konvertierung",
                "description": "'linear_to_db', 'db_to_linear', 'amplitude_to_intensity', 'intensity_to_amplitude', 'complex_to_intensity' oder 'phase_to_displacement'."
              },
              "wavelength": {
                "label": "Wellenlänge",
                "description": "Radarwellenlänge in Metern für 'phase_to_displacement' (Standard 0.05546576, Sentinel-1 C-Band)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das gelesen wird (Standard 1). Wird für 'complex_to_intensity' ignoriert, das immer die Bänder 1 und 2 als I und Q liest."
              }
            }
          },
          "coregister_rasters": {
            "name": "Raster koregistrieren",
            "description": "Richtet ein sekundäres Raster automatisch an einer Referenz aus, mittels normalisierter Kreuzkorrelation eines Kachelgitters, subpixelgenauer Peak-Verfeinerung, einer Least-Squares-Transformationsanpassung mit Ausreißerentfernung und Resampling (ArcGIS Apply Coregistration). Dies ist die fehlende Voraussetzung für die gesamte InSAR-Kette des Katalogs: sar_coherence, flatten_interferogram und goldstein_phase_filter benötigen alle koregistrierte Eingaben, und nichts hat sie erzeugt. georeference_raster_from_control_points braucht von Hand gewählte Passpunkte, image_correlation bewertet nur die Ähnlichkeit, und warp_raster braucht eine bereitgestellte Transformation.",
            "params": {
              "reference": {
                "label": "Referenz",
                "description": "Referenzraster. Die Ausgabe wird auf das Gitter dieses Rasters geschrieben."
              },
              "secondary": {
                "label": "Sekundär",
                "description": "Raster, das auf das Referenzraster ausgerichtet werden soll. Alle seine Bänder werden resampelt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe des resampelten Sekundärrasters auf dem Referenzgitter. Wenn nicht angegeben, wird es im Speicher gehalten."
              },
              "tie_points": {
                "label": "Passpunkte",
                "description": "Ausgabe-Punktlayer der akzeptierten Passpunkte mit ihrer gemessenen Verschiebung und Korrelation. Wird immer erzeugt; wird im Speicher gehalten, wenn kein Pfad angegeben ist."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das für die Zuordnung verwendet wird (Standard 1). Eine Zweiband-Eingabe wird über ihren komplexen Betrag zugeordnet, sofern dies nicht angegeben ist."
              },
              "transform": {
                "label": "Transformation",
                "description": "'translation', 'affine' (Standard) oder 'polynomial2'."
              },
              "tile_size": {
                "label": "Kachelgröße",
                "description": "Seitenlänge jeder Zuordnungskachel in Zellen (Standard 32)."
              },
              "grid_size": {
                "label": "Gittergröße",
                "description": "Anzahl der Kacheln pro Achse (Standard 8, also 64 Kacheln)."
              },
              "max_shift": {
                "label": "Maximale Verschiebung",
                "description": "Halbe Breite des ganzzahligen Suchfensters in Zellen (Standard 8)."
              },
              "min_correlation": {
                "label": "Minimale Korrelation",
                "description": "Passpunkte verwerfen, deren maximale normalisierte Korrelation unter diesem Wert liegt (Standard 0.3)."
              },
              "outlier_sigma": {
                "label": "Ausreißer-Sigma",
                "description": "Passpunkte aussortieren, deren Anpassungsresiduum diese Anzahl von Standardabweichungen überschreitet (Standard 3.0). Auf 0 setzen, um das Aussortieren zu deaktivieren."
              },
              "resample": {
                "label": "Neu abtasten",
                "description": "'bilinear' (Standard) oder 'nearest'."
              }
            }
          },
          "corridor": {
            "name": "Korridor",
            "description": "Kostengünstigster Korridor zwischen zwei akkumulierten Kostenoberflächen (ArcGIS Corridor): summiert zwei Kostendistanz-Raster zu einer Korridoroberfläche, deren Minimum der kostengünstigste Pfad ist, und begrenzt optional per Schwellenwert auf das nahezu optimale Band. Direkter Modus (zwei Kostenraster) oder Komfortmodus (ein Reibungsraster + zwei Quellraster).",
            "params": {
              "cost1": {
                "label": "Kosten 1",
                "description": "Erstes akkumuliertes Kostenraster (von Quelle A). Direktmodus."
              },
              "cost2": {
                "label": "Kosten 2",
                "description": "Zweites akkumuliertes Kostenraster (von Quelle B). Direktmodus."
              },
              "cost": {
                "label": "Kosten",
                "description": "Reibungs-/Durchgangskostenraster. Komfortmodus (mit source1/source2)."
              },
              "source1": {
                "label": "Quelle 1",
                "description": "Erstes Quellraster (positive Zellen sind Quellen). Komfortmodus."
              },
              "source2": {
                "label": "Quelle 2",
                "description": "Zweites Quellraster (positive Zellen sind Quellen). Komfortmodus."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des Ausgabe-Korridorrasters. Wenn nicht angegeben, wird es im Speicher gehalten."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Nur Zellen beibehalten, deren Korridorkosten diesen absoluten Wert nicht überschreiten (der Rest wird auf NoData maskiert)."
              },
              "percent": {
                "label": "Prozent",
                "description": "Nur Zellen beibehalten, die innerhalb dieses Prozentsatzes über den minimalen Korridorkosten liegen (z. B. 5 = innerhalb von 5 %). Wird ignoriert, wenn 'threshold' gesetzt ist."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das aus dem/den Eingaberaster(n) gelesen wird. Standard 1."
              }
            }
          },
          "cost_back_link": {
            "name": "Kosten-Rückverweis",
            "description": "Gibt das 0-8-Nachbarrichtungs-Raster aus, das für jede Zelle den nächsten Schritt entlang der kostengünstigsten Route zurück zur nächstgelegenen Quelle kodiert, plus die akkumulierte Kostenoberfläche (ArcGIS Cost Back Link und Path Back Link). cost_distance, cost_pathway und cost_allocation berechnen dies alle intern und verwerfen es, sodass das Zurückverfolgen von N Zielen derzeit N vollständige Kostenlösungen statt eines Akkumulationsdurchlaufs plus N günstiger Rückwege kostet.",
            "params": {
              "source": {
                "label": "Quelle",
                "description": "Quellzellen: ein Raster (jede Zelle ungleich null und ungleich NoData ist eine Quelle) oder ein Punkt-/Multipunkt-Vektorlayer."
              },
              "cost": {
                "label": "Kosten",
                "description": "Raster der Kosten pro Distanzeinheit. Optional, wenn 'surface' angegeben ist (dann sind die Kosten überall standardmäßig 1, was reine Oberflächendistanz ergibt)."
              },
              "surface": {
                "label": "Oberfläche",
                "description": "Optionales Höhenraster, das die Variante Path Back Link aktiviert: Der horizontale Abstand wird durch die wahre Oberflächendistanz sqrt(dxy^2 + dz^2) ersetzt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Backlink-Raster (0 = Quelle, 1-8 = Richtung zur Quelle, 1 = Osten, gegen den Uhrzeigersinn). Wenn nicht angegeben, wird es im Speicher gehalten."
              },
              "out_distance": {
                "label": "Ausgabe Distanz",
                "description": "Akkumuliertes Kostenraster. Wird immer erzeugt; fällt auf ein Speicher-Handle zurück, wenn kein Pfad angegeben ist."
              },
              "max_distance": {
                "label": "Maximale Distanz",
                "description": "Optionaler Akkumulationsgrenzwert: Zellen, die mehr als diesen Wert kosten, bleiben unerreichbar."
              }
            }
          },
          "cost_connectivity": {
            "name": "Kostenkonnektivität",
            "description": "Kostengünstigstes Netzwerk, das mehrere Standorte über eine Kostenoberfläche verbindet (wie ArcGIS Cost Connectivity / Optimal Region Connections): Multi-Quellen-Dijkstra-Zuweisung, paarweise kostengünstigste Pfade zwischen benachbarten Regionen und deren minimaler Spannbaum – das kostengünstigste Netzwerk, das die gebündelten Einzelquellen-Werkzeuge cost_distance und path_distance nicht aufbauen können.",
            "params": {
              "sources": {
                "label": "Quellen",
                "description": "Punktlayer der zu verbindenden Standorte/Regionen."
              },
              "cost": {
                "label": "Kosten",
                "description": "Kosten-/Reibungsraster (Durchquerungskosten pro Zelle; NoData-Zellen sind Barrieren)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polylinienlayer der kostengünstigsten Pfade. Wenn nicht angegeben, wird er im Speicher gehalten."
              },
              "connections": {
                "label": "Verbindungen",
                "description": "'mst' (minimaler Spannbaum, der alle Standorte verbindet; Standard) oder 'all_neighbors' (jeder Pfad zwischen benachbarten Regionen)."
              },
              "id_field": {
                "label": "ID-Feld",
                "description": "Optionales Feld zur Beschriftung der Quellen (Standard: 1-basierter Index)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band des Kostenrasters (Standard 1)."
              }
            }
          },
          "count_overlapping_features": {
            "name": "Überlappende Objekte zählen",
            "description": "Zerlegt überlappende Polygone in disjunkte Regionen, jeweils mit der Anzahl (und optional den IDs) der Eingabeobjekte, die sie überdecken, wie ArcGIS Count Overlapping Features.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer (Objekte dürfen sich überlappen)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des Ausgabe-Polygonvektors (Treiber aus der Erweiterung) mit einem Feld 'count'. Wenn nicht angegeben, wird er im Speicher gehalten."
              },
              "min_count": {
                "label": "Minimale Anzahl",
                "description": "Nur Regionen beibehalten, die von mindestens so vielen Objekten überdeckt werden (Standard 1; 2 verwenden, um nur Überlappungen zu erhalten)."
              },
              "id_field": {
                "label": "ID-Feld",
                "description": "Optionales Feld zur Identifizierung jedes Eingabeobjekts (wird in der ids-Spalte / im Bericht verwendet). Standard: der Objektindex."
              },
              "report_ids": {
                "label": "Bericht-IDs",
                "description": "Optionaler CSV-Pfad für eine region_id,feature_id-Verknüpfungstabelle (eine Zeile pro überdeckendem Objekt)."
              }
            }
          },
          "create_accuracy_assessment_points": {
            "name": "Punkte zur Genauigkeitsbewertung erstellen",
            "description": "Erzeugt zufällig verteilte Referenzpunkte, stratifiziert nach den Klassen eines klassifizierten Rasters oder Polygon-Layers, vorbefüllt mit der Kartenklasse und bereit für die Ground-Truth-Beschriftung (ArcGIS Create Accuracy Assessment Points). classification_accuracy_assessment verarbeitet solche Punkte, aber nichts hat sie erzeugt, und create_spatial_sampling_locations stratifiziert nach Polygonobjekt oder Feld statt nach Rasterklasse und hat keine gleichverteilte Zuteilung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Klassifiziertes Raster oder ein klassifizierter Polygonlayer mit 'class_field'."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Klassenattribut, erforderlich, wenn 'input' ein Vektorlayer ist. Wird für Rastereingaben ignoriert, bei denen der Zellenwert verwendet wird."
              },
              "num_points": {
                "label": "Anzahl Punkte",
                "description": "Gesamtzahl der Referenzpunkte (Standard 500)."
              },
              "sampling_strategy": {
                "label": "Stichprobenstrategie",
                "description": "Eine der Optionen 'stratified_random' (Standard, Zuteilung proportional zur Klassenfläche), 'equalized_stratified' (gleiche Anzahl pro Klasse), 'random' (Klasse ignorieren)."
              },
              "min_points_per_class": {
                "label": "Minimale Punkte pro Klasse",
                "description": "Untergrenze bei 'stratified_random', damit seltene Klassen nicht wegfallen (Standard 1)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band einer Rastereingabe (Standard 1)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed für den deterministischen Zufallszahlengenerator (Standard 1)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktlayer mit CLASSVALUE (Kartenklasse), GrndTruth (-1 bis zur Erhebung) und Stratum. Wenn nicht angegeben, wird er im Speicher gehalten."
              }
            }
          },
          "create_cartographic_partitions": {
            "name": "Kartografische Partitionen erstellen",
            "description": "Erzeugt adaptive, nicht überlappende Partitionspolygone, die jeweils ungefähr eine Zielanzahl von Objekten enthalten (dichter, wo sich Daten häufen), damit große Generalisierungs-/Maskierungsaufgaben überdeckungssicher gekachelt werden können – ein Gegenstück in reinem Rust zu ArcGIS Create Cartographic Partitions.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (beliebige Geometrie). Jedes Objekt wird auf einen repräsentativen Punkt reduziert und einer Partition zugewiesen."
              },
              "feature_count": {
                "label": "Objektanzahl",
                "description": "Angestrebte maximale Anzahl von Objekten pro Partition. Eine Zelle wird geteilt, solange sie mehr als so viele Objekte enthält. Standard 1000."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonvektor der Partitionen (Treiber aus der Erweiterung). Wenn nicht angegeben, wird er im Speicher gehalten."
              }
            }
          },
          "create_overpass": {
            "name": "Überführung erstellen",
            "description": "Erzeugt Ausblendmasken-Polygone (und optionale Flügelstrich-Dekorationslinien), wo eine „obere“ Linie eine „untere“ Linie kreuzt, sodass die untere Linie an der Kreuzung maskiert wird.",
            "params": {
              "above": {
                "label": "Oberhalb",
                "description": "Linienvektor der Objekte, die ÜBER die Kreuzung führen (die Maske wird entlang dieser ausgerichtet). Format automatisch erkannt oder Speicher-Handle."
              },
              "below": {
                "label": "Unterhalb",
                "description": "Linienvektor der Objekte, die UNTER der Kreuzung maskiert werden (die auszublendenden Linien). Format automatisch erkannt oder Speicher-Handle."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für die Maskenpolygone (Treiber aus der Erweiterung). Wenn nicht angegeben, werden sie im Speicher gehalten."
              },
              "output_decoration": {
                "label": "Dekoration ausgeben",
                "description": "Optionaler Ausgabepfad für die Flügelstrich-Dekorationslinien. Wenn nicht angegeben, werden sie im Speicher gehalten (werden weiterhin als 'output_decoration' zurückgegeben)."
              },
              "margin_along": {
                "label": "Rand entlang",
                "description": "Halbe Länge jeder Maske entlang der oberen Linie in KBS-Einheiten (Maskenlänge ist das 2-Fache davon). Standard 1.0."
              },
              "margin_across": {
                "label": "Rand quer",
                "description": "Halbe Breite jeder Maske quer zur oberen Linie in KBS-Einheiten (Maskenbreite ist das 2-Fache davon). Standard 1.0."
              },
              "wing_type": {
                "label": "Flügeltyp",
                "description": "Dekorationsstil: 'none', 'perpendicular' (Standard; ein Strich quer über jedes Maskenende) oder 'parallel' (Umrandungslinien entlang jeder Seite)."
              }
            }
          },
          "create_routes": {
            "name": "Routen erstellen",
            "description": "Linienobjekte anhand eines Routen-ID-Felds zusammenführen, ihre Segmente zu einer einzigen Polylinie je Route ordnen und lineare Messwerte (M-Werte) aus der geometrischen Länge oder aus Von-/Bis-Messwertfeldern zuweisen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Linienvektordatei, Format automatisch erkannt (oder Speicher-Handle)."
              },
              "route_id_field": {
                "label": "Routen-ID-Feld",
                "description": "Attribut, das jede Route identifiziert; die Eingabelinien werden danach gruppiert, eine Ausgaberoute pro eindeutigem Wert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad des Ausgabe-Routenvektors (Treiber aus der Erweiterung). Wenn nicht angegeben, wird er im Speicher gehalten."
              },
              "measure_source": {
                "label": "Messwertquelle",
                "description": "Wie Messwerte zugewiesen werden: LENGTH (0..geometrische Länge), ONE_FIELD (Start aus einem Feld, Ende = Start + Länge) oder TWO_FIELDS (Start/Ende aus Feldern, interpoliert). Standard LENGTH."
              },
              "from_measure_field": {
                "label": "Feld Von-Messwert",
                "description": "Numerisches Feld mit dem Start-Messwert jeder Route (verwendet von ONE_FIELD und TWO_FIELDS). Wird aus dem ersten Segment der Route gelesen."
              },
              "to_measure_field": {
                "label": "Feld Bis-Messwert",
                "description": "Numerisches Feld mit dem End-Messwert jeder Route (verwendet von TWO_FIELDS). Wird aus dem ersten Segment der Route gelesen."
              },
              "measure_factor": {
                "label": "Messwertfaktor",
                "description": "Multiplikator, der auf den natürlichen (längenbasierten) Messwert angewendet wird, z. B. 0.001, um Meter in Kilometer umzurechnen. Standard 1.0."
              },
              "measure_offset": {
                "label": "Messwertversatz",
                "description": "Wert, der zu jedem Messwert entlang der Route addiert wird (verschiebt die M-Werte der gesamten Route). Standard 0.0."
              },
              "ignore_gaps": {
                "label": "Lücken ignorieren",
                "description": "Bei LENGTH/ONE_FIELD die geraden Sprünge zwischen getrennten Segmenten vom akkumulierten Messwert ausschließen, damit Lücken die Distanzen nicht aufblähen. Standard falsch."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Endpunkte innerhalb dieser Distanz (KBS-Einheiten) werden beim Zusammenfügen von Segmenten als deckungsgleich behandelt. Standard 1e-6."
              }
            }
          },
          "create_spatial_sampling_locations": {
            "name": "Räumliche Stichprobenstandorte erstellen",
            "description": "Stichprobenpunkte über ein Polygon-Untersuchungsgebiet nach einfachem Zufalls-, geschichtetem, systematischem (Quadrat/Sechseck/Dreieck) oder Cluster-Design erzeugen, mit reproduzierbarer Zufälligkeit über einen Seed.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Polygonvektordatei des Untersuchungsgebiets (oder Speicher-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad des Ausgabe-Punktvektors (Treiber aus der Erweiterung). Wenn nicht angegeben, wird er im Speicher gehalten."
              },
              "method": {
                "label": "Methode",
                "description": "'simple_random' (Standard), 'stratified', 'systematic' oder 'cluster'."
              },
              "num_samples": {
                "label": "Anzahl Stichproben",
                "description": "Gesamtzahl der Stichprobenpunkte für simple_random, stratified und cluster. Standard 100."
              },
              "strata_field": {
                "label": "Schichtungsfeld",
                "description": "Für stratified: Eingabeobjekte nach diesem Attribut in Straten gruppieren. Wenn nicht angegeben, bildet jedes Eingabeobjekt ein eigenes Stratum."
              },
              "allocation": {
                "label": "Zuteilung",
                "description": "Für stratified: 'proportional' zur Stratumfläche (Standard), 'equal' pro Stratum oder 'population_field' proportional zur Summe eines Feldes."
              },
              "population_field": {
                "label": "Bevölkerungsfeld",
                "description": "Für allocation=population_field: das numerische Feld, dessen Summe pro Stratum die Zuteilung bestimmt."
              },
              "bin_shape": {
                "label": "Bin-Form",
                "description": "Für systematic: 'square' (Standard), 'hexagon' oder 'triangle' als Gitter."
              },
              "bin_size": {
                "label": "Bin-Größe",
                "description": "Abstand (KBS-Einheiten) für systematische Gitter und Cluster-Zellen. Für diese Methoden erforderlich."
              },
              "num_clusters": {
                "label": "Anzahl Cluster",
                "description": "Für cluster: wie viele Zellen zufällig ausgewählt werden. Standard 10."
              },
              "min_distance": {
                "label": "Minimale Distanz",
                "description": "Mindestabstand zwischen simple_random-/stratified-/cluster-Punkten (KBS-Einheiten). Standard 0 (keine Einschränkung)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed für den deterministischen Zufallszahlengenerator (Standard 1)."
              }
            }
          },
          "create_spatially_balanced_points": {
            "name": "Räumlich ausgewogene Punkte erstellen",
            "description": "Räumlich gut verteilte (quasi-zufällige Halton-)Stichprobenpunkte innerhalb eines Begrenzungspolygons erzeugen, optional gewichtet durch ein Einschlusswahrscheinlichkeitsraster, jeder mit einer ausgewogenen Stichprobenreihenfolge versehen, wie ArcGIS Create Spatially Balanced Points.",
            "params": {
              "constraint": {
                "label": "Einschränkung",
                "description": "Begrenzungs-Polygonlayer; Punkte werden innerhalb dieser Polygone erzeugt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "num_points": {
                "label": "Anzahl Punkte",
                "description": "Anzahl der zu erzeugenden Stichprobenpunkte."
              },
              "probability": {
                "label": "Wahrscheinlichkeit",
                "description": "Optionales Raster der Einschlusswahrscheinlichkeit; Zellen mit höheren Werten werden mit größerer Wahrscheinlichkeit beprobt (normalisiert durch ihr Maximum)."
              },
              "seed": {
                "label": "Seed",
                "description": "Zufallsstartwert für reproduzierbare Stichproben (Standard 1)."
              }
            }
          },
          "create_underpass": {
            "name": "Unterführung erstellen",
            "description": "Erzeugt an Linienkreuzungen Maskenpolygone, die entlang des oberen Objekts ausgerichtet sind, und schneidet eine passende Lücke aus dem unteren Objekt, sodass es als darunter hindurchführend gelesen wird (ArcGIS Create Underpass). Gegenstück zum ausgelieferten create_overpass, das die untere Linie maskiert, damit die obere durchgehend erscheint; eine Unterführung benötigt stattdessen die dekorative Unterbrechung, die ein Tunnelportal von einer Brücke unterscheidet. Gibt sowohl die Masken als auch die gekürzten unteren Linien aus.",
            "params": {
              "above": {
                "label": "Oberhalb",
                "description": "Linienvektor der Objekte, die ÜBER die Kreuzung führen (die Masken werden entlang dieser ausgerichtet). Format automatisch erkannt oder Speicher-Handle."
              },
              "below": {
                "label": "Unterhalb",
                "description": "Linienvektor der Objekte, die UNTER der Kreuzung hindurchführen (die Linien, die die Lücke erhalten). Format automatisch erkannt oder Speicher-Handle."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für die Unterführungs-Maskenpolygone. Wenn nicht angegeben, werden sie im Speicher gehalten."
              },
              "output_lines": {
                "label": "Linien ausgeben",
                "description": "Optionaler Ausgabepfad für den unteren Layer mit ausgeschnittenen Unterführungslücken. Wenn nicht angegeben, wird er im Speicher gehalten (wird weiterhin als 'output_lines' zurückgegeben)."
              },
              "margin_along": {
                "label": "Rand entlang",
                "description": "Halbe Länge jeder Maske, gemessen ENTLANG der oberen Linie, in KBS-Einheiten; die Maske erstreckt sich in dieser Richtung über das 2-Fache davon. Standard 1.0."
              },
              "margin_across": {
                "label": "Rand quer",
                "description": "Halbe Breite jeder Maske QUER zur oberen Linie in KBS-Einheiten. Bei einer rechtwinkligen Kreuzung begrenzt dieser Wert die in die untere Linie geschnittene Lücke, sodass die entfernte Länge das 2-Fache davon beträgt. Standard 1.0."
              },
              "min_angle": {
                "label": "Minimaler Winkel",
                "description": "Kreuzungen überspringen, bei denen sich die beiden Linien unter einem kleineren Winkel in Grad als diesem treffen, da eine nahezu parallele Maske instabil ist. Standard 15."
              }
            }
          },
          "cul_de_sac_masks": {
            "name": "Sackgassenmasken",
            "description": "Maßstabsabhängige Ausschnittsmaskenpolygone an Wendehammern eines Straßennetzes erzeugen, wie ArcGIS Cul-De-Sac Masks.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Layer der Straßenmittellinien."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad des Ausgabe-Maskenpolygons. Wenn nicht angegeben, wird es im Speicher gehalten."
              },
              "reference_scale": {
                "label": "Referenzmaßstab",
                "description": "Maßstabszahl der Karte, für die die Maske dimensioniert ist (z. B. 24000 für 1:24.000)."
              },
              "symbol_width": {
                "label": "Symbolbreite",
                "description": "Breite der Straßenumrandung in Seiteneinheiten (siehe 'page_unit') beim Referenzmaßstab."
              },
              "margin": {
                "label": "Rand",
                "description": "Zusätzlicher Rand um das Symbol in Seiteneinheiten (Standard 0)."
              },
              "page_unit": {
                "label": "Seiteneinheit",
                "description": "Einheit von 'symbol_width' und 'margin': Punkt (Standard, 1/72 Zoll), mm oder Zoll."
              },
              "map_units_per_meter": {
                "label": "Karteneinheiten pro Meter",
                "description": "KBS-Einheiten pro Meter (Standard 1, korrekt für meterbasierte projizierte KBS). Für einen Layer in Grad etwa 0.000008983 verwenden."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Fangtoleranz der Koordinaten zum Verbinden von Linienendpunkten zu Netzwerkknoten (Standard 0.001 Karteneinheiten)."
              },
              "attributes": {
                "label": "Attribute",
                "description": "ids_only (Standard) | all — ob die Attribute des Quellobjekts auf die Maske übertragen werden."
              }
            }
          },
          "cut_fill": {
            "name": "Auftrag und Abtrag",
            "description": "Volumetrische Veränderung zwischen zwei DEM-Oberflächen (vorher/nachher) oder einer Oberfläche und einer Referenzebene: vorzeichenbehaftetes Höhenänderungsraster plus Abtrags-, Auftrags- und Nettovolumen, mit optionaler Volumenbeschriftung je Region.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Rasterdatei 'vorher' (oder der einzelnen Oberfläche im Ebenenmodus)."
              },
              "after": {
                "label": "Nach",
                "description": "Das Raster 'nachher' (Zwei-Oberflächen-Modus). Muss das Gitter von 'input' teilen. Entweder dies oder 'plane' angeben."
              },
              "plane": {
                "label": "Ebene",
                "description": "Höhe der Referenzebene (Oberflächen-Volumen-Modus): Die Veränderung wird als Eingabe minus diesem Wert gemessen. Entweder dies oder 'after' angeben."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Rasterpfad für die vorzeichenbehaftete Höhenänderung (Δz). Wenn nicht angegeben, wird es im Speicher gehalten."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das aus dem/den Eingaberaster(n) gelesen wird. Standard 1."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Zellen mit |Δz| kleiner oder gleich diesem Wert (Z-Einheiten des KBS) gelten als unverändert. Standard 0."
              },
              "region_output": {
                "label": "Regionsausgabe",
                "description": "Optionaler Rasterpfad für die Labels zusammenhängender Abtrags-/Auftragsregionen (Regions-IDs >= 1; unveränderte Zellen sind NoData)."
              },
              "csv_output": {
                "label": "CSV-Ausgabe",
                "description": "Optionaler CSV-Pfad für die Volumentabelle pro Region (region_id, type, cell_count, volume)."
              }
            }
          },
          "darcy_flow": {
            "name": "Darcy-Strömung",
            "description": "Stationäres Darcy-Geschwindigkeitsfeld des Grundwassers aus Rastern für Standrohrspiegelhöhe, Transmissivität und Porosität — ein Raster der Fließgröße (Darcy-Geschwindigkeit) und ein Raster der gefälleabwärts gerichteten Fließrichtung (v = -(T/n)·∇head), mit optionaler advektiver Partikelverfolgung (RK2) von Startpunkten zu Stromlinien-Polylinien — wie ArcGIS Darcy Flow / Particle Track.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Raster der Grundwasserstandshöhe (Grundwasserspiegelhöhe). Die Zellengröße wird aus diesem Raster übernommen."
              },
              "transmissivity": {
                "label": "Transmissivität",
                "description": "Transmissivitätsraster (koregistriert mit dem Grundwasserstandsraster)."
              },
              "porosity": {
                "label": "Porosität",
                "description": "Raster der effektiven Porosität (koregistriert mit dem Grundwasserstandsraster; Werte müssen > 0 sein)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des Ausgaberasters für den Betrag der Darcy-Geschwindigkeit. Wenn nicht angegeben, wird es im Speicher gehalten."
              },
              "direction": {
                "label": "Richtung",
                "description": "Optionaler Pfad des Ausgabe-Fließrichtungsrasters (Azimut in Grad, von Norden im Uhrzeigersinn, gradientenabwärts). Wenn nicht angegeben, wird es im Speicher gehalten."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das aus jedem Eingaberaster gelesen wird (Standard 1)."
              },
              "seeds": {
                "label": "Startpunkte",
                "description": "Optionaler Punktvektor der Partikel-Startpunkte. Wenn angegeben, werden Stromlinien von jedem Startpunkt aus verfolgt."
              },
              "streamlines": {
                "label": "Stromlinien",
                "description": "Optionaler Pfad des Ausgabe-Linienvektors für die verfolgten Partikel-Stromlinien (erfordert 'seeds')."
              },
              "step": {
                "label": "Schritt",
                "description": "Schrittlänge der Partikelverfolgung in KBS-Einheiten (Standard: die Zellengröße des Grundwasserstandsrasters)."
              },
              "max_steps": {
                "label": "Maximale Schritte",
                "description": "Maximale Integrationsschritte pro Partikel (Standard 1000)."
              }
            }
          },
          "delineate_built_up_areas": {
            "name": "Bebaute Gebiete abgrenzen",
            "description": "Dichte Gebäudegrundrisse zu glatten Siedlungs-/Stadtflächenpolygonen generalisieren, indem nahe Gebäude gruppiert werden (morphologisches Schließen), mit Filtern für Mindestgebäudeanzahl und Mindestfläche.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonlayer der Gebäudegrundrisse, Format automatisch erkannt (oder Speicher-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "grouping_distance": {
                "label": "Gruppierungsdistanz",
                "description": "Gebäude, deren Grundrisse innerhalb dieser Distanz (KBS-Einheiten) liegen, werden zu einer bebauten Fläche gruppiert. Setzt den Radius der morphologischen Schließung auf die Hälfte dieses Wertes."
              },
              "min_building_count": {
                "label": "Minimale Gebäudeanzahl",
                "description": "Bebaute Flächen verwerfen, die weniger als so viele Gebäude enthalten (Standard 1 — jede Gruppe behalten)."
              },
              "min_area": {
                "label": "Mindestfläche",
                "description": "Bebaute Flächen verwerfen, deren Fläche (KBS-Einheiten im Quadrat) unter diesem Wert liegt, und innere Löcher füllen, die kleiner als dieser Wert sind. Standard: alle behalten."
              },
              "simplify_tolerance": {
                "label": "Vereinfachungstoleranz",
                "description": "Douglas–Peucker-Toleranz (KBS-Einheiten), die auf die Grenze der bebauten Fläche angewendet wird, um den stützpunktreichen gerundeten Puffer auszudünnen. Standard 0 (keine Vereinfachung)."
              }
            }
          },
          "delineate_depressions": {
            "name": "Senken abgrenzen",
            "description": "Verschachtelte Senken aus einem Senkenraster mit der Level-Set-Methode abgrenzen (lidar slicing.py).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Senkenraster (z. B. die Ausgabe von extract_sinks)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad des Senken-ID-Rasters. Wenn nicht angegeben, wird es im Speicher gehalten."
              },
              "level_output": {
                "label": "Niveau-Ausgabe",
                "description": "Optionaler Ausgabepfad für das Senkenniveau-Raster."
              },
              "csv_output": {
                "label": "CSV-Ausgabe",
                "description": "Optionaler Ausgabepfad für die CSV-Datei der Senkenattribute."
              },
              "vector_output": {
                "label": "Vektorausgabe",
                "description": "Optionaler Ausgabepfad für Senkenpolygone als GeoJSON (Attribute verknüpft)."
              },
              "min_size": {
                "label": "Mindestgröße",
                "description": "Mindestanzahl von Pixeln für eine Senke (Standard 10)."
              },
              "min_depth": {
                "label": "Minimale Tiefe",
                "description": "Minimale Senkentiefe (aus Kompatibilitätsgründen akzeptiert; ungenutzt, entsprechend lidar)."
              },
              "interval": {
                "label": "Intervall",
                "description": "Schnittintervall für die Level-Set-Methode (Standard 0.3)."
              }
            }
          },
          "delineate_mounts": {
            "name": "Kuppen abgrenzen",
            "description": "Die verschachtelte Hierarchie erhöhter Formen (Kuppen) in einem DEM abgrenzen (lidar mounts.py).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-DEM-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad des Erhebungs-ID-Rasters. Wenn nicht angegeben, wird es im Speicher gehalten."
              },
              "level_output": {
                "label": "Niveau-Ausgabe",
                "description": "Optionaler Ausgabepfad für das Erhebungsniveau-Raster."
              },
              "csv_output": {
                "label": "CSV-Ausgabe",
                "description": "Optionaler Ausgabepfad für die CSV-Datei der Erhebungsattribute."
              },
              "vector_output": {
                "label": "Vektorausgabe",
                "description": "Optionaler Ausgabepfad für Erhebungspolygone als GeoJSON (Attribute verknüpft)."
              },
              "min_size": {
                "label": "Mindestgröße",
                "description": "Mindestanzahl von Pixeln für eine Erhebung (Standard 10)."
              },
              "min_height": {
                "label": "Minimale Höhe",
                "description": "Minimale Erhebungshöhe (aus Kompatibilitätsgründen akzeptiert; ungenutzt, entsprechend lidar)."
              },
              "interval": {
                "label": "Intervall",
                "description": "Schnittintervall für die Level-Set-Methode (Standard 0.3)."
              },
              "delta": {
                "label": "Delta",
                "description": "Basiswert, der beim Umkehren des DEM addiert wird (Standard 100)."
              }
            }
          },
          "dem_filter": {
            "name": "DGM-Filter",
            "description": "Ein DEM mit einem Mittelwert-, Median- oder Gauß-Filter glätten (lidar filtering.py).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-DEM-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              },
              "filter": {
                "label": "Filter",
                "description": "Filtertyp: 'mean', 'median' oder 'gaussian' (Standard 'mean')."
              },
              "kernel_size": {
                "label": "Kernelgröße",
                "description": "Fenstergröße in Pixeln für Mittelwert-/Medianfilter (Standard 3)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Standardabweichung für den Gauß-Filter (Standard 1.0)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das gefiltert werden soll (Standard 1)."
              }
            }
          },
          "dendrogram": {
            "name": "Dendrogramm",
            "description": "Einen hierarchischen Zusammenführungsbaum über Klassensignaturen aufbauen, um die Trennbarkeit der Klassen darzustellen, wie ArcGIS Dendrogram.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Geclusterter Objektlayer mit einem Klassenfeld und den numerischen Feldern, die den Merkmalsraum definieren."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Feld mit der Klassen-/Clusterkennung."
              },
              "fields": {
                "label": "Felder",
                "description": "Kommagetrennte numerische Felder, die den Merkmalsraum definieren."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Zusammenführungstabelle. Wenn nicht angegeben, wird sie im Speicher gehalten."
              },
              "distance": {
                "label": "Distanz",
                "description": "Distanz zwischen Signaturen: 'variance' (Standard; normalisiert durch die klasseninterne Streuung) oder 'mean_only'."
              },
              "standardize": {
                "label": "Standardisieren",
                "description": "Jedes Feld vor der Distanzberechnung z-standardisieren, damit Felder mit großem Wertebereich nicht dominieren (Standard wahr)."
              },
              "output_text": {
                "label": "Text ausgeben",
                "description": "Optionaler Pfad für eine eingerückte Klartextdarstellung des Baums."
              }
            }
          },
          "densify_sampling_network": {
            "name": "Stichprobennetz verdichten",
            "description": "Neue Stichprobenstandorte an den Zellen der höchsten Kriging-Vorhersageoberfläche (Standardfehler) vorschlagen, unter Einhaltung eines Mindestabstands (Hemmdistanz), wie ArcGIS Densify Sampling Network.",
            "params": {
              "prediction_error": {
                "label": "Vorhersagefehler",
                "description": "Eingabe-Raster des Vorhersage-Standardfehlers (z. B. eine Kriging-Varianz-/Fehleroberfläche). Neue Stichproben zielen auf die Zellen mit dem höchsten Fehler."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "count": {
                "label": "Anzahl",
                "description": "Anzahl der vorzuschlagenden neuen Stichprobenstandorte."
              },
              "inhibition_distance": {
                "label": "Hemmungsdistanz",
                "description": "Mindestabstand zwischen vorgeschlagenen Stichproben in Karteneinheiten (Standard 0 = keine Hemmung; nur die Zellen mit dem höchsten Fehler)."
              },
              "mask": {
                "label": "Maske",
                "description": "Optionaler Polygonlayer; nur Zellen, deren Mittelpunkt darin liegt, sind als Kandidaten zulässig."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band des Vorhersagefehler-Rasters, das gelesen wird (Standard 1)."
              }
            }
          },
          "detect_bright_ocean_objects": {
            "name": "Helle Objekte im Ozean erkennen",
            "description": "Findet Schiffe und andere helle Punktziele auf Wasser in SAR-Bildern mit einem Zwei-Parameter-CFAR-Detektor und gibt sie als ausgerichtete Begrenzungsrahmen mit Länge, Breite, Kurs und maximaler Rückstreuung aus (ArcGIS Detect Bright Ocean Objects). Keine der Registrierungen besitzt einen Detektor für lokales Clutter: ein globaler Schwellenwert kann nicht funktionieren, weil das Seeclutter mit Wind und Einfallswinkel heller wird, matched_filter_target_detection ist ein spektraler optischer Detektor, und detect_image_anomalies verwendet ein globales statt eines gleitenden Fenstermodells.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "SAR-Rückstreuungsraster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonlayer der erkannten Objekte. Wenn nicht angegeben, wird er im Speicher gehalten."
              },
              "geometry_type": {
                "label": "Geometrietyp",
                "description": "'bounding_box' (Standard) für das orientierte minimale Rechteck oder 'perimeter' für den nachgezeichneten Erkennungsumriss."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "CFAR-Erkennungsschwellenwert in Standardabweichungen des Hintergrunds (Standard 5.0)."
              },
              "guard_size": {
                "label": "Schutzzonengröße",
                "description": "Halbe Breite in Zellen des Schutzbandes, das von der Hintergrundschätzung ausgeschlossen wird (Standard 3). Muss kleiner als background_size sein."
              },
              "background_size": {
                "label": "Hintergrundgröße",
                "description": "Halbe Breite in Zellen des Hintergrundrings (Standard 12)."
              },
              "mask_features": {
                "label": "Maskenobjekte",
                "description": "Polygonlayer, der Land oder Wasser maskiert. Von der Maske ausgeschlossene Zellen werden weder getestet noch als Hintergrund verwendet."
              },
              "mask_type": {
                "label": "Maskentyp",
                "description": "'land_polygon' (Standard; außerhalb der Polygone analysieren) oder 'water_polygon' (innerhalb der Polygone analysieren)."
              },
              "min_object_length": {
                "label": "Minimale Objektlänge",
                "description": "Objekte verwerfen, die kürzer als dieser Wert in Karteneinheiten sind."
              },
              "max_object_length": {
                "label": "Maximale Objektlänge",
                "description": "Objekte verwerfen, die länger als dieser Wert in Karteneinheiten sind."
              },
              "min_object_width": {
                "label": "Minimale Objektbreite",
                "description": "Objekte verwerfen, die schmaler als dieser Wert in Karteneinheiten sind."
              },
              "max_object_width": {
                "label": "Maximale Objektbreite",
                "description": "Objekte verwerfen, die breiter als dieser Wert in Karteneinheiten sind."
              },
              "min_cells": {
                "label": "Minimale Zellen",
                "description": "Erkennungen verwerfen, die kleiner als so viele Zellen sind (Standard 2); dies unterdrückt isolierte Speckle-Spitzen."
              },
              "input_units": {
                "label": "Eingabeeinheiten",
                "description": "'intensity' (Standard), 'dn', 'amplitude' oder 'db'. Die Erkennung läuft auf linearer Leistung, wo die Clutter-Statistiken aussagekräftig sind."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das durchsucht wird (Standard 1)."
              }
            }
          },
          "detect_dark_ocean_areas": {
            "name": "Dunkle Ozeanflächen erkennen",
            "description": "Findet anomal dunkle Flächen auf Wasser in SAR-Bildern — Ölteppiche, natürliche Austritte, Algenfilme, windschwache Zonen — als Regionen, die eine festgelegte Anzahl von Standardabweichungen unter dem lokalen Meereshintergrund liegen, ausgegeben mit ihrem dB-Kontrast (ArcGIS Detect Dark Ocean Areas). Das Gegenstück zu detect_bright_ocean_objects und verschieden von extract_water_sar: eine reine Wasserszene ist unimodal, sodass eine Otsu-Trennung das Seeclutter einfach halbieren und die Hälfte des Ozeans als Ölteppich melden würde.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "SAR-Rückstreuungsraster über Wasser."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonlayer der dunklen Bereiche. Wenn nicht angegeben, wird er im Speicher gehalten."
              },
              "output_raster": {
                "label": "Ausgaberaster",
                "description": "Binäre Ausgabemaske (1 dunkel, 0 Hintergrund). Wird immer erzeugt; ohne Pfadangabe im Speicher abgelegt."
              },
              "method": {
                "label": "Methode",
                "description": "'statistical' (Standard; eine festgelegte Anzahl Standardabweichungen unter dem Hintergrundmittelwert), 'otsu' oder 'fixed'."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Bei 'statistical': wie viele Standardabweichungen unter dem Mittelwert als dunkel gelten (Standard 2.0). Bei 'fixed': der dB-Pegel, bei dem oder unter dem eine Zelle dunkel ist."
              },
              "min_area": {
                "label": "Mindestfläche",
                "description": "Dunkle Flächen verwerfen, die kleiner als diese Fläche in Karteneinheiten zum Quadrat sind. Ölteppiche sind groß und zusammenhängend; Speckle ist es nicht."
              },
              "min_contrast_db": {
                "label": "Minimaler Kontrast (dB)",
                "description": "Regionen verwerfen, die weniger als diese Anzahl dB unter dem Hintergrund liegen. Ein Mineralölteppich liegt typischerweise mehr als 5 dB darunter."
              },
              "mask_features": {
                "label": "Maskenobjekte",
                "description": "Polygon-Layer, der die Analyse auf Wasser beschränkt. Land ist hell und würde die Hintergrundschätzung verfälschen."
              },
              "mask_type": {
                "label": "Maskentyp",
                "description": "'land_polygon' (Standard; außerhalb der Polygone analysieren) oder 'water_polygon' (innerhalb der Polygone analysieren)."
              },
              "histogram_bins": {
                "label": "Histogramm-Bins",
                "description": "Anzahl der Bins für das Otsu-Histogramm (Standard 256)."
              },
              "input_units": {
                "label": "Eingabeeinheiten",
                "description": "'intensity' (Standard), 'dn', 'amplitude' oder 'db'."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das durchsucht wird (Standard 1)."
              }
            }
          },
          "detect_feature_changes": {
            "name": "Objektänderungen erkennen",
            "description": "Zwei Liniendatensätze über die Hausdorff-Distanz abgleichen und jedes Objekt als unchanged / spatial / attribute / spatial_attribute / new klassifizieren, plus gelöschte Basisobjekte — der Einstiegspunkt für Vektor-Veränderungserkennung und Konflation, wie ArcGIS Detect Feature Changes.",
            "params": {
              "update": {
                "label": "Aktualisieren",
                "description": "Aktualisierter Linien-Vektorlayer (der neue Zustand)."
              },
              "base": {
                "label": "Basis",
                "description": "Basis-Linien-Vektorlayer (der vorherige Zustand), mit dem verglichen wird."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienvektor (klassifizierte Update-Objekte plus gelöschte Basisobjekte). Falls weggelassen, im Speicher abgelegt."
              },
              "search_distance": {
                "label": "Suchdistanz",
                "description": "Maximale Distanz (KBS-Einheiten), um eine Update-Linie einer Basislinie zuzuordnen. Erforderlich."
              },
              "spatial_tolerance": {
                "label": "Räumliche Toleranz",
                "description": "Hausdorff-Distanz, unterhalb derer eine zugeordnete Geometrie als unverändert gilt (KBS-Einheiten). Standard: search_distance / 5."
              },
              "compare_fields": {
                "label": "Vergleichsfelder",
                "description": "Kommagetrennte(s) Feld(er), die in beiden Layern vorhanden sind und auf Attributänderungen verglichen werden."
              }
            }
          },
          "detect_graphic_conflict": {
            "name": "Grafikkonflikte erkennen",
            "description": "Ermitteln, wo sich die symbolisierten (gezeichneten) Ausdehnungen zweier Objektlayer — oder eines Layers mit sich selbst — überlappen oder innerhalb eines Mindestabstands drängen; je Konfliktpaar wird ein Konfliktpolygon mit beiden Quell-Objekt-IDs und der Überlappungsfläche ausgegeben, wie ArcGIS Detect Graphic Conflict.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (Punkte, Linien oder Polygone)."
              },
              "conflict": {
                "label": "Konflikt",
                "description": "Zweiter Vektorlayer, gegen den 'input' geprüft wird. Weglassen, um 'input' gegen sich selbst zu prüfen."
              },
              "symbol_width": {
                "label": "Symbolbreite",
                "description": "Symbolisierte Breite/Durchmesser der 'input'-Objekte in Karteneinheiten."
              },
              "conflict_symbol_width": {
                "label": "Konflikt-Symbolbreite",
                "description": "Symbolisierte Breite/Durchmesser der 'conflict'-Objekte in Karteneinheiten. Standard: wie 'symbol_width'. Wird ignoriert, wenn 'conflict' weggelassen wird."
              },
              "conflict_distance": {
                "label": "Konfliktdistanz",
                "description": "Zusätzlich erforderlicher Abstand über das Berühren hinaus, in Karteneinheiten. Standard 0."
              },
              "line_connection_allowance": {
                "label": "Linienverbindungstoleranz",
                "description": "Radius um einen gemeinsamen Endpunkt zweier Linienobjekte desselben Layers, innerhalb dessen ihre Überlappung als normale End-zu-End-Verbindung und nicht als Konflikt behandelt wird. Standard 0 (keine Toleranz)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonvektorpfad mit den Feldern 'input_fid', 'conflict_fid' und 'overlap_area'. Falls weggelassen, im Speicher abgelegt."
              }
            }
          },
          "detect_image_anomalies": {
            "name": "Bildanomalien erkennen",
            "description": "Jedes Pixel eines Multiband-Bildes anhand seiner Mahalanobis-Distanz zu den Bandstatistiken der Szene (oder eines gleitenden Fensters) bewerten — der Reed-Xiaoli-(RX-)Anomaliedetektor — mit optionaler Perzentil-Schwellenwertmaske, wie ArcGIS Detect Image Anomalies.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Multiband-Eingaberaster (2+ Bänder)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster mit Anomaliewerten (F32). Falls weggelassen, im Speicher abgelegt."
              },
              "mode": {
                "label": "Modus",
                "description": "'global' (Statistik der gesamten Szene, Standard) oder 'local' (Statistik im gleitenden Fenster)."
              },
              "window": {
                "label": "Fenster",
                "description": "Ungerade Fenstergröße (Pixel) für den lokalen Modus (Standard 15)."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Optionales Perzentil (0-100) der Wertverteilung, oberhalb dessen eine binäre Anomaliemaske geschrieben wird."
              },
              "mask_output": {
                "label": "Maskenausgabe",
                "description": "Ausgabepfad für die binäre Anomaliemaske (erfordert 'threshold'). Falls bei gesetztem Schwellenwert weggelassen, im Speicher abgelegt."
              }
            }
          },
          "detect_incidents": {
            "name": "Vorfälle erkennen",
            "description": "Markieren, wo eine Bedingung entlang jeder Spur beginnt und endet: Punkte mit Zeitstempel nach Spur gruppieren, nach Zeit sortieren, einen Start- (und optional End-)Vergleich über ein numerisches Attribut auswerten und Vorfallsepisoden als markierte Punkte oder Liniensegmente je Episode mit IDs und Dauern ausgeben — wie ArcGIS Detect Incidents.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer mit zeitgestempelten Beobachtungen."
              },
              "track_field": {
                "label": "Track-Feld",
                "description": "Feld zur Identifikation jeder Spur/jedes bewegten Objekts (z. B. Fahrzeug- oder Tier-ID)."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Feld mit der Zeit jedes Punkts: numerische Sekunden oder ein ISO-8601-Zeitstempel."
              },
              "start_condition": {
                "label": "Startbedingung",
                "description": "Bedingung, die einen Vorfall eröffnet, z. B. 'speed > 30'. Grammatik: '<field> <op> <number>' mit op aus > >= < <= == != , optional zwei Klauseln mit AND verknüpft."
              },
              "end_condition": {
                "label": "Endbedingung",
                "description": "Optionale Bedingung, die einen Vorfall beendet (gleiche Grammatik). Falls weggelassen, endet ein Vorfall, sobald die Startbedingung nicht mehr gilt."
              },
              "mode": {
                "label": "Modus",
                "description": "Ausgabemodus: 'points' (Standard, jeder Punkt wird mit Vorfallfeldern durchgereicht) oder 'segments' (eine Polylinie pro Vorfall)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "dice": {
            "name": "Würfeln",
            "description": "Polygone oder Polylinien mit mehr als einer Stützpunktgrenze in ein Gitter kleinerer Teile zerlegen (wie ArcGIS Dice), damit nachgelagerte Overlays und Kachelungen schnell bleiben — ein adaptiver Quadtree verschneidet die Geometrie mit jedem Quadranten, bis jedes Teil unter der Grenze liegt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygon- oder Polylinien-Layer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Layer der zerteilten Stücke. Falls weggelassen, im Speicher abgelegt."
              },
              "vertex_limit": {
                "label": "Stützpunktlimit",
                "description": "Maximale Anzahl Stützpunkte pro Ausgabeobjekt (Standard 10000). Objekte bis einschließlich dieses Werts werden unverändert durchgereicht."
              }
            }
          },
          "difference_3d": {
            "name": "3D-Differenz",
            "description": "Subtrahiert eine Menge von 3D-Körpern von einer anderen und berichtet das aus jedem Minuend-Objekt entfernte und darin verbleibende Volumen (ArcGIS Difference 3D). union_3d war das einzige 3D-Overlay in beiden Registrierungen und erase ist rein 2D für Polygone, sodass es keine Möglichkeit gab, das nach einem Schnittkörper verbleibende Aushubvolumen oder das Fahnenvolumen außerhalb einer Ausschlusshülle zu berechnen. Minuend-Volumen sind exakt; das entfernte Volumen wird durch Voxelbelegung bei einer ausgewiesenen Auflösung geschätzt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Geschlossene 3D-Körper als Minuend (Dreiecksnetz-MultiPolygone mit Z)."
              },
              "subtract": {
                "label": "Subtrahieren",
                "description": "Geschlossene 3D-Körper als Subtrahend, die von jedem Minuend entfernt werden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabetabelle, eine Zeile pro Minuend. Falls weggelassen, im Speicher abgelegt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Voxelzellen entlang der längsten Achse des Begrenzungsrahmens jedes Minuenden (Standard 64). Höher ist genauer und langsamer."
              },
              "keep_geometry": {
                "label": "Geometrie beibehalten",
                "description": "Die Originalgeometrie jedes Minuenden in seine Ausgabezeile übernehmen (Standard falsch: eine reine Attributtabelle). Die Geometrie ist der UNGESCHNITTENE Minuend — es wird kein exaktes zusammengeführtes Netz erzeugt."
              }
            }
          },
          "diffusion_interpolation_with_barriers": {
            "name": "Diffusionsinterpolation mit Barrieren",
            "description": "Verstreute Punktmessungen zu einem Raster interpolieren, indem eine Wärmediffusion simuliert wird, die UM absolute (flussfreie) Barrieren herum statt durch sie hindurch fließt (wie ArcGIS Diffusion Interpolation With Barriers). Stichproben werden als feste Zellen fixiert; jede andere Zelle nähert sich über `number_iterations` Jacobi-Durchläufe der Laplace-/Wärmegleichung dem Mittelwert ihrer Nicht-Barriere-Nachbarn an, sodass der Einfluss mit der Diffusionsdistanz abnimmt. Verschieden vom Kernel des kürzesten barrierefreien Pfades in interpolate_with_barriers und vom Rasterglätter anisotropic_diffusion_filter.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer mit Probenmessungen (Point / MultiPoint)."
              },
              "z_field": {
                "label": "Z-Feld",
                "description": "Numerisches Feld der Punkte mit dem zu interpolierenden Wert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Interpoliertes Ausgaberaster (GeoTIFF). Falls weggelassen, im Speicher abgelegt."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Zellengröße / Auflösung der Ausgabe in Karteneinheiten (Meter bei einem geografischen KBS, sonst KBS-Einheiten). Erforderlich."
              },
              "barriers": {
                "label": "Barrieren",
                "description": "Optionaler Barrieren-Vektorlayer (Polylinien oder Polygone), der die Diffusion blockiert. Polylinien blockieren die von ihren Segmenten gekreuzten Zellen; Polygone blockieren die Zellen, deren Mittelpunkt innen liegt. Weglassen für eine Kontrolle ohne Barrieren."
              },
              "bandwidth": {
                "label": "Bandbreite",
                "description": "Relaxationsgewicht Lambda pro Iteration in (0, 0.25] (Standard 0.2): jede freie Zelle bewegt sich pro Durchlauf um diesen Anteil in Richtung ihres Nachbarschaftsmittels."
              },
              "number_iterations": {
                "label": "Anzahl Iterationen",
                "description": "Anzahl der Jacobi-Relaxationsdurchläufe der Wärmeleitungsgleichung (Standard 100). Mehr Iterationen verbreiten den Einfluss weiter."
              },
              "weight_field": {
                "label": "Gewichtungsfeld",
                "description": "Optionales numerisches Feld mit einer Gewichtung pro Punkt (Standard 1), nur zur Mittelung zusammenfallender Proben verwendet, die in dieselbe Ausgabezelle fallen."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG-Code des Eingabe-KBS überschreiben (z. B. wenn der Layer nicht beschriftet ist). 4326 löst die lokale metrische Projektion aus."
              }
            }
          },
          "dimension_reduction": {
            "name": "Dimensionsreduktion",
            "description": "Hauptkomponentenanalyse über numerische Objektattribute (wie ArcGIS Dimension Reduction): ausgewählte Felder standardisieren, die Korrelations-/Kovarianzmatrix mit einer eigens implementierten Jacobi-Rotation eigenzerlegen und die Komponentenwerte PC1..PCk in die Objekte zurückschreiben, plus einen Bericht zu Eigenwerten/Varianz/Ladungen — das Vektorattribut-Gegenstück zur gebündelten, nur bandbasierten principal_component_analysis.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (oder Tabelle) mit numerischen Attributfeldern."
              },
              "fields": {
                "label": "Felder",
                "description": "Kommagetrennte Liste von mindestens zwei numerischen Feldern, die reduziert werden sollen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorlayer mit angehängten PC-Score-Feldern. Falls weggelassen, im Speicher abgelegt."
              },
              "table": {
                "label": "Tabelle",
                "description": "Optionaler CSV-Pfad für den Komponentenbericht (Eigenwert, erklärte Varianz, kumuliert, Ladungen pro Variable). Wird immer im Ergebnis zurückgegeben."
              },
              "num_components": {
                "label": "Anzahl Komponenten",
                "description": "Anzahl der führenden Komponenten, die behalten werden. Standard: so viele, dass 'min_variance' erreicht wird, sonst alle Felder."
              },
              "min_variance": {
                "label": "Minimale Varianz",
                "description": "Die wenigsten Komponenten behalten, deren kumulierte erklärte Varianz diesen Anteil (0-1) erreicht. Wird ignoriert, wenn 'num_components' gesetzt ist."
              },
              "standardize": {
                "label": "Standardisieren",
                "description": "Jedes Feld vor der PCA standardisieren (Z-Score), damit die Skalen vergleichbar sind — die Korrelationsmatrix analysieren. Standard wahr; falsch analysiert die Kovarianzmatrix."
              }
            }
          },
          "dimensional_moving_statistics": {
            "name": "Dimensionale gleitende Statistik",
            "description": "Lässt ein gleitendes Fenster entlang der Dimension eines Rasterwürfels laufen und schreibt je Eingabeschicht eine geglättete Schicht — der gleitende Mittelwert oder Median an Ort und Stelle, der eine verrauschte Satellitenzeitreihe nutzbar macht (ArcGIS Dimensional Moving Statistics). time_series_smoothing aus Runde 17 ist rein vektorbasiert, die gebündelten Fokalfilter bewegen ein Fenster räumlich innerhalb einer einzelnen Schicht, und aggregate_multidimensional_raster verkürzt den Würfel in Klassen. Enthält einen zirkulären Mittelwert, ohne den die Mittelung von Exposition oder Phase über den Umbruchpunkt hinweg bedeutungslos ist.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Ein Multiband-Raster (jedes Band ist eine Schicht) oder eine kommagetrennte Liste koregistrierter Raster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Multiband-Ausgaberaster mit einem Band pro Eingabeschicht. Falls weggelassen, im Speicher abgelegt."
              },
              "dimension": {
                "label": "Dimension",
                "description": "Name der Dimension, nur im Bericht verwendet (Standard 'slice')."
              },
              "backward_window": {
                "label": "Rückwärtsfenster",
                "description": "Einzubeziehende Schichten vor der aktuellen (Standard 1)."
              },
              "forward_window": {
                "label": "Vorwärtsfenster",
                "description": "Einzubeziehende Schichten nach der aktuellen (Standard 1)."
              },
              "statistic": {
                "label": "Statistik",
                "description": "'mean' (Standard), 'circular_mean', 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'std' oder 'sum'."
              },
              "percentile_value": {
                "label": "Perzentilwert",
                "description": "Perzentil in [0, 100] für die Statistik 'percentile' (Standard 50)."
              },
              "period": {
                "label": "Periode",
                "description": "Umlaufperiode für 'circular_mean' (Standard 360, d. h. Grad; für Bogenmaß 6.283185307179586 verwenden)."
              },
              "min_valid": {
                "label": "Minimale gültige",
                "description": "Minimale Anzahl an Nicht-NoData-Beobachtungen im Fenster, bevor ein Wert geschrieben wird (Standard 1)."
              },
              "nodata_handling": {
                "label": "NoData-Behandlung",
                "description": "'data' (Standard; NoData überspringen und aus dem Rest berechnen), 'nodata' (jedes NoData im Fenster macht die Ausgabe zu NoData) oder 'fill_nodata' (auch dort einen Wert schreiben, wo die mittlere Schicht selbst NoData ist)."
              }
            }
          },
          "directional_distribution": {
            "name": "Richtungsverteilung",
            "description": "Deskriptive Statistiken der geografischen Verteilung: Mittelpunkt, Medianzentrum, zentrales Objekt, Standarddistanz (Kreis) und Standardabweichungsellipse — mit optionaler Gewichtung und Gruppierung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (Punkte bevorzugt; andere Geometrien verwenden den Mittelwert ihrer Stützpunkte als repräsentativen Punkt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "statistic": {
                "label": "Statistik",
                "description": "Zu berechnendes Maß: 'mean_center', 'median_center', 'central_feature', 'standard_distance' oder 'standard_deviational_ellipse'."
              },
              "weight_field": {
                "label": "Gewichtungsfeld",
                "description": "Optionales numerisches Feld zur Gewichtung jedes Objekts (z. B. Bevölkerung). Standard: jedes Objekt mit 1 gewichtet."
              },
              "case_field": {
                "label": "Fallfeld",
                "description": "Optionales Feld zur Gruppierung der Objekte; pro eindeutigem Wert wird ein Ausgabeobjekt erzeugt."
              },
              "n_std": {
                "label": "Anzahl Standardabweichungen",
                "description": "Standardabweichungs-Multiplikator (1, 2 oder 3) für den Standarddistanzkreis und die Abweichungsellipse. Standard 1."
              }
            }
          },
          "directional_trend": {
            "name": "Richtungstrend",
            "description": "Stichprobenpunkte auf ein gewähltes Azimut projizieren und ein Polynom 1. bis 3. Ordnung von Wert gegen Distanz anpassen, um einen globalen/anisotropen Trend vor der Variographie zu erkennen (wie ArcGIS Directional Trend). 'determine' durchläuft Azimute nach der Richtung maximal erklärter Varianz.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (Punkte bevorzugt; andere Geometrien verwenden den Mittelwert ihrer Stützpunkte als repräsentativen Punkt)."
              },
              "field": {
                "label": "Feld",
                "description": "Numerisches Attributfeld, dessen Trend analysiert werden soll."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Kompasspeilung in Grad (0 = Nord, im Uhrzeigersinn), auf die projiziert wird, oder 'determine' (Standard), um 0-179° nach der Peilung mit maximal erklärter Varianz abzusuchen."
              },
              "order": {
                "label": "Ordnung",
                "description": "Polynomordnung 1, 2 oder 3 (Standard 2)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber aus der Erweiterung). Falls weggelassen, im Speicher abgelegt. Punkte tragen proj_dist, value, fitted und residual."
              }
            }
          },
          "directional_variogram": {
            "name": "Richtungsvariogrammanalyse",
            "description": "Berechnet Variogramme in mehreren Richtungen, um räumliche Anisotropie zu erkennen. Zeigt richtungsabhängige Kontinuitätsmuster, die für realistisches Kriging unerlässlich sind.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Punkt-Layer mit Messwerten"
              },
              "field": {
                "label": "Feld",
                "description": "Feld mit Messwerten"
              },
              "directions": {
                "label": "Richtungen",
                "description": "Kommagetrennte Liste der zu analysierenden Azimute (0-180°)"
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Richtungstoleranz in Grad (Standard 22.5)"
              },
              "max_distance": {
                "label": "Maximale Distanz",
                "description": "Maximale zu berechnende Lag-Distanz (Standard 1000)"
              },
              "bin_size": {
                "label": "Bin-Größe",
                "description": "Größe der Lag-Bins (Standard 50)"
              },
              "output_json": {
                "label": "JSON-Ausgabe",
                "description": "Ausgabedateipfad für die Ergebnisse des Richtungsvariogramms"
              },
              "output_html": {
                "label": "HTML-Ausgabe",
                "description": "Optionaler Ausgabepfad für die HTML-Rosendiagramm-Visualisierung"
              }
            }
          },
          "disperse_markers": {
            "name": "Marker verteilen",
            "description": "Zusammenfallende oder überlappende Punktsymbole auf einen Mindestabstand von Mitte zu Mitte auseinanderziehen (Muster: erweitert/Ring/Kreuz/Quadrat), damit gestapelte Punkte einzeln sichtbar bleiben, wie ArcGIS Disperse Markers.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "min_spacing": {
                "label": "Minimaler Abstand",
                "description": "Minimaler Mittelpunktsabstand, der zwischen geclusterten Punkten erzwungen wird, in Karteneinheiten."
              },
              "pattern": {
                "label": "Muster",
                "description": "'expanded' (Standard, konzentrische Ringe + lokale Abstoßung), 'ring' (einzelner Kreis), 'cross' (vier Arme) oder 'square' (Gitter)."
              },
              "seed": {
                "label": "Seed",
                "description": "Ganzzahliger Seed für deterministische Entscheidungen bei Gleichstand, wenn Mitglieder anfangs exakt zusammenfallen (Standard 0)."
              }
            }
          },
          "dissolve_route_events": {
            "name": "Routenereignisse auflösen",
            "description": "Routenereignisse, die sich entlang derselben Route berühren oder überlappen, zu einzelnen Messwertspannen zusammenführen, entweder nur bei übereinstimmenden Zusammenführungsfeldern ('dissolve') oder durch Verketten abweichender Werte ('concatenate'). Wie ArcGIS Dissolve Route Events.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Ereignistabelle (Linienereignisse mit Von-/Bis-Messwerten)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad der Ausgabe-Ereignistabelle. Falls weggelassen, im Speicher abgelegt."
              },
              "route_id_field": {
                "label": "Routen-ID-Feld",
                "description": "Feld mit dem Routenbezeichner."
              },
              "from_measure_field": {
                "label": "Feld Von-Messwert",
                "description": "Feld mit dem Von-Messwert jedes Ereignisses."
              },
              "to_measure_field": {
                "label": "Feld Bis-Messwert",
                "description": "Feld mit dem Bis-Messwert jedes Ereignisses. Für Punktereignisse dasselbe Feld wie 'from_measure_field' verwenden."
              },
              "dissolve_fields": {
                "label": "Zusammenführungsfelder",
                "description": "Komma-/Semikolon-getrennte Feldname(n), die übereinstimmen müssen, damit zwei Abschnitte zusammengeführt werden (oder deren Werte verkettet werden)."
              },
              "mode": {
                "label": "Modus",
                "description": "'dissolve' (Standard) oder 'concatenate'."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Messwertlücke, unterhalb derer zwei Abschnitte als benachbart gelten (Standard 0)."
              },
              "separator": {
                "label": "Trennzeichen",
                "description": "Trennzeichen zum Verbinden der Werte im Modus 'concatenate' (Standard ', ')."
              }
            }
          },
          "edgematch_features": {
            "name": "Objekte an Kanten abgleichen",
            "description": "Liniendatensätze über eine Kachel-/Blattgrenze hinweg verbinden (wie ArcGIS Generate Edgematch Links + Edgematch Features): lose Endpunkte innerhalb einer Toleranz eins-zu-eins zuordnen und abgleichen (Mittelpunkt oder Fangen), mit optionalem Layer der Zuordnungsverbindungen. Die objektübergreifende Eins-zu-eins-Zuordnung, die dem blinden snap_endnodes fehlt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Linien-Layer (z. B. zwei zusammengeführte benachbarte Kacheln) für den Kantenabgleich."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Angepasster Ausgabe-Linien-Layer. Falls weggelassen, im Speicher abgelegt."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Maximale Distanz zwischen losen Endpunkten, um sie zuzuordnen."
              },
              "method": {
                "label": "Methode",
                "description": "'midpoint' (beide Enden zu ihrem Mittelpunkt verschieben; Standard) oder 'move_endpoint' (das zweite auf das erste einrasten)."
              },
              "match_fields": {
                "label": "Zuordnungsfelder",
                "description": "Optionale kommagetrennte Felder; ein zugeordnetes Paar muss in diesen übereinstimmen (disambiguiert Kandidaten)."
              },
              "links": {
                "label": "Verbindungen",
                "description": "Optionaler Ausgabe-Linien-Layer der Zuordnungsverbindungen (zur Qualitätssicherung)."
              }
            }
          },
          "eighty_twenty_analysis": {
            "name": "Achtzig-Zwanzig-Analyse",
            "description": "Vorfallspunkte auf gewichtete Standorte fangen und die Pareto-Konzentration berechnen ('X % der Vorfälle ereignen sich an Y % der Standorte'); jeder Standort wird mit Rang, kumuliertem Vorfallsanteil und Kopf-/Schwanzband versehen, wie ArcGIS Eighty Twenty Analysis.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vorfallpunkt-Vektorlayer (Point oder MultiPoint)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "cluster_tolerance": {
                "label": "Cluster-Toleranz",
                "description": "Distanz, innerhalb derer Vorfälle zu einem Ort zusammengefasst werden (Karteneinheiten, Standard 0 = nur exakt zusammenfallende Punkte)."
              },
              "weight_field": {
                "label": "Gewichtungsfeld",
                "description": "Optionales numerisches Feld mit der Gewichtung jedes Vorfalls (Standard: jeder Vorfall zählt 1)."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Konzentrationsschwellenwert in Prozent, der den Pareto-'Kopf' definiert (Standard 80)."
              }
            }
          },
          "eliminate_polygon_part": {
            "name": "Polygonteil eliminieren",
            "description": "Innere Löcher (und optional kleine äußere Teile) von Polygonen entfernen, deren Fläche unter einem absoluten oder prozentualen Flächenschwellenwert liegt, unter Beibehaltung der Attribute.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Polygonvektordatei, Format wird automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "condition": {
                "label": "Bedingung",
                "description": "Größentest: 'AREA' (Standard) vergleicht mit 'min_area'; 'PERCENT' vergleicht die Teil-/Lochfläche als Prozentsatz der gesamten Außenfläche des Objekts mit 'percentage'."
              },
              "min_area": {
                "label": "Mindestfläche",
                "description": "AREA-Bedingung: Teile/Löcher entfernen, deren Fläche (in KBS-Einheiten zum Quadrat) unter diesem Wert liegt. Erforderlich bei condition = AREA."
              },
              "percentage": {
                "label": "Prozentsatz",
                "description": "PERCENT-Bedingung: Teile/Löcher entfernen, deren Fläche als Prozentsatz (0-100) der gesamten Außenfläche des Objekts unter diesem Wert liegt. Erforderlich bei condition = PERCENT."
              },
              "part_option": {
                "label": "Teiloption",
                "description": "Was zur Entfernung infrage kommt: 'CONTAINED_ONLY' (Standard) entfernt nur innere Ringe (Löcher); 'ANY' entfernt auch kleine äußere Teile mit Ausnahme des einzelnen größten Teils."
              }
            }
          },
          "eliminate_polygons": {
            "name": "Polygone eliminieren",
            "description": "Splitterpolygone (nach maximaler Fläche und/oder Attributabfrage) mit einem Nachbarpolygon zusammenführen, ausgewählt nach längster gemeinsamer Grenze oder größter Fläche.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Polygonvektordatei, Format wird automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "max_area": {
                "label": "Maximale Fläche",
                "description": "Polygone auswählen, deren Fläche (in KBS-Einheiten zum Quadrat) höchstens diesen Wert hat. Kann mit 'where' kombiniert werden (beide müssen zutreffen)."
              },
              "where": {
                "label": "Where-Klausel",
                "description": "Polygone auswählen, die einer einfachen Attributbedingung 'FIELD OP VALUE' entsprechen, wobei OP eines von = != < <= > >= ist (z. B. \"class = 0\"). Kann mit 'max_area' kombiniert werden."
              },
              "exclude": {
                "label": "Ausschließen",
                "description": "Objekte, die dieser Bedingung entsprechen (gleiche 'FIELD OP VALUE'-Syntax), vor der Eliminierung schützen; sie bleiben erhalten und können Zusammenführungen aufnehmen."
              },
              "strategy": {
                "label": "Strategie",
                "description": "In welchen Nachbarn ein Splitterpolygon zusammengeführt wird: 'longest_border' (Standard) oder 'largest_area'."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Maximaler senkrechter Abstand (in KBS-Einheiten), damit zwei Grenzsegmente als gemeinsame Kante gelten. Standard 1e-6."
              }
            }
          },
          "emerging_hot_spot_analysis": {
            "name": "Analyse aufkommender Hotspots",
            "description": "Raum-Zeit-Hotspot-Trends auf einem H3-Raum-Zeit-Würfel: Punkte mit Zeitstempel in H3-Zellen x Zeitschritte einteilen, Getis-Ord Gi* je Klasse berechnen und jede Zelle per Mann-Kendall-Trendtest klassifizieren (neuer/zunehmender/anhaltender/abnehmender/... Hot- oder Coldspot), wie ArcGIS Emerging Hot Spot Analysis.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer (geografisch Lon/Lat, EPSG:4326). Andere Geometrien verwenden den Mittelwert ihrer Stützpunkte als repräsentativen Punkt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Erweiterung). Ein H3-Polygon pro Zelle. Falls weggelassen, im Speicher abgelegt."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Feld mit der Zeit jedes Punkts: ein numerisches Feld (eigene Einheiten) oder eine ISO-8601-Datums-/Datum-Zeit-Zeichenkette."
              },
              "time_step": {
                "label": "Zeitschritt",
                "description": "Breite eines Zeitschritts: eine einfache Zahl (numerisches time_field) oder eine Dauer wie '1w', '7d', '12h', '1M' für ein Datumsfeld. Standard '1w'."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Optionales numerisches Feld, das pro Bin summiert wird. Standard: Anzahl der Punkte pro Bin."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "H3-Auflösung 0 (gröbste) bis 15 (feinste); Standard 7 (~5 km² Zellen)."
              },
              "neighborhood": {
                "label": "Nachbarschaft",
                "description": "Räumlicher Nachbarschaftsradius in H3-k-Ringen (Standard 1)."
              },
              "time_window": {
                "label": "Zeitfenster",
                "description": "Zeitlicher Nachbarschaftsradius in Zeitschritten (Standard 1)."
              }
            }
          },
          "empirical_bayesian_kriging": {
            "name": "Empirisches Bayes-Kriging",
            "description": "Ein Punktfeld über viele überlappende lokale Teilmengen interpolieren, die jeweils ein eigenes Semivariogramm anpassen, dessen Unsicherheit durch Simulation gestörter Semivariogramme aus einem geseedeten Zufallsgenerator erfasst wird; anschließend werden die Kriging-Vorhersagen/-Varianzen der Teilmengen distanzabhängig gemischt (wie ArcGIS Empirical Bayesian Kriging) — im Unterschied zum gebündelten Ordinary-/Universal-/Simple-/Co-Kriging, die alle ein einziges manuell akzeptiertes globales (oder einzelnes gleitendes) Semivariogramm anpassen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punkt-Layer."
              },
              "field": {
                "label": "Feld",
                "description": "Numerisches Feld des Eingabe-Layers, das interpoliert werden soll."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vorhersageraster. Falls weggelassen, im Speicher abgelegt."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Zellengröße der Ausgabe in KBS-Einheiten. Standard: so bemessen, dass die längere Gitterachse ~150 Zellen umfasst."
              },
              "subset_size": {
                "label": "Teilmengengröße",
                "description": "Zielanzahl der Punkte pro lokaler Teilmenge (Standard 40, mindestens 4)."
              },
              "overlap": {
                "label": "Überlappung",
                "description": "Anteil der Breite/Höhe einer Teilmengenkachel, um den benachbarte Kacheln überlappen (Standard 0.25)."
              },
              "simulations": {
                "label": "Simulationen",
                "description": "Anzahl der pro Teilmenge gezogenen simulierten Semivariogramme zur Darstellung der Modellunsicherheit (Standard 5, max. 50)."
              },
              "semivariogram": {
                "label": "Semivariogramm",
                "description": "Semivariogramm-Modellfamilie: 'power' (Standard), 'linear' oder 'exponential'."
              },
              "transform": {
                "label": "Transformation",
                "description": "Datentransformation vor dem Kriging: 'none' (Standard) oder 'log_empirical' (natürlicher Logarithmus; erfordert überall Feld > 0)."
              },
              "error_output": {
                "label": "Fehlerausgabe",
                "description": "Optionales Ausgaberaster des Standardfehlers der Vorhersage."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed für den deterministischen Zufallsgenerator der Semivariogramm-Simulation (Standard 42)."
              }
            }
          },
          "enclose_multipatch": {
            "name": "Multipatch schließen",
            "description": "Wandelt offene 3D-Dreiecksnetzoberflächen in geschlossene, wasserdichte Körper um, indem ihre Randschleifen verschlossen werden, sodass sie gültige Eingaben für volumetrische Analysen werden (ArcGIS Enclose Multipatch). is_closed_3d kann ein offenes Netz diagnostizieren, aber nichts konnte es reparieren, und union_3d / intersect_3d / difference_3d / inside_3d lehnen offene Netze ab oder melden sie falsch — was der Normalzustand extrudierter Grundrisse, Geländeschalen und importierter Gebäudeoberflächen ist.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "3D-Oberflächenobjekte (Dreiecksnetz-MultiPolygone mit Z)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Geschlossene Ausgabe-Körperobjekte. Falls weggelassen, im Speicher abgelegt."
              },
              "drop_failed": {
                "label": "Fehlgeschlagene verwerfen",
                "description": "Objekte weglassen, die nicht wasserdicht gemacht werden konnten (Standard falsch: sie werden mit CAP_FAILED = true ausgegeben, damit der Fehler sichtbar statt stumm ist)."
              }
            }
          },
          "enforce_river_monotonicity": {
            "name": "Flussmonotonie erzwingen",
            "description": "Ein DEM so einschneiden, dass die Höhen entlang kartierter Flusspolylinien flussabwärts monoton abnehmen — ein Hydro-Enforcement-Schritt für hydraulische und Hochwassermodellierung, wie ArcGIS Enforce River Monotonicity. Anders als fill_depressions/fill_burn (die geschlossene Senken entfernen) erzwingt dies ein monotones Profil entlang eines bekannten Flussvektors.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Flusspolylinien-Layer (LineString / MultiLineString) im KBS des DEM."
              },
              "surface": {
                "label": "Oberfläche",
                "description": "Zu korrigierendes Höhenraster (DEM)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des korrigierten Ausgabe-DEM (Format aus der Erweiterung). Falls weggelassen, im Speicher abgelegt."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Minimaler Höhenabfall, der pro verdichtetem Schritt erzwungen wird, in Z-Einheiten (Standard 0 = nicht ansteigend). Positive Werte erzwingen ein streng abfallendes Profil."
              },
              "sample_distance": {
                "label": "Abtastdistanz",
                "description": "Verdichtungsintervall in KBS-Einheiten entlang jeder Flusslinie. Standard: die Rasterzellengröße (≈ eine Probe pro Zelle)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes DEM-Band, das korrigiert werden soll (Standard 1)."
              }
            }
          },
          "estimate_time_to_event": {
            "name": "Zeit bis zum Ereignis schätzen",
            "description": "Die Zeit bis zu einem Ereignis über eine Kaplan-Meier-Überlebenskurve schätzen (wie ArcGIS Estimate Time To Event): aus einem Dauerfeld und einem Ereignis-/Zensierungsfeld die Überlebenswahrscheinlichkeit jedes Objekts und die mediane Zeit bis zum Ereignis seiner Schicht berechnen, optional geschichtet nach einem kategorialen Feld.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punkt- oder Polygon-Layer mit einem Dauerfeld und einem Ereignis-/Zensierungsfeld."
              },
              "age_field": {
                "label": "Altersfeld",
                "description": "Feld mit der beobachteten Dauer jedes Objekts (Zeit bis zum Ereignis oder bis zur Zensierung), eine nicht negative Zahl."
              },
              "event_field": {
                "label": "Ereignisfeld",
                "description": "Feld, das angibt, ob das Ereignis eingetreten ist (wahr: 1/true) oder die Beobachtung zensiert wurde (falsch: 0/false)."
              },
              "stratify_field": {
                "label": "Schichtungsfeld",
                "description": "Optionales kategoriales Feld, um pro Gruppe eine separate Überlebenskurve anzupassen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Layer mit hinzugefügten Feldern km_survival, km_median und km_stratum. Falls weggelassen, im Speicher abgelegt."
              }
            }
          },
          "estimate_variogram": {
            "name": "Variogramm schätzen",
            "description": "Berechnet ein empirisches Semivariogramm aus Punktbeobachtungen, um die räumliche Korrelationsstruktur zu charakterisieren. Wesentlicher erster Schritt im geostatistischen Workflow.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorpunkt-Layer mit Werten"
              },
              "field": {
                "label": "Feld",
                "description": "Feld mit Messwerten"
              },
              "lag_distance": {
                "label": "Lag-Distanz",
                "description": "Lag-Bin-Größe in Karteneinheiten (Standard: 100.0)"
              },
              "lag_tolerance": {
                "label": "Lag-Toleranz",
                "description": "Toleranz für die Lag-Einteilung (Standard: 50.0)"
              },
              "max_lag_count": {
                "label": "Maximale Lag-Anzahl",
                "description": "Maximale Anzahl beizubehaltender Lags (Standard: 20)"
              }
            }
          },
          "euclidean_direction": {
            "name": "Euklidische Richtung",
            "description": "Berechnet das Kompassazimut von jeder Zelle zu ihrer nächsten Quellzelle, plus optionale Distanz- und Rückrichtungsraster (ArcGIS Euclidean Direction). Vervollständigt die gebündelte euklidische Familie, die euclidean_distance (wie weit) und euclidean_allocation (welche Quelle), aber nicht die Peilung liefert. Verwendet eine exakte Distanztransformation, die die Koordinaten der nächsten Quelle mitführt; mit einem Barriereraster wird stattdessen um Hindernisse herum geroutet.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Quellraster: Zellen, die weder NoData noch null sind, sind Quellen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad des Ausgabe-Richtungsrasters (Grad im Uhrzeigersinn von Nord). Falls weggelassen, im Speicher abgelegt."
              },
              "output_distance": {
                "label": "Distanz ausgeben",
                "description": "Optionaler Pfad für das begleitende Distanzraster."
              },
              "output_back_direction": {
                "label": "Rückrichtung ausgeben",
                "description": "Optionaler Pfad für das Rückrichtungsraster: die Peilung, in der man von dieser Zelle zurück zur nächsten Quelle geht. Entspricht dem Richtungsraster, wenn keine Barrieren angegeben sind; mit Barrieren ist es der erste Schritt des Rückwegs."
              },
              "barriers": {
                "label": "Barrieren",
                "description": "Optionales Barrierenraster; Zellen, die nicht null und nicht NoData sind, blockieren geradlinige Pfade und erzwingen eine Umgehung."
              },
              "max_distance": {
                "label": "Maximale Distanz",
                "description": "Zellen, die weiter als dieser Wert von jeder Quelle entfernt sind, werden als NoData geschrieben."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band des Quellrasters, das gelesen wird (Standard 1)."
              }
            }
          },
          "evaluate_bin_sizes": {
            "name": "Klassenbreiten bewerten",
            "description": "Kandidaten für Aggregationsklassengrößen durchlaufen und Diagnosen ausgeben, die zeigen, welche Größe die Struktur am besten sichtbar macht, wie ArcGIS Evaluate Bin Sizes.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zu aggregierende Punktobjekte."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Diagnosetabelle. Falls weggelassen, im Speicher abgelegt."
              },
              "bin_shape": {
                "label": "Bin-Form",
                "description": "hexagon (Standard; Näherung mit Zeilenversatz, siehe Dokumentation) | square."
              },
              "sizes": {
                "label": "Größen",
                "description": "Kommagetrennte Kandidaten für Bin-Größen (Karteneinheiten). Falls weggelassen, wird aus der mittleren Nächster-Nachbar-Distanz eine geometrische Reihe erzeugt."
              },
              "steps": {
                "label": "Schritte",
                "description": "Anzahl der Kandidaten in der erzeugten Reihe (Standard 8, max. 64)."
              },
              "analysis_field": {
                "label": "Analysefeld",
                "description": "Optionales numerisches Feld, das pro Bin summiert wird, statt Punkte zu zählen."
              }
            }
          },
          "evaluate_variable_influence": {
            "name": "Variableneinfluss bewerten",
            "description": "Berichtet Permutationswichtigkeit und partielle Abhängigkeitskurven für ein aus einer Tabelle angepasstes Forest-Modell und beantwortet damit, welche erklärenden Variablen ein Modell tatsächlich nutzt und welche Form jeder Effekt hat (ArcGIS Evaluate Variable Influence). Der Katalog kann Modelle anpassen — generalized_linear_regression, exploratory_regression, geographically_weighted_regression, forest_based_forecast, die Random Forests von Whitebox — aber keines berichtet eines der beiden Maße. ArcGIS liest eine trainierte .ssm-Modelldatei; dieser Stack hat kein portables Modellformat, daher passt das Werkzeug seinen eigenen Forest an und erklärt ihn anschließend. Vollständig deterministisch: schrittweises Bagging und eine feste Permutation, kein Zufallsgenerator.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Layer oder Tabelle mit den Trainingsbeobachtungen."
              },
              "dependent_field": {
                "label": "Abhängiges Feld",
                "description": "Vorhergesagtes Feld."
              },
              "explanatory_fields": {
                "label": "Erklärende Felder",
                "description": "Kommagetrennte numerische Felder, die ausgewertet werden sollen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabetabelle der Wichtigkeit pro Variable. Falls weggelassen, im Speicher abgelegt."
              },
              "output_partial_dependence": {
                "label": "Partielle Abhängigkeit ausgeben",
                "description": "Ausgabetabelle der partiellen Abhängigkeitskurven, eine Zeile pro Variable und Gitterpunkt. Wird immer erzeugt; ohne Pfadangabe im Speicher abgelegt."
              },
              "model_type": {
                "label": "Modelltyp",
                "description": "'regression' (Standard) für ein kontinuierliches Ziel oder 'classification' für ein kategoriales."
              },
              "number_of_trees": {
                "label": "Anzahl der Bäume",
                "description": "Anzahl der Bäume im Ensemble (Standard 50)."
              },
              "max_depth": {
                "label": "Maximale Tiefe",
                "description": "Maximale Baumtiefe (Standard 8)."
              },
              "min_samples_leaf": {
                "label": "Minimale Stichproben pro Blatt",
                "description": "Mindestanzahl der Beobachtungen, die ein Blatt enthalten darf (Standard 3)."
              },
              "grid_points": {
                "label": "Gitterpunkte",
                "description": "Punkte pro partieller Abhängigkeitskurve (Standard 12)."
              },
              "permutation_repeats": {
                "label": "Permutationswiederholungen",
                "description": "Anzahl der pro Variable gemittelten verschiedenen Permutationen (Standard 3). Mehr ist stabiler und langsamer."
              }
            }
          },
          "excel_to_table": {
            "name": "Excel zu Tabelle",
            "description": "Ein Arbeitsblatt aus einer .xlsx-/.xls-/.xlsb-/.ods-Arbeitsmappe in eine Attributtabelle einlesen, wobei numerische und Textspalten abgeleitet werden.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Excel-/OpenDocument-Arbeitsmappe (.xlsx, .xls, .xlsb oder .ods)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabetabellenpfad (Treiber aus der Erweiterung; GeoParquet .parquet empfohlen). Falls weggelassen, im Speicher abgelegt."
              },
              "sheet": {
                "label": "Tabellenblatt",
                "description": "Zu lesendes Arbeitsblatt, nach Name oder 0-basiertem Index. Standard: das erste Blatt."
              },
              "cell_range": {
                "label": "Zellbereich",
                "description": "Optionaler zu importierender Bereich in A1-Notation, z. B. 'B2:E40'. Standard: der gesamte genutzte Bereich des Blatts."
              },
              "field_names_row": {
                "label": "Zeile der Feldnamen",
                "description": "1-basierte Zeile innerhalb des gewählten Bereichs mit den Spaltennamen (Standard 1). Zeilen darüber werden übersprungen; 0 bedeutet keine Kopfzeile (Field1, Field2, ... automatisch erzeugen)."
              }
            }
          },
          "expand_shrink": {
            "name": "Erweitern / verkleinern",
            "description": "Ausgewählte Klassen eines kategorialen Rasters um eine Anzahl von Zellen erweitern (ausdehnen) oder schrumpfen, während andere Klassen unverändert bleiben — die Standardbereinigung klassifizierter Landbedeckung vor der Polygonisierung, wie ArcGIS Expand / Shrink.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Kategoriales (ganzzahliges) Eingaberaster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Rasterpfad. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "classes": {
                "label": "Klassen",
                "description": "Kommagetrennte(r) Klassenwert(e), die erweitert oder geschrumpft werden sollen."
              },
              "cells": {
                "label": "Zellen",
                "description": "Anzahl der Zellen, um die erweitert oder geschrumpft wird (>= 1)."
              },
              "mode": {
                "label": "Modus",
                "description": "'expand' (die gewählten Klassen vergrößern; Standard) oder 'shrink' (sie erodieren)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das gelesen wird (Standard 1)."
              }
            }
          },
          "exploratory_interpolation": {
            "name": "Explorative Interpolation",
            "description": "Mehrere Interpolationsmethoden ausführen (IDW, nächster Nachbar, Trendflächen erster/zweiter Ordnung), jede per Leave-one-out-Kreuzvalidierung prüfen und nach Vorhersagegenauigkeit (RMSE/MAE) oder Verzerrung (ME) ordnen — wie ArcGIS Exploratory Interpolation. Gibt eine nach Methoden geordnete Vergleichstabelle aus und kann das Vorhersageraster der besten Methode ausgeben. Deckt eine eigenständige Kreuzvalidierungsanfrage mit ab.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer mit Messungen."
              },
              "field": {
                "label": "Feld",
                "description": "Numerisches Feld der Punkte mit dem zu interpolierenden Wert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vergleichstabelle mit Rangfolge — eine CSV (Erweiterung .csv) oder eine geometrielose Vektortabelle. Falls weggelassen, im Speicher abgelegt."
              },
              "methods": {
                "label": "Methoden",
                "description": "Komma-/Pipe-getrennte Teilmenge der zu vergleichenden Methoden: 'idw', 'nearest', 'trend1', 'trend2'. Standard: alle vier."
              },
              "criterion": {
                "label": "Kriterium",
                "description": "Rangkriterium: 'rmse' (Standard, geringster Fehler), 'mae' (geringster absoluter Fehler) oder 'me' (geringste Verzerrung, kleinster |mittlerer Fehler|)."
              },
              "power": {
                "label": "Potenz",
                "description": "IDW-Distanzabnahme-Exponent (Standard 2)."
              },
              "output_raster": {
                "label": "Ausgaberaster",
                "description": "Optionales Ausgabe-GeoTIFF: die bestplatzierte Methode, an alle Proben angepasst und über ein Gitter ausgewertet, das die Probenausdehnung überspannt."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Zellengröße des Gewinnerrasters in KBS-Einheiten (Grad bei einem geografischen KBS). Standard: so bemessen, dass die längere Achse ~256 Zellen umfasst."
              }
            }
          },
          "exploratory_regression": {
            "name": "Explorative Regression",
            "description": "OLS-Modelle über jede Kombination erklärender Kandidatenfelder aufzählen und jedes anhand von adjustiertem R2, Koeffizientensignifikanz, VIF-Multikollinearität, Jarque-Bera-Residuennormalität und Moran's I der Residuen (räumliche Autokorrelation) prüfen; ausgegeben werden alle Modelle, die geordnete Menge der bestandenen Modelle und eine Signifikanzübersicht je Variable — wie ArcGIS Exploratory Regression.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Objektlayer mit Geometrie (für die Nachbarschaft des Residuen-Moran's I verwendet)."
              },
              "dependent_field": {
                "label": "Abhängiges Feld",
                "description": "Abhängiges numerisches Feld (Antwortvariable)."
              },
              "explanatory_fields": {
                "label": "Erklärende Felder",
                "description": "Kommagetrennte Kandidaten für erklärende numerische Felder, die durchsucht werden sollen."
              },
              "min_vars": {
                "label": "Minimale Variablen",
                "description": "Minimale Anzahl erklärender Variablen pro Kandidatenmodell (Standard 1)."
              },
              "max_vars": {
                "label": "Maximale Variablen",
                "description": "Maximale Anzahl erklärender Variablen pro Kandidatenmodell (Standard: min(Kandidatenanzahl, 6))."
              },
              "max_coef_p": {
                "label": "Maximaler Koeffizienten-p-Wert",
                "description": "Maximal zulässiger p-Wert für jeden erklärenden Koeffizienten (Standard 0.05)."
              },
              "min_adj_r2": {
                "label": "Minimales adjustiertes R²",
                "description": "Minimales adjustiertes R-Quadrat (Standard 0.5)."
              },
              "max_vif": {
                "label": "Maximaler VIF",
                "description": "Maximal zulässiger Varianzinflationsfaktor pro Term (Standard 7.5)."
              },
              "min_jb_p": {
                "label": "Minimaler JB-p-Wert",
                "description": "Minimaler Jarque-Bera-p-Wert für die Normalverteilung der Residuen (Standard 0.1)."
              },
              "min_moran_p": {
                "label": "Minimaler Moran-p-Wert",
                "description": "Minimaler p-Wert für die räumliche Autokorrelation der Residuen (Moran's I); darüber sind die Residuen nicht signifikant geclustert (Standard 0.1)."
              },
              "neighbors": {
                "label": "Nachbarn",
                "description": "Anzahl der nächsten Nachbarn, die die räumlichen Gewichte für den Residuen-Moran's-I-Test definieren (Standard 8)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad der Ausgabe-Berichtstabelle — eine CSV (Erweiterung .csv) oder eine geometrielose Vektortabelle."
              }
            }
          },
          "extract_locations_from_text": {
            "name": "Standorte aus Text extrahieren",
            "description": "Freitext nach eingebetteten Koordinaten durchsuchen — Dezimalgrad (DD), Grad-Dezimalminuten (DDM), Grad-Minuten-Sekunden (DMS) und MGRS-/USNG-Gitterreferenzen — und je Treffer einen WGS84-Punkt ausgeben, wie ArcGIS Extract Locations From Text (Koordinatenzweig). Reine Mustersuche; kein Geocodierungsdienst.",
            "params": {
              "input_text": {
                "label": "Eingabetext",
                "description": "Der zu durchsuchende Freitext. Entweder der Text selbst oder ein Pfad zu einer UTF-8-Textdatei (wird gelesen, wenn der Wert auf eine vorhandene Datei verweist)."
              },
              "notations": {
                "label": "Notationen",
                "description": "Komma-/Leerzeichen-getrennte Teilmenge der zu suchenden Notationen: DD, DDM, DMS, MGRS (USNG ist ein Alias für MGRS). Standard: alle vier."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "extract_ocean_winds": {
            "name": "Ozeanwinde extrahieren",
            "description": "Ermittelt die äquivalent-neutrale Ozeanwindgeschwindigkeit in 10 m Höhe aus kalibrierter SAR-Rückstreuung durch Inversion der geophysikalischen Modellfunktion CMOD5.N (ArcGIS Extract Ocean Winds). Die gesamte ausgelieferte SAR-Kette bleibt im radiometrischen Bereich, und nichts wandelte die Rückstreuung in eine geophysikalische Größe um — was auch eine windschwache Fläche von einem Ölteppich unterscheidet.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Kalibriertes Rückstreuraster (sigma0)."
              },
              "units": {
                "label": "Einheiten",
                "description": "Einheiten von 'input': 'dn', 'amplitude', 'intensity' oder 'db' (Standard 'db')."
              },
              "incidence_angle": {
                "label": "Einfallswinkel",
                "description": "Einfallswinkel pro Zelle in Grad: ein Rasterpfad oder eine konstante Zahl."
              },
              "wind_direction": {
                "label": "Windrichtung",
                "description": "Meteorologische Windrichtung in Grad (die Richtung, AUS der der Wind weht), als Rasterpfad oder Konstante. Eine erforderliche Vorgabe: CMOD hat zwei Unbekannte und eine Beobachtung."
              },
              "look_direction": {
                "label": "Blickrichtung",
                "description": "Radar-Blickazimut in Grad, als Rasterpfad oder Konstante. Wird verwendet, um die Windrichtung in den relativen Winkel umzurechnen, den CMOD erwartet."
              },
              "polarization": {
                "label": "Polarisation",
                "description": "'vv' (Standard, natives CMOD5.N) oder 'hh' (wendet ein näherungsweises Polarisationsverhältnis an)."
              },
              "polarization_ratio_alpha": {
                "label": "Polarisationsverhältnis Alpha",
                "description": "Alpha im HH-zu-VV-Polarisationsverhältnis (Standard 0.6). Nur verwendet, wenn die Polarisation 'hh' ist."
              },
              "water_mask": {
                "label": "Wassermaske",
                "description": "Optionaler Polygon-Layer oder Raster, der die Ausgabe auf Wasser beschränkt; Landrückstreuung ist hier bedeutungslos."
              },
              "max_wind": {
                "label": "Maximaler Wind",
                "description": "Obere Grenze des Inversionsintervalls, m/s (Standard 50)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Windgeschwindigkeitsraster in m/s. Falls weggelassen, im Speicher abgelegt."
              }
            }
          },
          "extract_scanned_features": {
            "name": "Gescannte Objekte extrahieren",
            "description": "Ein binäres (gescanntes/schwellenwertbasiertes) Raster in saubere Linien (Skelettverfolgung) oder Polygone vektorisieren, mit Rauschentfernung, Lochfüllung, Lückenschluss und Vereinfachung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Binäres/klassifiziertes Eingaberaster, das vektorisiert werden soll."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "feature_type": {
                "label": "Objekttyp",
                "description": "'lines' (Standard): skelettieren und Mittellinien verfolgen. 'polygons': gefüllte Regionen vektorisieren."
              },
              "foreground_value": {
                "label": "Vordergrundwert",
                "description": "Zellenwert, der den Vordergrund markiert. Falls weggelassen, sind Zellen >= 'threshold' (oder, falls nicht vorhanden, jede gültige Nicht-Null-Zelle) Vordergrund."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Vordergrund sind Zellen mit Wert >= diesem (verwendet, wenn 'foreground_value' nicht angegeben ist)."
              },
              "noise_size": {
                "label": "Rauschgröße",
                "description": "Vordergrundkomponenten entfernen, die kleiner als diese Anzahl Zellen sind (Standard 4)."
              },
              "hole_size": {
                "label": "Lochgröße",
                "description": "Hintergrundlöcher füllen, die kleiner als diese Anzahl Zellen sind (Standard 4)."
              },
              "gap_distance": {
                "label": "Lückendistanz",
                "description": "Für Linien: Lücken bis zu dieser Distanz (KBS-Einheiten) zwischen nahezu kollinearen Linienendpunkten überbrücken. Standard 0 (aus)."
              },
              "simplify_tolerance": {
                "label": "Vereinfachungstoleranz",
                "description": "Douglas-Peucker-Toleranz (KBS-Einheiten) für die Ausgabegeometrie. Standard ~1 Zelle."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das gelesen wird (Standard 1)."
              }
            }
          },
          "extract_sinks": {
            "name": "Senken extrahieren",
            "description": "Senken (maximale Senkenausdehnung) aus einem DEM extrahieren (lidar filling.py).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-DEM-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad des Senkenrasters. Falls weggelassen, im Speicher abgelegt."
              },
              "min_size": {
                "label": "Mindestgröße",
                "description": "Minimale Anzahl Pixel für eine Senke (behalten, wenn strikt größer; Standard 10)."
              },
              "region_output": {
                "label": "Regionsausgabe",
                "description": "Optionaler Ausgabepfad für das Raster der beschrifteten Regionen."
              },
              "depth_output": {
                "label": "Tiefenausgabe",
                "description": "Optionaler Ausgabepfad für das Fülltiefenraster."
              },
              "filled_output": {
                "label": "Gefüllte Ausgabe",
                "description": "Optionaler Ausgabepfad für das DEM mit gefüllten Senken."
              },
              "csv_output": {
                "label": "CSV-Ausgabe",
                "description": "Optionaler Ausgabepfad für die Attribut-CSV pro Region."
              },
              "vector_output": {
                "label": "Vektorausgabe",
                "description": "Optionaler Ausgabepfad für Regionspolygone als GeoJSON (Attribute verknüpft)."
              },
              "flat_increment": {
                "label": "Ebenen-Inkrement",
                "description": "Beim Füllen hinzugefügtes Flachbereich-Inkrement zur Erzwingung der Entwässerung (Standard 0)."
              }
            }
          },
          "extract_spectra_from_image": {
            "name": "Spektren aus dem Bild extrahieren",
            "description": "Leitet aus einem Multiband-Bild und Trainingsregionen eine Spektralbibliothek ab, ein Spektrum je Klasse, im CSV-Layout, das spectral_library_matching liest (ArcGIS Extract Spectra From Image). spectral_library_matching, spectral_angle_mapper und matched_filter_target_detection verwenden alle eine Bibliothek, und nichts erzeugte eine, sodass die Spektralsuite nur mit bereits veröffentlichten Bibliotheken nutzbar war.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Multiband-Bild."
              },
              "training_features": {
                "label": "Trainingsobjekte",
                "description": "Polygon- oder Punkt-Layer, der jede Klasse bzw. jedes Ziel abgrenzt."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Attribut mit der Klassenbezeichnung. Objekte mit gleicher Bezeichnung werden zu einem Spektrum zusammengefasst."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad der Ausgabe-Spektralbibliothek als CSV ('name,b1,b2,...' pro Klasse), bereit für 'library_csv' von spectral_library_matching."
              },
              "statistic": {
                "label": "Statistik",
                "description": "Reduktion über die abgedeckten Zellen: 'mean' (Standard), 'median', 'max', 'min'."
              },
              "trim_percent": {
                "label": "Trimmprozent",
                "description": "Prozentsatz, der vor der Reduktion pro Band von jedem Ende verworfen wird, um gemischte Randpixel zu unterdrücken (Standard 0, max. 49)."
              },
              "min_cells": {
                "label": "Minimale Zellen",
                "description": "Klassen, die weniger Zellen als diesen Wert abdecken, werden gemeldet und übersprungen, statt ein Ein-Pixel-'Spektrum' auszugeben (Standard 1)."
              },
              "wavelengths": {
                "label": "Wellenlängen",
                "description": "Optionale kommagetrennte Wellenlängen pro Band, als Kommentarkopfzeile in der Bibliothek und in output_stats festgehalten."
              },
              "output_stats": {
                "label": "Statistiken ausgeben",
                "description": "Optionale CSV-Datei, die Standardabweichung und Zellenanzahl pro Klasse und Band aufnimmt. Wird getrennt gehalten, damit die Bibliothek parsebar bleibt."
              }
            }
          },
          "extract_water_sar": {
            "name": "Wasser extrahieren (SAR)",
            "description": "Grenzt offenes Wasser und Überflutungsausdehnung aus SAR-Rückstreuung mit einem szenenbezogenen Otsu-Schwellenwert in Dezibel ab, plus optionale Filter für DEM-Neigung und Höhe über dem Minimum, die Radarschatten und trockene dunkle Oberflächen verwerfen (ArcGIS Extract Water). Keine der Registrierungen kann dies aus Radar: NDWI/MNDWI von spectral_index benötigen Reflektanzbänder in Grün/NIR/SWIR, die ein SAR nicht hat, depth_to_water modelliert aus dem Gelände, wo Wasser sein sollte, statt es zu beobachten, und ein manuell gesetzter raster_calculator-Schwellenwert ist nicht zwischen Szenen übertragbar, weil die Wasser-/Landtrennung mit Wind und Einfallswinkel wandert.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "SAR-Rückstreuungsraster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Wasserpolygon-Layer. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "output_raster": {
                "label": "Ausgaberaster",
                "description": "Binäre Wassermaske als Ausgabe (1 Wasser, 0 Land). Wird immer erzeugt; im Speicher abgelegt, wenn kein Pfad angegeben ist."
              },
              "dem": {
                "label": "DEM",
                "description": "Optionales DEM, koregistriert mit der Eingabe, das die Neigungs- und Höhenfilter ermöglicht."
              },
              "threshold_db": {
                "label": "Schwellenwert (dB)",
                "description": "Fester Schwellenwert in dB; Zellen auf oder unter diesem Wert sind Wasser. Überschreibt den automatischen Otsu-Schwellenwert."
              },
              "min_area": {
                "label": "Mindestfläche",
                "description": "Wasserflächen verwerfen, die kleiner als diese Fläche in quadrierten Karteneinheiten sind."
              },
              "max_slope": {
                "label": "Maximale Neigung",
                "description": "Mit einem DEM wird Wasser auf Gelände verworfen, das steiler als diese Gradzahl ist (Standard 5). Stehendes Wasser kann keinen steilen Hang einnehmen, aber Radarschatten ist dort genauso dunkel."
              },
              "max_height_above_min": {
                "label": "Maximale Höhe über Minimum",
                "description": "Mit einem DEM werden Kandidatenzellen verworfen, die mehr als diese Anzahl Z-Einheiten über der niedrigsten DEM-Zelle ihrer eigenen zusammenhängenden Region liegen."
              },
              "mask_features": {
                "label": "Maskenobjekte",
                "description": "Polygon-Layer, der das Analysegebiet einschränkt."
              },
              "mask_type": {
                "label": "Maskentyp",
                "description": "'land_polygon' (Standard; außerhalb der Polygone analysieren) oder 'water_polygon' (innerhalb der Polygone analysieren)."
              },
              "histogram_bins": {
                "label": "Histogramm-Bins",
                "description": "Anzahl der Bins für das Otsu-Histogramm (Standard 256)."
              },
              "input_units": {
                "label": "Eingabeeinheiten",
                "description": "'intensity' (Standard), 'dn', 'amplitude' oder 'db'."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band für den Schwellenwert (Standard 1)."
              }
            }
          },
          "extrude_between": {
            "name": "Dazwischen extrudieren",
            "description": "Baut wasserdichte geschlossene Körper, die den Raum zwischen zwei Oberflächen innerhalb jedes Eingabepolygons aufspannen, mit exakten Volumen je Objekt (ArcGIS Extrude Between). cut_fill liefert die Volumenänderung je Zelle zwischen zwei Rastern, gibt aber ein Raster aus, kann nicht auf Grundrisse beschränkt werden und trägt keine Attribute; buffer_3d und minimum_bounding_volume bauen Körper aus Objekten statt aus einem Oberflächenpaar. Die Ausgabe fließt direkt in union_3d, intersect_3d, difference_3d und inside_3d ein.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Polygon-Grundrisse, die die seitliche Ausdehnung jedes Festkörpers definieren. Nur der ERSTE Ring des ersten Teils wird verwendet: innere Löcher und weitere Teile eines MultiPolygons werden ignoriert; mehrteilige Grundrisse daher vor dem Extrudieren aufteilen und Löcher füllen."
              },
              "surface_upper": {
                "label": "Obere Oberfläche",
                "description": "Raster der oberen Begrenzungsfläche."
              },
              "surface_lower": {
                "label": "Untere Oberfläche",
                "description": "Raster der unteren Begrenzungsfläche, koregistriert mit der oberen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Geschlossene Festkörperobjekte (Dreiecksnetz-MultiPolygone mit Z). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "sample_distance": {
                "label": "Abtastdistanz",
                "description": "Abstand für die Grundrissabtastung und Randverdichtung in KBS-Einheiten. Standard: die feinere Zellengröße der Oberflächen."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das aus jedem Oberflächenraster gelesen wird (Standard 1)."
              }
            }
          },
          "feature_outline_masks": {
            "name": "Umrissmasken von Objekten",
            "description": "Kartografische Maskenpolygone mit einem Rand um Objekte erzeugen (exakter Umriss, konvexe Hülle oder Begrenzungsrahmen), optional auf einen zweiten Layer zugeschnitten (Intersecting Layers Masks).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (beliebige Geometrie), Format wird automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "margin": {
                "label": "Rand",
                "description": "Randabstand der Maske. Meter bei einem geografischen KBS (EPSG:4326 oder unbekannt, in Grad umgerechnet), sonst in den KBS-Einheiten des Layers. Muss positiv sein."
              },
              "mask_kind": {
                "label": "Maskenart",
                "description": "Maskenform: 'exact' (Standard, gepufferter Objektumriss), 'convex_hull' (erweiterte konvexe Hülle) oder 'box' (Begrenzungsrahmen + Rand)."
              },
              "masked_layer": {
                "label": "Maskierter Layer",
                "description": "Optionaler zweiter Polygon-Layer. Wenn angegeben, werden die Masken auf ihre Verschneidung mit ihm zugeschnitten (Intersecting Layers Masks); nicht überlappende Masken werden verworfen."
              },
              "id_field": {
                "label": "ID-Feld",
                "description": "Optionales Quellfeld, dessen Wert als 'source_id' auf jede Maske kopiert wird. Standard ist der Index des Quellobjekts."
              }
            }
          },
          "feature_to_line": {
            "name": "Objekt zu Linie",
            "description": "Linien-/Polygongrenzobjekte in knotenbasierte, nicht überlappende Liniensegmente planarisieren, die an jeder gegenseitigen und Selbstüberschneidung geteilt werden, wie ArcGIS Feature To Line — der topologiebildende Vorläufer, den die gebündelten polygons_to_lines und split_vector_lines nicht bieten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Linien- oder Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienvektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "cluster_tolerance": {
                "label": "Cluster-Toleranz",
                "description": "Teilungspunkte an dieses Raster in Karteneinheiten fangen, um nahezu deckungsgleiche Knoten zusammenzuführen (Standard 1e-9)."
              },
              "attributes": {
                "label": "Attribute",
                "description": "Wenn wahr (Standard), wird jedes Ausgabesegment mit 'src_fid', der ID des Quellobjekts, markiert."
              }
            }
          },
          "feature_vertices_to_points": {
            "name": "Objektstützpunkte zu Punkten",
            "description": "Einen Punktlayer aus ausgewählten Objektstützpunkten erzeugen — ALL, START, END, BOTH_ENDS, MID (Mittelpunkt der Bogenlänge) oder DANGLE (nicht geteilte Linienendpunkte) — mit einem Feld für die übergeordnete FID, wie ArcGIS Feature Vertices To Points.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer mit Linien, Polygonen oder Punkten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "point_location": {
                "label": "Punktposition",
                "description": "Zu extrahierende Stützpunkte: ALL | START | END | BOTH_ENDS | MID | DANGLE. Standard ALL."
              }
            }
          },
          "features_to_gpx": {
            "name": "Objekte zu GPX",
            "description": "Punktobjekte als GPX-Wegpunkte und Linienobjekte als GPX-Tracks schreiben, wobei Attributfelder auf name/description/elevation/time abgebildet werden.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zu exportierender Punkt- oder Linien-Vektorlayer (WGS84 / EPSG:4326 wird angenommen)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad der .gpx-Ausgabedatei."
              },
              "name_field": {
                "label": "Namensfeld",
                "description": "Attributfeld, das auf das GPX-Element <name> abgebildet wird (optional)."
              },
              "description_field": {
                "label": "Beschreibungsfeld",
                "description": "Attributfeld, das auf das GPX-Element <desc> abgebildet wird (optional)."
              },
              "z_field": {
                "label": "Z-Feld",
                "description": "Attributfeld, das auf die GPX-Höhe <ele> abgebildet wird (optional; greift auf eine Geometrie-Z zurück, wenn vorhanden)."
              },
              "date_field": {
                "label": "Datumsfeld",
                "description": "Attributfeld, das auf den GPX-Zeitstempel <time> abgebildet wird, eine ISO-8601-Zeichenkette (optional)."
              }
            }
          },
          "features_to_gtfs": {
            "name": "Objekte zu GTFS",
            "description": "Punktobjekte nach GTFS stops.txt und Linienobjekte nach GTFS shapes.txt exportieren und damit den GTFS-Roundtrip schließen.",
            "params": {
              "stops_input": {
                "label": "Haltestellen-Eingabe",
                "description": "Punkt-Vektorlayer, der als stops.txt geschrieben wird (verwendet die Attributfelder stop_id/stop_name, wenn vorhanden)."
              },
              "shapes_input": {
                "label": "Shapes-Eingabe",
                "description": "Linien-Vektorlayer, der als shapes.txt geschrieben wird (verwendet ein Attributfeld shape_id, wenn vorhanden)."
              },
              "output_dir": {
                "label": "Ausgabeverzeichnis",
                "description": "Verzeichnis, in das die GTFS-Textdateien (stops.txt / shapes.txt) geschrieben werden. Wird angelegt, falls nicht vorhanden."
              }
            }
          },
          "features_to_kml": {
            "name": "Objekte zu KML",
            "description": "Schreibt einen Vektorlayer in ein KML-2.2-Dokument (oder ein gezipptes KMZ), mit Attributen als ExtendedData und einem optionalen gemeinsamen Stil (ArcGIS Layer To KML / Map To KML). kml_to_features konnte KML bereits lesen, aber nichts schrieb es, anders als bei den symmetrischen Paaren für GPX, GTFS und GeoParquet.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer. Muss in EPSG:4326 Lon/Lat vorliegen, dem einzigen KBS, das KML definiert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad der .kml- oder .kmz-Ausgabedatei."
              },
              "name_field": {
                "label": "Namensfeld",
                "description": "Attribut, das für das <name> jeder Placemark verwendet wird."
              },
              "description_field": {
                "label": "Beschreibungsfeld",
                "description": "Attribut, das für <description> verwendet wird. Wenn nicht angegeben, werden alle Attribute als <ExtendedData> geschrieben."
              },
              "z_field": {
                "label": "Z-Feld",
                "description": "Attribut, das eine Höhe liefert, die als dritte Koordinate geschrieben wird."
              },
              "altitude_mode": {
                "label": "Höhenmodus",
                "description": "'clampToGround' (Standard), 'relativeToGround' oder 'absolute'."
              },
              "color": {
                "label": "Farbe",
                "description": "Linien-/Umrissfarbe als KML-Hexwert aabbggrr (z. B. 'ff0000ff' für deckendes Rot)."
              },
              "line_width": {
                "label": "Linienbreite",
                "description": "Linienbreite in Pixeln (Standard 1.0)."
              },
              "fill_color": {
                "label": "Füllfarbe",
                "description": "Polygonfüllfarbe als KML-Hexwert aabbggrr. Weglassen für keine Füllung."
              }
            }
          },
          "fence_diagram": {
            "name": "Zaundiagramm",
            "description": "Erzeugt vertikale 3D-Schnittflächen dort, wo eine Linienspur einen Stapel von Oberflächen kreuzt — die übliche Art, Untergrundstratigraphie oder atmosphärische Schichtung zu visualisieren (ArcGIS Fence Diagram). profile, long_profile und stack_profile beproben Oberflächen entlang einer Linie, liefern aber 2D-Profillinien oder Tabellen ohne Geometrie für den Raum ZWISCHEN aufeinanderfolgenden Oberflächen, und voxel_isosurface extrahiert eine Niveaufläche aus einem Volumen statt eines Schnitts.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Linienobjekte, die die Profilspur definieren."
              },
              "surfaces": {
                "label": "Oberflächen",
                "description": "Kommagetrennte Liste koregistrierter Oberflächenraster, von OBEN nach UNTEN geordnet."
              },
              "output": {
                "label": "Ausgabe",
                "description": "3D-Profilflächen, eine pro Spur und Oberflächenpaar. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "sample_distance": {
                "label": "Abtastdistanz",
                "description": "Abtastabstand entlang der Spur in KBS-Einheiten. Standard: die feinste Zellengröße der Oberflächen."
              },
              "floor_height": {
                "label": "Bodenhöhe",
                "description": "Optionale konstante Untergrenze: eine synthetische Bodenfläche auf dieser Höhe, die die tiefste Profilfläche abschließt."
              },
              "ceiling_height": {
                "label": "Deckenhöhe",
                "description": "Optionale konstante Obergrenze: eine synthetische Deckfläche auf dieser Höhe."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das aus jedem Oberflächenraster gelesen wird (Standard 1)."
              }
            }
          },
          "fill_missing_values": {
            "name": "Fehlende Werte füllen",
            "description": "Nullwerte in einem numerischen Attributfeld anhand räumlicher Nachbarn (k nächste oder Distanzband) schätzen und füllen, optional auf ein Zeitfenster beschränkt, mit wählbarem Schätzer (mean/median/min/max/temporal_trend). Imputierte Zeilen werden mit einem Markierungsfeld gekennzeichnet (ArcGIS Fill Missing Values).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer mit dem zu füllenden Feld."
              },
              "fill_field": {
                "label": "Füllfeld",
                "description": "Numerisches Feld, dessen Nullwerte geschätzt und gefüllt werden sollen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              },
              "estimator": {
                "label": "Schätzer",
                "description": "Wie Nachbarwerte kombiniert werden: 'mean' (Standard), 'median', 'min', 'max' oder 'temporal_trend' (kleinste Quadrate über die Zeit; benötigt time_field)."
              },
              "neighbourhood": {
                "label": "Nachbarschaft",
                "description": "Räumliche Auswahl: 'knn' (Standard, k nächste) oder 'distance_band' (alle innerhalb von search_radius)."
              },
              "k": {
                "label": "K",
                "description": "Anzahl der nächsten Nachbarn für 'knn' (Standard 8)."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Radius (KBS-Einheiten) für die Auswahl 'distance_band'."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Optionales numerisches Feld mit der Zeit/Reihenfolge jedes Objekts (erforderlich für 'temporal_trend')."
              },
              "time_window": {
                "label": "Zeitfenster",
                "description": "Optional: Nachbarn auf jene innerhalb dieses zeitlichen Abstands zum Zielobjekt beschränken (benötigt time_field)."
              },
              "flag_field": {
                "label": "Markierungsfeld",
                "description": "Name des booleschen Feldes, das imputierte Zeilen kennzeichnet (Standard 'imputed')."
              }
            }
          },
          "fill_spill_merge": {
            "name": "Fill-Spill-Merge",
            "description": "Ein endliches Volumen Oberflächenwasser über ein DEM routen, um realistische See-/Überflutungsausdehnungen zu erzeugen (teilweise Senkenfüllung mit Überlauf und Zusammenführung), als Neuimplementierung von RichDEMs Fill-Spill-Merge.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster (Höhen)."
              },
              "water_level": {
                "label": "Wasserstand",
                "description": "Einheitliche Oberflächenwassertiefe, die auf jede Zelle angewendet wird. Entweder dies oder 'surface_water' angeben."
              },
              "surface_water": {
                "label": "Oberflächenwasser",
                "description": "Raster der Oberflächenwassertiefe pro Zelle (am DEM ausgerichtet). Überschreibt 'water_level', wo beide angegeben sind."
              },
              "ocean_level": {
                "label": "Meeresspiegel",
                "description": "Optionaler Meeresspiegel: Zellen auf oder unter dieser Höhe, die mit dem Rasterrand verbunden sind, werden zu Ozean (Basislinie für Küstenüberflutung)."
              },
              "edge_outlet": {
                "label": "Randauslass",
                "description": "Jede Randzelle des Rasters als freien Auslass behandeln (Standard wahr). Wasser, das den Rand erreicht, verlässt das DEM."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad für das Raster der Tiefe stehenden Wassers. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "water_surface": {
                "label": "Wasseroberfläche",
                "description": "Optionaler Ausgabepfad für die hydraulische Oberfläche (DEM + Wassertiefe)."
              },
              "flood_extent": {
                "label": "Überflutungsausdehnung",
                "description": "Optionaler Ausgabepfad für eine Überflutungsmaske (1 wo stehendes Wasser vorhanden ist, sonst 0)."
              }
            }
          },
          "find_argument_statistics": {
            "name": "Argumentstatistik finden",
            "description": "Argumentstatistiken je Pixel über einen Rasterstapel (wie ArcGIS Find Argument Statistics): der Schichtindex (oder das Datum) des Maximums/Minimums, die Medianposition, die Anzahl der Schichten über einem Schwellenwert (Dauer) oder die längste zusammenhängende Folge — die Argumentpositionsantworten, die die gebündelten Zellstatistiken und die Wertaggregate von image_stack_profile nicht liefern können.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Ein Multiband-Raster (jedes Band ist eine Zeitscheibe) oder eine kommagetrennte Liste koregistrierter Raster in zeitlicher Reihenfolge."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Einbandiges Ausgaberaster mit Zeitscheibenindizes / Daten / Anzahlen. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "statistic": {
                "label": "Statistik",
                "description": "'argmax' (Standard), 'argmin', 'median_position', 'duration' oder 'longest_run'."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Numerischer Schwellenwert für 'duration'/'longest_run' (dafür erforderlich)."
              },
              "comparison": {
                "label": "Vergleich",
                "description": "Vergleich für 'duration'/'longest_run': '>' (Standard), '>=', '<' oder '<='."
              },
              "dates": {
                "label": "Daten",
                "description": "Optionale kommagetrennte numerische Daten (z. B. Tag des Jahres) pro Zeitscheibe; argmax/argmin/median geben dann das passende Datum statt des Zeitscheibenindex aus."
              },
              "min_valid": {
                "label": "Minimale gültige",
                "description": "Mindestanzahl gültiger (nicht NoData) Beobachtungen pro Pixel (Standard 1)."
              }
            }
          },
          "find_dwell_locations": {
            "name": "Aufenthaltsorte finden",
            "description": "Erkennen, wo ein bewegtes Objekt verweilte: Folgen von Spurpunkten innerhalb einer Distanztoleranz über mindestens eine Zeittoleranz, ausgegeben als Punkte, Mittelpunkte oder konvexe Hüllen, wie ArcGIS Find Dwell Locations.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Objekte mit Zeitstempel (Track-Positionen)."
              },
              "track_field": {
                "label": "Track-Feld",
                "description": "Feld, das den Track identifiziert, zu dem jede Position gehört."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Zeitstempelfeld (numerische Sekunden oder ISO-8601-Text)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "distance_tolerance": {
                "label": "Distanztoleranz",
                "description": "Maximale Entfernung (Karteneinheiten), die eine Position vom laufenden Schwerpunkt des Aufenthalts haben darf."
              },
              "time_tolerance": {
                "label": "Zeittoleranz",
                "description": "Mindestdauer (gleiche Einheiten wie time_field), damit ein stationärer Abschnitt als Aufenthalt zählt."
              },
              "output_type": {
                "label": "Ausgabetyp",
                "description": "dwell_features (Standard) | mean_centers | convex_hulls | all_features."
              }
            }
          },
          "find_identical": {
            "name": "Identische finden",
            "description": "Objekte finden, die in Geometrie und/oder gewählten Feldern identisch sind, und Duplikate gruppieren; 'report' fügt die Spalten dup_group/dup_seq hinzu, 'delete' behält nur das erste jeder Gruppe, wie ArcGIS Find Identical / Delete Identical.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zu deduplizierender Eingabe-Vektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              },
              "fields": {
                "label": "Felder",
                "description": "Kommagetrennte zu vergleichende Felder. Weglassen, um nur die Geometrie zu vergleichen; mit 'compare_geometry' kombinieren."
              },
              "compare_geometry": {
                "label": "Geometrie vergleichen",
                "description": "Ob die Geometrie Teil des Identitätstests ist (Standard wahr; auf falsch setzen, um nur Felder zu vergleichen)."
              },
              "xy_tolerance": {
                "label": "XY-Toleranz",
                "description": "Fangtoleranz für den Geometrievergleich (Stützpunkte werden vor dem Hashing auf dieses Raster gerundet). Standard 0 (exakt)."
              },
              "mode": {
                "label": "Modus",
                "description": "'report' (Standard; fügt dup_group/dup_seq hinzu) oder 'delete' (behält das erste Objekt jeder Gruppe)."
              }
            }
          },
          "find_meeting_locations": {
            "name": "Treffpunkte finden",
            "description": "Zusammenkünfte erkennen, bei denen mehrere verschiedene Spuren für mindestens eine Mindestdauer innerhalb einer Distanz beieinander sind (wie ArcGIS Find Meeting Locations) — das N-Spuren-Zusammentreffen, das die erstellten trace_proximity_events (paarweise) und reconstruct_tracks (Verweilen einer einzelnen Spur) nicht abdecken. Gibt Flächenhüllen und repräsentative Punkte mit Teilnehmerzahl, Start-/Endzeit und Dauer aus.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Track-Punktlayer mit Zeitstempeln (projiziertes KBS; Entfernungen in Karteneinheiten)."
              },
              "track_field": {
                "label": "Track-Feld",
                "description": "Feld, das jeden Track bzw. jede Entität identifiziert."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Feld mit der Zeit jedes Punkts: numerische Sekunden oder ein ISO-8601-Zeitstempel."
              },
              "search_distance": {
                "label": "Suchdistanz",
                "description": "Maximale Entfernung (Karteneinheiten), bei der Tracks als zusammen gelten."
              },
              "min_meeting_duration": {
                "label": "Minimale Treffdauer",
                "description": "Mindestdauer (Zeiteinheiten), die eine Zusammenkunft bestehen muss, um gemeldet zu werden."
              },
              "max_meeting_duration": {
                "label": "Maximale Treffdauer",
                "description": "Optionale Maximaldauer; längere Zusammenkünfte werden verworfen."
              },
              "min_participants": {
                "label": "Minimale Teilnehmer",
                "description": "Mindestanzahl verschiedener Tracks in einer Zusammenkunft (Standard 2)."
              },
              "time_step": {
                "label": "Zeitschritt",
                "description": "Breite einer Zeitscheibe (Zeiteinheiten). Standard: min_meeting_duration."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabelayer repräsentativer Punkte (ein Punkt pro Treffen). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "output_area": {
                "label": "Fläche ausgeben",
                "description": "Optionaler Ausgabe-Flächenlayer (Polygon der konvexen Hülle pro Treffen). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              }
            }
          },
          "find_space_time_matches": {
            "name": "Raum-Zeit-Übereinstimmungen finden",
            "description": "Objekte zwischen zwei Punktlayern mit Zeitstempel zuordnen, die innerhalb einer räumlichen Suchdistanz UND eines Zeitfensters (vorher/nachher/beides) zueinander liegen; ausgegeben werden zugeordnete Paare mit Distanz und Zeitversatz, wie ArcGIS Find Space Time Matches.",
            "params": {
              "primary": {
                "label": "Primär",
                "description": "Primärer Punktlayer (jedes Objekt wird mit dem sekundären Layer abgeglichen)."
              },
              "secondary": {
                "label": "Sekundär",
                "description": "Sekundärer Punktlayer, mit dem abgeglichen wird."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Zeitstempelfeld, das in BEIDEN Layern vorhanden ist (numerisch oder ISO-8601)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Zuordnungslayer (eine Verbindungslinie pro zugeordnetem Paar). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "search_distance": {
                "label": "Suchdistanz",
                "description": "Maximale räumliche Entfernung zwischen einem primären und einem sekundären Objekt (Karteneinheiten)."
              },
              "time_window": {
                "label": "Zeitfenster",
                "description": "Maximaler zeitlicher Abstand: eine Anzahl Sekunden oder eine Dauer wie '2h', '30m', '7d'."
              },
              "temporal_relationship": {
                "label": "Zeitliche Beziehung",
                "description": "'either' (Standard), 'before' (sekundär vor primär) oder 'after' (sekundär nach primär)."
              },
              "primary_id_field": {
                "label": "Primäres ID-Feld",
                "description": "Feld, das jedes primäre Objekt in der Ausgabe benennt (Standard: Objektindex)."
              },
              "secondary_id_field": {
                "label": "Sekundäres ID-Feld",
                "description": "Feld, das jedes sekundäre Objekt in der Ausgabe benennt (Standard: Objektindex)."
              }
            }
          },
          "fit_variogram": {
            "name": "Variogrammmodell anpassen",
            "description": "Passt ein theoretisches Variogrammmodell (sphärisch, exponentiell, gaußsch) an empirische Semivariogrammdaten zur Verwendung im Kriging an.",
            "params": {
              "lags_json": {
                "label": "Lags-JSON",
                "description": "JSON-Array der Lag-Klassen aus estimate_variogram"
              },
              "model_family": {
                "label": "Modellfamilie",
                "description": "Modell: spherical, exponential oder gaussian"
              }
            }
          },
          "flatten_interferogram": {
            "name": "Interferogramm einebnen",
            "description": "Entfernt die topografische Phasenkomponente aus einem gewickelten Interferogramm anhand eines DEM und der interferometrischen Basislinie und lässt das Deformations- und Atmosphärensignal übrig (der TOPO-Flattening-Modus von ArcGIS Generate Interferogram). sar_coherence gibt das Interferogramm selbst bereits über output_phase aus, aber nichts in beiden Registrierungen kann die topografische Phase simulieren und subtrahieren — und bei jeglichem Relief dominiert diese Komponente, sodass ein nicht geglättetes Interferogramm für Deformationsarbeiten unbrauchbar ist.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Raster der gewickelten interferometrischen Phase in Radiant (wie von output_phase in sar_coherence ausgegeben) oder ein zweibandiges I/Q-Interferogramm."
              },
              "dem": {
                "label": "DEM",
                "description": "Koregistriertes Höhenraster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Abgeflachtes Raster der gewickelten Phase, erneut auf (-pi, pi] gewickelt. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "perpendicular_baseline": {
                "label": "Senkrechte Basislinie",
                "description": "Senkrechte Basislinie B_perp in Metern. Erforderlich: sie bestimmt die Höhen-Phasen-Empfindlichkeit, und es gibt keinen vertretbaren Standardwert."
              },
              "wavelength": {
                "label": "Wellenlänge",
                "description": "Radarwellenlänge in Metern (Standard 0.05546576, Sentinel-1 C-Band)."
              },
              "incidence_angle": {
                "label": "Einfallswinkel",
                "description": "Einfallswinkel in Grad: eine Konstante (Standard 39.0, typisch für Sentinel-1 IW in Schwadmitte) oder ein koregistrierter Rasterpfad."
              },
              "slant_range": {
                "label": "Schrägentfernung",
                "description": "Schrägentfernung R vom Sensor zum Boden in Metern (Standard 800000)."
              },
              "reference_elevation": {
                "label": "Referenzhöhe",
                "description": "Höhe, die als topografische Phase null behandelt wird. Standard: der DEM-Mittelwert, damit die Ausgabe keinen willkürlichen globalen Versatz trägt."
              },
              "out_topographic_phase": {
                "label": "Ausgabe topographische Phase",
                "description": "Raster der simulierten topografischen Phase, wie die abgeflachte Ausgabe auf (-pi, pi] GEWICKELT — nicht die absolute simulierte Phase. Wird immer erzeugt; greift auf ein In-Memory-Handle zurück, wenn kein Pfad angegeben ist."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das die Phase enthält. Bei einem einbandigen Phasenraster oder einem zweibandigen I/Q-Interferogramm (das dann automatisch erkannt wird) weglassen; angeben, um reelle Phase aus einem bestimmten Band eines Multiband-Stapels zu lesen. Ein Raster mit mehr als zwei Bändern ERFORDERT diesen Parameter, da drei oder mehr Bänder kein I/Q-Paar sind und Raten eine plausible, aber falsche Phase liefern würde."
              }
            }
          },
          "flip_line": {
            "name": "Linie umkehren",
            "description": "Die Stützpunktreihenfolge (Anfang↔Ende) von Polylinienobjekten umkehren, um ihre Digitalisierungsrichtung zu wenden.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Linienvektordatei, Format automatisch erkannt (oder Speicher-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              }
            }
          },
          "focal_flow": {
            "name": "Fokaler Fluss",
            "description": "Codiert als 8-Bit-Maske, welche der acht Nachbarn einer Zelle in sie hineinfließen (ArcGIS Focal Flow). Anders als die gebündelten D8-/D-Infinity-Akkumulationswerkzeuge, die jede Zelle in einer Richtung hangabwärts routen, erfasst dies jeden zufließenden Nachbarn — und damit die Konvergenz in Senken, Mulden und Sättel. Die Bitgewichte laufen gegen den Uhrzeigersinn von Osten aus (1, 2, 4, 8, 16, 32, 64, 128); 0 ist eine lokale Erhebung, 255 eine Senke.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Oberflächenraster (Höhe oder beliebige kontinuierliche Oberfläche)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Ein Nachbar zählt nur als zufließend, wenn er die Mittelzelle um mehr als diesen Wert übersteigt (Standard 0)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das gelesen wird (Standard 1)."
              }
            }
          },
          "focal_statistics": {
            "name": "Fokale Statistik",
            "description": "Nachbarschaftsstatistiken mit gleitendem Fenster (Rechteck/Kreis/Ring/Keil; numerisch und kategorial).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              },
              "statistics": {
                "label": "Statistiken",
                "description": "Statistik: mean, majority, maximum, median, minimum, minority, percentile, range, std, sum oder variety (Standard mean)."
              },
              "neighborhood": {
                "label": "Nachbarschaft",
                "description": "Nachbarschaftsform: rectangle, circle, annulus oder wedge (Standard rectangle)."
              },
              "width": {
                "label": "Breite",
                "description": "Rechteckbreite in Zellen (Standard 3)."
              },
              "height": {
                "label": "Höhe",
                "description": "Rechteckhöhe in Zellen (Standard 3)."
              },
              "radius": {
                "label": "Radius",
                "description": "Radius in Zellen für circle / wedge sowie Außenradius für annulus (Standard 1)."
              },
              "inner_radius": {
                "label": "Innenradius",
                "description": "Innenradius in Zellen für die Nachbarschaft annulus (Standard 0)."
              },
              "start_angle": {
                "label": "Startwinkel",
                "description": "Startwinkel des Keils in Grad (0 = Osten, gegen den Uhrzeigersinn; Standard 0)."
              },
              "end_angle": {
                "label": "Endwinkel",
                "description": "Endwinkel des Keils in Grad (0 = Osten, gegen den Uhrzeigersinn; Standard 90)."
              },
              "percentile_value": {
                "label": "Perzentilwert",
                "description": "Perzentil in [0, 100] für die Statistik percentile (Standard 90)."
              },
              "ignore_nodata": {
                "label": "NoData ignorieren",
                "description": "Wenn wahr (Standard), wird nur über gültige Zellen reduziert; wenn falsch, ergibt jede NoData-Zelle im Fenster NoData."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes zu verarbeitendes Band (Standard 1)."
              }
            }
          },
          "forest_based_forecast": {
            "name": "Forest-basierte Prognose",
            "description": "Einen Wert an jedem Standort mit einem Random Forest vorhersagen, der auf gleitenden Lag-Fenstern der eigenen Historie dieses Standorts trainiert wurde, wie ArcGIS Forest-based Forecast.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Objekte mit Zeitstempel, die eine Standort-ID, ein Zeitfeld und ein Wertefeld tragen."
              },
              "location_field": {
                "label": "Standortfeld",
                "description": "Feld, das den Standort identifiziert, zu dem jede Beobachtung gehört."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Numerisches Zeitfeld zum Ordnen der Zeitreihe jedes Standorts."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Numerisches Feld, das prognostiziert werden soll."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für die Prognosetabelle. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "forecast_steps": {
                "label": "Prognoseschritte",
                "description": "Anzahl der vorauszuberechnenden Schritte (Standard 3)."
              },
              "time_window": {
                "label": "Zeitfenster",
                "description": "Anzahl der vorherigen Werte, die als Prädiktoren verwendet werden (Standard: ein Viertel der Reihenlänge, mindestens 2)."
              },
              "validation_steps": {
                "label": "Validierungsschritte",
                "description": "Letzte Schritte, die zur Bewertung des RMSE zurückgehalten werden (Standard 0, keine Validierung)."
              },
              "n_trees": {
                "label": "Anzahl Bäume",
                "description": "Anzahl der Bäume im Wald (Standard 50, maximal 500)."
              },
              "min_leaf_size": {
                "label": "Minimale Blattgröße",
                "description": "Mindestanzahl Trainingszeilen in einem Blatt (Standard 2)."
              },
              "max_depth": {
                "label": "Maximale Tiefe",
                "description": "Maximale Baumtiefe (Standard 8)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed für den deterministischen Zufallsgenerator, der Bootstrapping und Merkmalsauswahl steuert (Standard 42)."
              }
            }
          },
          "frequency_comparison": {
            "name": "Häufigkeitsvergleich",
            "description": "Zählt je Zelle, wie viele Raster eines Stapels gleich / größer als / kleiner als die entsprechende Zelle eines Referenzwertrasters sind (ArcGIS Equal To Frequency, Greater Than Frequency und Less Than Frequency, plus die inklusiven und negierten Operatoren). Keine der Registrierungen kann einen Vergleich über einen Stapel aggregieren: cell_statistics hat keine Referenzeingabe, raster_calculator drückt einen Vergleich aus, kann aber nicht über einen Stapel beliebiger Länge zählen, und conditional_evaluation ist ein Selektor für eine einzelne Bedingung.",
            "params": {
              "value_raster": {
                "label": "Werteraster",
                "description": "Referenzraster, mit dem jeder Stapel-Layer verglichen wird, koregistriert mit den Eingaben. Eine einbandige Referenz wird auf jede Bandgruppe übertragen; eine Multiband-Referenz muss ein Band pro Gruppe haben und schreitet mit ihr fort."
              },
              "inputs": {
                "label": "Eingaben",
                "description": "Ein Multiband-Raster (jedes Band ist ein Layer) oder eine kommagetrennte Liste koregistrierter Raster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Anzahlraster (0..n). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "comparison": {
                "label": "Vergleich",
                "description": "'equal' (Standard), 'greater', 'less', 'greater_equal', 'less_equal' oder 'not_equal'."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Absolute Toleranz für 'equal'/'not_equal' bei Gleitkommadaten (Standard 0 = exakt)."
              },
              "ignore_nodata": {
                "label": "NoData ignorieren",
                "description": "NoData-Beobachtungen pro Zelle überspringen (Standard wahr). Wenn falsch, macht jede NoData-Beobachtung die Zelle zu NoData."
              },
              "process_as_multiband": {
                "label": "Als Multiband verarbeiten",
                "description": "'single_band' (Standard): jedes Band jeder Eingabe ist ein Layer eines einzigen Stapels. 'multi_band': Band i jeder Eingabe bildet einen eigenen Stapel, was ein Multiband-Ergebnis liefert."
              }
            }
          },
          "fuzzy_overlay": {
            "name": "Fuzzy-Overlay",
            "description": "Ein Raster auf eine unscharfe Zugehörigkeitsoberfläche 0..1 umskalieren (linear/gaussian/small/large/ms_small/ms_large) oder mehrere Zugehörigkeitsraster mit Fuzzy-AND/OR/PRODUCT/SUM/GAMMA kombinieren, wie ArcGIS Fuzzy Membership + Fuzzy Overlay.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zugehörigkeitsmodus: Eingaberaster, das in eine 0..1-Oberfläche transformiert wird."
              },
              "inputs": {
                "label": "Eingaben",
                "description": "Overlay-Modus: kommagetrennte Liste von ≥2 zu kombinierenden Zugehörigkeitsrastern. Hat Vorrang vor 'input'."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des Ausgaberasters. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "function": {
                "label": "Funktion",
                "description": "Zugehörigkeitsfunktion: 'linear' (Standard), 'gaussian', 'small', 'large', 'ms_small', 'ms_large'."
              },
              "overlay": {
                "label": "Overlay",
                "description": "Overlay-Operator: 'and' (Minimum, Standard), 'or' (Maximum), 'product', 'sum', 'gamma'."
              },
              "midpoint": {
                "label": "Mittelpunkt",
                "description": "linear: der auf 0.5 abgebildete Wert wird ignoriert (min/max verwenden); gaussian/small/large: der Mittelpunkt der Funktion; ms_small/ms_large: der Mittelwert-Multiplikator (Standard aus den Bandstatistiken)."
              },
              "spread": {
                "label": "Streuung",
                "description": "gaussian/small/large: Streuung (Standard gaussian 0.1, small/large 5); ms_small/ms_large: der Standardabweichungs-Multiplikator (Standard 1)."
              },
              "min": {
                "label": "Minimum",
                "description": "linear: Wert, der auf Zugehörigkeit 0 abgebildet wird (Standard Bandminimum). Wenn min>max, ist die Rampe fallend."
              },
              "max": {
                "label": "Maximum",
                "description": "linear: Wert, der auf Zugehörigkeit 1 abgebildet wird (Standard Bandmaximum)."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Gamma-Overlay-Exponent in [0,1] (Standard 0.9)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das im Zugehörigkeitsmodus transformiert wird (Standard 1)."
              }
            }
          },
          "gaussian_geostatistical_simulations": {
            "name": "Gaußsche geostatistische Simulationen",
            "description": "Sequenzielle Gauß-Simulation: N gleichwahrscheinliche bedingte Realisierungen eines Feldes, die die Stichprobendaten einhalten (wie ArcGIS Gaussian Geostatistical Simulations) — die bedingte Mehrfachrealisierungsausgabe, die das einflächige empirical_bayesian_kriging / Ordinary Kriging und die unbedingte turning_bands_simulation nicht liefern. Geseedet und deterministisch.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktlayer mit den Konditionierungswerten (projiziertes KBS)."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Numerisches Feld mit dem zu simulierenden Wert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Multiband-Ausgaberaster (ein Band pro Realisierung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "num_realizations": {
                "label": "Anzahl Realisierungen",
                "description": "Anzahl der Realisierungen / Ausgabebänder (Standard 10)."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Zellengröße der Ausgabe in KBS-Einheiten. Standard: längere Seite der Ausdehnung / 100."
              },
              "variogram_model": {
                "label": "Variogrammmodell",
                "description": "'exponential' (Standard), 'spherical' oder 'gaussian'."
              },
              "nugget": {
                "label": "Nugget",
                "description": "Manueller Nugget; weglassen, um ihn aus den Daten anzupassen."
              },
              "sill": {
                "label": "Sill",
                "description": "Manueller partieller Sill; weglassen, um ihn aus den Daten anzupassen."
              },
              "range": {
                "label": "Bereich",
                "description": "Manuelle Reichweite (Range); weglassen, um sie aus den Daten anzupassen."
              },
              "max_neighbors": {
                "label": "Maximale Nachbarn",
                "description": "Maximale Anzahl bekannter Punkte, die pro Zelle für das Kriging verwendet werden (Standard 16)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed für den deterministischen Zufallszahlengenerator (Standard 1)."
              },
              "output_mean": {
                "label": "Mittelwert ausgeben",
                "description": "Optionaler Rasterpfad für den Ensemble-Mittelwert."
              },
              "output_std": {
                "label": "Standardabweichung ausgeben",
                "description": "Optionaler Rasterpfad für die Ensemble-Standardabweichung."
              }
            }
          },
          "generalized_linear_regression": {
            "name": "Verallgemeinerte lineare Regression",
            "description": "Globale Regression (gaussian/OLS, poisson oder logistisch) eines abhängigen Feldes auf erklärende Felder per IRLS, mit Ausgabefeldern für angepasste Werte und Residuen sowie vollständiger Diagnostik: Koeffizient, Standardfehler, t/z, Wahrscheinlichkeit und VIF je Term, plus AICc, R²/Devianz und der studentisierte Koenker-(Breusch-Pagan-)Heteroskedastizitätstest — wie ArcGIS Generalized Linear Regression.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Objektlayer (Punkte oder andere Geometrien — die Geometrie wird unverändert durchgereicht)."
              },
              "dependent_field": {
                "label": "Abhängiges Feld",
                "description": "Abhängiges numerisches Feld (Zielgröße). Für 'logistic' muss es 0/1 sein."
              },
              "explanatory_fields": {
                "label": "Erklärende Felder",
                "description": "Kommagetrennte erklärende numerische Felder."
              },
              "family": {
                "label": "Familie",
                "description": "Modellfamilie: 'gaussian' (OLS, Standard), 'poisson' (Log-Link, Zähldaten) oder 'logistic' (Logit-Link, 0/1)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "report": {
                "label": "Bericht",
                "description": "Optionaler CSV-Pfad für den Bericht mit Koeffizienten und Modelldiagnostik."
              }
            }
          },
          "generate_breach_lines": {
            "name": "Bruchlinien erzeugen",
            "description": "Aus Senkenpolygonen und einem DEM die Polylinie ausgeben, entlang derer jede Senke zur Entwässerung durchbrochen würde, nach dem Kriterium minimaler Durchbruchkosten, kürzesten Pfades oder minimaler Höhenänderung, mit Einschnitttiefe und Aushubvolumen je Durchbruch. Wie ArcGIS Generate Breach Lines.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Senkenpolygone (z. B. die Ausgabe von delineate_depressions)."
              },
              "dem": {
                "label": "DEM",
                "description": "Oberflächenraster, durch das der Durchbruch geschnitten wird."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad der Ausgabe-Durchbruchlinien. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "connection_points": {
                "label": "Verbindungspunkte",
                "description": "Optionale Punktobjekte, die einschränken, wo ein Durchbruch enden darf."
              },
              "method": {
                "label": "Methode",
                "description": "'minimum_breaching_cost' (Standard), 'shortest_path' oder 'minimum_elevation_change'."
              },
              "max_length": {
                "label": "Maximale Länge",
                "description": "Durchbrüche verwerfen, die länger als dieser Wert sind (Karteneinheiten); solche Senken bleiben undurchbrochen."
              }
            }
          },
          "generate_near_table": {
            "name": "Nähetabelle erzeugen",
            "description": "Für jedes Eingabeobjekt die k nächsten (oder alle innerhalb eines Suchradius liegenden) Objekte des Nachbarlayers mit Distanz, Rang, optionalem Peilwinkel und Nachbar-XY auflisten — eine Näherungstabelle mit mehreren Nachbarn, wie ArcGIS Generate Near Table.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (Punkte, Linien oder Polygone), dessen Nähe gemessen wird."
              },
              "near_features": {
                "label": "Nahe Objekte",
                "description": "Nahe-Vektorlayer, gegen den gesucht wird (Punkte, Linien oder Polygone)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des Ausgabe-Punktvektors (ein Punkt pro Nahe-Treffer). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nur Nahe-Objekte innerhalb dieser Entfernung behalten (Karteneinheiten). Erforderlich, wenn closest_count = 0 (alle innerhalb des Radius)."
              },
              "closest_count": {
                "label": "Anzahl nächste",
                "description": "Anzahl der nächsten Nahe-Objekte pro Eingabeobjekt (k, Standard 1). 0 verwenden, um jedes Nahe-Objekt innerhalb von search_radius zurückzugeben."
              },
              "angle": {
                "label": "Winkel",
                "description": "NEAR_ANGLE hinzufügen (arithmetische Richtung in Grad, Osten = 0, gegen den Uhrzeigersinn). Standard falsch."
              },
              "location": {
                "label": "Standort",
                "description": "Spalten NEAR_X / NEAR_Y für den nahen Standort hinzufügen. Standard falsch."
              }
            }
          },
          "generate_network_swm": {
            "name": "Netzwerk-SWM erzeugen",
            "description": "Erstellt eine räumliche Gewichtsmatrix, in der Nachbarn und Gewichte aus der Reisedistanz entlang eines Liniennetzes statt aus der geradlinigen Geometrie stammen (ArcGIS Generate Network Spatial Weights). generate_spatial_weights_matrix bietet nur euklidische und topologische Konzeptualisierungen (knn, festes Distanzband, inverse Distanz, Kontiguität, Delaunay), sodass es bei netzwerkgebundenen Phänomenen Objekte verknüpft, die einander nicht erreichen können, und jede nachgelagerte Statistik verzerrt. Die Ausgabe verwendet dasselbe Tabellenschema, sodass global_morans_i, local_morans_i_lisa, getis_ord_gi_star und compare_spatial_weights sie unverändert verarbeiten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zu gewichtende Punktobjekte."
              },
              "network": {
                "label": "Netzwerk",
                "description": "Liniennetzwerk, entlang dessen die Reiseentfernungen gemessen werden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Gewichtungstabelle (CSV je nach Erweiterung oder geometrielose Vektortabelle) im selben origin/neighbor/weight-Schema, das generate_spatial_weights_matrix ausgibt. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "id_field": {
                "label": "ID-Feld",
                "description": "Feld mit der eindeutigen ID jedes Objekts. Standard: der 0-basierte Objektindex, passend zu generate_spatial_weights_matrix."
              },
              "impedance_field": {
                "label": "Impedanzfeld",
                "description": "Kostenfeld des Netzwerks. Standard: die geometrische Länge jedes Segments."
              },
              "distance_cutoff": {
                "label": "Distanzgrenze",
                "description": "Maximale Netzwerkimpedanz, in der ein Nachbar liegen darf. Standard: unbegrenzt."
              },
              "max_neighbors": {
                "label": "Maximale Nachbarn",
                "description": "Obergrenze der Nachbarn pro Ursprung, wobei die nächsten behalten werden. Standard: unbegrenzt."
              },
              "conceptualization": {
                "label": "Konzeptualisierung",
                "description": "'fixed' (Standard, binäres Gewicht 1 innerhalb des Grenzwerts) oder 'inverse' (Gewicht = 1 / Impedanz^Exponent)."
              },
              "exponent": {
                "label": "Exponent",
                "description": "Abklingexponent für 'inverse' (Standard 1)."
              },
              "row_standardization": {
                "label": "Zeilenstandardisierung",
                "description": "Die Gewichte jedes Ursprungs durch ihre Zeilensumme teilen, sodass jeder Ursprung in Summe 1 ergibt. Standard falsch, passend zu generate_spatial_weights_matrix."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Entfernung, innerhalb derer zwei Netzwerkstützpunkte zu einem Knoten verschweißt werden, in KBS-Einheiten (Standard 1e-6). Ein Netzwerk, dessen Segmente sich fast berühren, würde sonst stillschweigend getrennt, und jeder betroffene Ursprung würde null Zeilen ausgeben."
              },
              "search_tolerance": {
                "label": "Suchtoleranz",
                "description": "Maximale Fangentfernung von einem Punkt zum Netzwerk. Weiter entfernte Punkte werden als nicht gefangen gemeldet, statt stillschweigend an einen entfernten Knoten angehängt zu werden."
              }
            }
          },
          "generate_od_links": {
            "name": "Quelle-Ziel-Verbindungen erzeugen",
            "description": "Gerade Wunschlinien von Startpunkten zu Zielpunkten zeichnen — zugeordnet über eine gemeinsame ID, innerhalb einer Distanz und/oder zu den k nächsten — jede mit Start-/Ziel-IDs und Länge, wie ArcGIS Generate Origin-Destination Links.",
            "params": {
              "origins": {
                "label": "Startpunkte",
                "description": "Ursprungs-Punktlayer (Point oder MultiPoint)."
              },
              "destinations": {
                "label": "Ziele",
                "description": "Ziel-Punktlayer (Point oder MultiPoint)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienvektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "num_nearest": {
                "label": "Anzahl nächste Nachbarn",
                "description": "Nur die k nächsten Ziele pro Ursprung behalten (nach etwaigem ID-/Entfernungsfilter)."
              },
              "search_distance": {
                "label": "Suchdistanz",
                "description": "Nur Ziele innerhalb dieser Entfernung vom Ursprung behalten (Karteneinheiten)."
              },
              "id_field": {
                "label": "ID-Feld",
                "description": "Feld, das in BEIDEN Layern vorhanden ist; nur Paare verbinden, deren Werte übereinstimmen. Wird auch als 'link_id' geschrieben."
              },
              "origin_id_field": {
                "label": "Start-ID-Feld",
                "description": "Feld in den Ursprüngen, das als 'origin_id' geschrieben wird (Standard: der Objektindex)."
              },
              "dest_id_field": {
                "label": "Ziel-ID-Feld",
                "description": "Feld in den Zielen, das als 'dest_id' geschrieben wird (Standard: der Objektindex)."
              }
            }
          },
          "generate_points_along_3d_lines": {
            "name": "Punkte entlang von 3D-Linien erzeugen",
            "description": "Gleichmäßig verteilte Punkte entlang von 3D-Linien erzeugen, gemessen in echter 3D-Distanz (nicht der 2D-Grundrisslänge, die das gebündelte points_along_lines verwendet), mit interpoliertem Z, optionalen Endpunkten und einem kumulierten 3D-Stationierungsfeld. Wie ArcGIS Generate Points Along 3D Lines.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-3D-Polylinienobjekte."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad der Ausgabepunkte. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "method": {
                "label": "Methode",
                "description": "'distance' (Standard), 'percentage' oder 'distance_field'."
              },
              "distance": {
                "label": "Distanz",
                "description": "Abstand in Karteneinheiten für die Methode 'distance'."
              },
              "percentage": {
                "label": "Prozentsatz",
                "description": "Abstand als Prozentsatz (0-100) der 3D-Länge jeder Linie für die Methode 'percentage'."
              },
              "distance_field": {
                "label": "Distanzfeld",
                "description": "Feld mit einem objektspezifischen Abstand für die Methode 'distance_field'."
              },
              "include_end_points": {
                "label": "Endpunkte einschließen",
                "description": "Auch Start- und Endstützpunkt jeder Linie ausgeben (Standard falsch)."
              },
              "add_chainage": {
                "label": "Stationierung hinzufügen",
                "description": "Ein Feld CHAINAGE mit der kumulierten 3D-Entfernung vom Linienanfang schreiben (Standard falsch)."
              }
            }
          },
          "generate_spatial_weights_matrix": {
            "name": "Räumliche Gewichtsmatrix erzeugen",
            "description": "Eine wiederverwendbare Nachbar-/Gewichtstabelle im Langformat (origin_id, neighbor_id, weight) aus einer gewählten Konzeptualisierung ausgeben — KNN, festes Distanzband, inverse Distanz, Kontiguität (Kanten / Kanten+Ecken) oder Delaunay — mit optionaler Zeilenstandardisierung, wie ArcGIS Generate Spatial Weights Matrix.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (Punkte/Linien/Polygone; Kontiguität erfordert Polygone)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad der Ausgabetabelle — eine CSV-Datei (Erweiterung .csv) oder eine geometrielose Vektortabelle. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "id_field": {
                "label": "ID-Feld",
                "description": "Feld mit der eindeutigen ID jedes Objekts. Standard: der 0-basierte Objektindex."
              },
              "method": {
                "label": "Methode",
                "description": "Konzeptualisierung der räumlichen Beziehungen: 'knn', 'fixed_distance_band', 'inverse_distance', 'contiguity_edges', 'contiguity_edges_corners' oder 'delaunay'. Standard 'knn'."
              },
              "number_of_neighbors": {
                "label": "Anzahl der Nachbarn",
                "description": "Anzahl der nächsten Nachbarn k (Methode = knn). Standard 8."
              },
              "threshold_distance": {
                "label": "Schwellenwertdistanz",
                "description": "Grenzwert des Entfernungsbands in Karteneinheiten. Erforderlich für fixed_distance_band; optionaler Grenzwert für inverse_distance (nicht gesetzt = alle anderen Objekte)."
              },
              "exponent": {
                "label": "Exponent",
                "description": "Entfernungs-Abklingexponent p für inverse_distance (Gewicht = 1/d^p). Standard 1."
              },
              "row_standardization": {
                "label": "Zeilenstandardisierung",
                "description": "Die Gewichte jedes Ursprungs durch ihre Zeilensumme teilen, sodass die Gewichte jedes Ursprungs in Summe 1 ergeben. Standard falsch."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Stützpunkte vor dem Abgleich der Grenzen für die Nachbarschaft (Contiguity) auf ein Raster dieser Größe (KBS-Einheiten) quantisieren. Standard 0 (exakte Koordinaten)."
              }
            }
          },
          "generate_subset_polygons": {
            "name": "Teilmengenpolygone erzeugen",
            "description": "Unterteilt einen dichten Punktlayer in kompakte, nicht überlappende Polygone, die die Punktausdehnung kacheln und jeweils zwischen einer minimalen und maximalen Anzahl von Punkten enthalten (ArcGIS Generate Subset Polygons). Der übliche Vorverarbeitungsschritt für die Interpolation sehr großer Punktmengen. Anders als die gebündelten festen Gitter passt es sich der Dichte an (Median-k-d-Teilung), anders als voronoi_diagram gruppiert es Punkte statt je eine Zelle zu bilden, und anders als group_by_proximity gibt es Polygone aus und hält Größengrenzen ein.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punkt-Layer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabepolygone. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "output_points": {
                "label": "Punkte ausgeben",
                "description": "Optionaler Pfad für die Eingabepunkte, markiert mit ihrer Teilmengen-ID. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt (und dennoch zurückgegeben)."
              },
              "min_points_per_subset": {
                "label": "Minimale Punkte pro Teilmenge",
                "description": "Untergrenze der Punkte pro Teilmenge (Standard 50)."
              },
              "max_points_per_subset": {
                "label": "Maximale Punkte pro Teilmenge",
                "description": "Obergrenze der Punkte pro Teilmenge (Standard 200)."
              },
              "coincident_points": {
                "label": "Zusammenfallende Punkte",
                "description": "'single' (Standard; exakt deckungsgleiche Punkte zählen bei der Größenbestimmung einmal) oder 'all' (jeder zählt einzeln)."
              },
              "clip_to_hull": {
                "label": "Auf Hülle zuschneiden",
                "description": "Teilmengenpolygone auf die konvexe Hülle der Punkte zuschneiden, sodass sich das Ergebnis an die Daten statt an ihren Begrenzungsrahmen anschmiegt (Standard wahr)."
              }
            }
          },
          "generate_transects_along_lines": {
            "name": "Querprofile entlang von Linien erzeugen",
            "description": "Jede Linie in festem Intervall ablaufen und senkrechte Transektlinien einer gegebenen Länge (zentriert oder versetzt) ausgeben, für Küstenlinienänderung, Uferzonen und Querprofilbeprobung — wie ArcGIS Generate Transects Along Lines.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Linienvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienvektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "interval": {
                "label": "Intervall",
                "description": "Abstand zwischen den Transekten entlang jeder Linie in KBS-Einheiten. Erforderlich."
              },
              "length": {
                "label": "Länge",
                "description": "Gesamtlänge der Transekte in KBS-Einheiten. Erforderlich."
              },
              "offset": {
                "label": "Versatz",
                "description": "Vorzeichenbehafteter Versatz der Transektmitte von der Linie in KBS-Einheiten (0 = zentriert; +/- verschiebt nach links/rechts). Standard 0."
              },
              "include_ends": {
                "label": "Enden einschließen",
                "description": "Auch genau am Anfang und Ende jeder Linie ein Transekt platzieren. Standard falsch."
              }
            }
          },
          "generate_trend_raster": {
            "name": "Trendraster erzeugen",
            "description": "Einen zeitlichen Trend je Pixel über eine Zeitreihe koregistrierter Raster anpassen (wie ArcGIS Generate Trend Raster): OLS-Steigung/-Achsenabschnitt/R² oder nichtparametrisch Mann-Kendall + Sen-Steigung mit p-Wert — der zeitliche Trend je Pixel, den das gebündelte trend_surface (räumlich) und change_vector_analysis (zwei Zeitpunkte) nicht erzeugen können.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Kommagetrennte Liste koregistrierter einbandiger Rasterpfade in zeitlicher Reihenfolge (>= 3)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Neigungsraster (Sen-Steigung für mann_kendall). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "times": {
                "label": "Zeiten",
                "description": "Kommagetrennte numerische Zeitpunkte (z. B. Jahre), passend zu 'inputs'. Standard 0,1,2,..."
              },
              "method": {
                "label": "Methode",
                "description": "'linear' (OLS; Standard) oder 'mann_kendall' (nichtparametrisch + Sen-Steigung)."
              },
              "intercept_output": {
                "label": "Achsenabschnitt ausgeben",
                "description": "Nur linear: optionales Ausgaberaster des OLS-Achsenabschnitts."
              },
              "significance_output": {
                "label": "Signifikanz ausgeben",
                "description": "Optionales Ausgaberaster: R² (linear) oder der zweiseitige Mann-Kendall-p-Wert (mann_kendall)."
              },
              "min_valid": {
                "label": "Minimale gültige",
                "description": "Mindestanzahl gültiger (nicht NoData) Beobachtungen pro Pixel (Standard 3)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das aus jeder Eingabe gelesen wird (Standard 1)."
              }
            }
          },
          "geodetic_densify": {
            "name": "Geodätisch verdichten",
            "description": "Stützpunkte entlang des echten geodätischen oder Loxodrom-Pfades (konstante Peilung) zwischen vorhandenen Stützpunkten eines geografischen (Lon/Lat) Linien- oder Polygonlayers einfügen, wie ArcGIS Geodetic Densify — damit lange Segmente der Erdkrümmung statt einer planaren Sehne folgen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer mit Linien oder Polygonen, als geografisch angenommen (Lon/Lat, nach Art von EPSG:4326)."
              },
              "geodetic_type": {
                "label": "Geodätischer Typ",
                "description": "Pfadtyp zwischen den Stützpunkten: 'geodesic' (Standard; kürzester Weg über das WGS84-Ellipsoid) oder 'rhumb'/'loxodrome' (konstanter rechtweisender Kurs)."
              },
              "max_segment_length": {
                "label": "Maximale Segmentlänge",
                "description": "Angestrebter maximaler Abstand in Metern zwischen aufeinanderfolgenden Stützpunkten nach der Verdichtung. Genau eines von max_segment_length / vertices_per_segment muss angegeben werden."
              },
              "vertices_per_segment": {
                "label": "Stützpunkte pro Segment",
                "description": "Alternative zu max_segment_length: genau diese Anzahl gleichmäßig verteilter Stützpunkte in jedes ursprüngliche Segment einfügen, unabhängig von dessen Länge. Genau eines von max_segment_length / vertices_per_segment muss angegeben werden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad; wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              }
            }
          },
          "geotagged_photos_to_points": {
            "name": "Geotaggte Fotos zu Punkten",
            "description": "Einen Ordner mit georeferenzierten Fotos einlesen und einen WGS84-Punktlayer mit Pfad, Aufnahmezeitpunkt, Höhe, Kamerapeilung (GPS-Bildrichtung) sowie Hersteller/Modell jedes Fotos erstellen — ausschließlich aus EXIF-Metadaten (keine Pixel decodiert), wie ArcGIS GeoTagged Photos To Points.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Ordnerpfad mit Fotos (JPEG/TIFF), aus denen EXIF-GPS-Metadaten gelesen werden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktvektor (Treiber aus der Erweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "recursive": {
                "label": "Rekursiv",
                "description": "Beim Suchen nach Fotos in Unterordner absteigen. Standard falsch."
              },
              "only_geotagged": {
                "label": "Nur mit Geotag",
                "description": "Bilder ohne GPS-Position überspringen (Standard wahr). Wenn falsch, werden nicht geogetaggte Bilder mit einer Nullgeometrie ausgegeben."
              }
            }
          },
          "getis_ord_general_g": {
            "name": "Hoch/Niedrig-Clusterung (Getis-Ord General G)",
            "description": "Die globale Getis-Ord-General-G-Statistik berechnen — ein einzelner z-Wert und p-Wert, der angibt, ob HOHE oder NIEDRIGE Werte global geclustert sind, wie ArcGIS High/Low Clustering (Getis-Ord General G).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer. Punkte verwenden ihre Koordinaten; andere Geometrien verwenden ihren repräsentativen Punkt aus dem Stützpunktmittel (Kontiguitätsgewichte benötigen Polygone)."
              },
              "field": {
                "label": "Feld",
                "description": "Numerisches, nicht-negatives Feld, das auf Hoch-/Niedrig-Clusterung getestet wird."
              },
              "weights": {
                "label": "Gewichte",
                "description": "Schema der räumlichen Gewichte: 'distance_band' (Standard), 'k_nearest', 'queen' oder 'rook'."
              },
              "distance_band": {
                "label": "Distanzband",
                "description": "Schwellenwert-Distanz (KBS-Einheiten) für das Schema 'distance_band'. Standard: die maximale Nächster-Nachbar-Distanz (jedes Objekt hat >=1 Nachbarn)."
              },
              "k": {
                "label": "K",
                "description": "Anzahl der Nachbarn für das Schema 'k_nearest' (Standard 8)."
              },
              "row_standardize": {
                "label": "Zeilenstandardisierung",
                "description": "Gewichtsmatrix zeilenweise standardisieren, sodass jede Zeile die Summe 1 ergibt (Standard falsch)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler CSV-Pfad für den einzeiligen Bericht. Wird immer im Ergebnis zurückgegeben."
              }
            }
          },
          "goldstein_phase_filter": {
            "name": "Goldstein-Phasenfilter",
            "description": "Adaptive spektrale (Goldstein-)Filterung der interferometrischen SAR-Phase, der Schritt, der die Phasenabwicklung erst ermöglicht (ArcGIS Apply Complex Data Filter). unwrap_phase aus Runde 17 scheitert an einem rohen Interferogramm, weil Rauschresiduen Verzweigungsschnitte erzwingen; die gesamte gebündelte Filterfamilie lee/frost/kuan/wiener/gaussian arbeitet auf reellwertiger Intensität und ist hier unbrauchbar, da die Mittelung gewickelter Phase über die +/-pi-Unstetigkeit hinweg sie zerstört. Filtert das komplexe Signal patchweise im Frequenzbereich und berichtet die Residuenanzahl vorher und nachher.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Interferogramm: ein zweibändiges I/Q-Raster oder ein einbändiges Raster der gewickelten Phase in Radiant (Einheitsamplitude wird angenommen)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe eines zweibändigen (I, Q) gefilterten komplexen Rasters. Wenn nicht angegeben, wird es im Speicher abgelegt."
              },
              "output_phase": {
                "label": "Phase ausgeben",
                "description": "Ausgabe der einbändigen gefilterten gewickelten Phase in Radiant, im Bereich (-pi, pi]. Wird immer erzeugt; im Speicher abgelegt, wenn kein Pfad angegeben ist."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Filterstärke in [0, 1] (Standard 0,5). 0 lässt die Phase unverändert; 1 ist maximal aggressiv."
              },
              "outer_window_size": {
                "label": "Äußere Fenstergröße",
                "description": "FFT-Patchgröße in Zellen (Standard 32). Wird auf eine Zweierpotenz aufgerundet."
              },
              "inner_window_size": {
                "label": "Innere Fenstergröße",
                "description": "Schrittweite zwischen Patches in Zellen (Standard = outer/4). Kleinere Werte bedeuten mehr Überlappung und glattere Übergänge; darf das äußere Fenster nicht überschreiten."
              },
              "spectrum_smoothing": {
                "label": "Spektrumsglättung",
                "description": "Breite in Bins des gleitenden Mittels, das vor der Potenzierung auf das Patch-Spektrum angewendet wird (Standard 3, muss ungerade sein)."
              }
            }
          },
          "gpx_to_features": {
            "name": "GPX zu Objekten",
            "description": "Eine GPX-Datei in Wegpunkte und/oder Track-/Routenpolylinien parsen, mit ele/time/name.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad zu einer .gpx-Datei (GPS Exchange Format XML)."
              },
              "points_output": {
                "label": "Punktausgabe",
                "description": "Optionaler Ausgabepfad für einen Punktvektor der Wegpunkte (Treiber aus der Erweiterung). Wenn keine Ausgabe angegeben ist, werden die Wegpunkte im Speicher abgelegt."
              },
              "lines_output": {
                "label": "Linienausgabe",
                "description": "Optionaler Ausgabepfad für einen Linienvektor der Tracks und Routen (Treiber aus der Erweiterung)."
              }
            }
          },
          "graphic_buffer": {
            "name": "Grafischer Puffer",
            "description": "Objekte puffern mit wählbaren Stilen für Linienenden (round/square/butt) und Eckverbindungen (round/miter/bevel) sowie einer Gehrungsgrenze — die eckige/gegehrte Puffergeometrie, die rein runde Puffer nicht erzeugen können.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Vektordatei, Format wird automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "distance": {
                "label": "Distanz",
                "description": "Pufferdistanz in den KBS-Einheiten des Layers. Muss positiv sein."
              },
              "cap": {
                "label": "Ende",
                "description": "Endkappenstil für Linien-/Punktenden: 'round' (Standard), 'square' oder 'butt' (Alias 'flat')."
              },
              "join": {
                "label": "Verknüpfen",
                "description": "Eckverbindungsstil: 'round' (Standard), 'miter' oder 'bevel'."
              },
              "miter_limit": {
                "label": "Gehrungsgrenze",
                "description": "Verhältnis von Gehrungslänge zu Pufferdistanz, ab dem eine Gehrungsecke abgeschrägt wird (ArcGIS/JTS-Standard 10). Muss >= 1 sein. Nur bei join='miter' verwendet."
              },
              "dissolve": {
                "label": "Auflösen",
                "description": "Wenn wahr, werden alle Puffer zu einem zusammengeführten (Multi-)Polygonobjekt vereinigt. Standard falsch (ein Puffer pro Eingabeobjekt, Attribute bleiben erhalten)."
              }
            }
          },
          "greater_than_or_equal_to": {
            "name": "GrößerOderGleich",
            "description": "Prüft zellenweise, ob das erste Raster größer oder gleich dem zweiten ist.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "grid_index_features": {
            "name": "Gitterindexobjekte",
            "description": "Ein Kartenserien-Indexgitter aus seitengroßen Rechtecken mit Seitennamen (A1, B3, ... oder fortlaufend), maßstabsabhängiger Größe und optionalem Datenüberschneidungsfilter erstellen — wie ArcGIS Grid Index Features, plus ein Streifenmodus, der einer Route mit gedrehten Seiten folgt, wie ArcGIS Strip Map Index Features.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer. Liefert die Ausdehnung, wenn keine explizite Ausdehnung angegeben ist, die Route für den Streifenmodus und die von intersect_only getesteten Objekte."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonvektor der Indexseiten (Treiber aus der Erweiterung). Wenn nicht angegeben, wird er im Speicher abgelegt."
              },
              "mode": {
                "label": "Modus",
                "description": "grid (Standard): eine rechteckige Ausdehnung kacheln. strip: einer Routenlinie mit gedrehten, überlappenden Seiten folgen."
              },
              "x_min": {
                "label": "X-Minimum",
                "description": "Explizites Ausdehnungsminimum X (KBS-Einheiten). Alle vier Werte x_min/y_min/x_max/y_max angeben, um die Eingabeausdehnung zu überschreiben."
              },
              "y_min": {
                "label": "Y-Minimum",
                "description": "Explizites Ausdehnungsminimum Y (KBS-Einheiten)."
              },
              "x_max": {
                "label": "X-Maximum",
                "description": "Explizites Ausdehnungsmaximum X (KBS-Einheiten)."
              },
              "y_max": {
                "label": "Y-Maximum",
                "description": "Explizites Ausdehnungsmaximum Y (KBS-Einheiten)."
              },
              "tile_width": {
                "label": "Kachelbreite",
                "description": "Seitenbreite in KBS-Einheiten. Entweder tile_width und tile_height angeben oder page_size + map_scale verwenden."
              },
              "tile_height": {
                "label": "Kachelhöhe",
                "description": "Seitenhöhe in KBS-Einheiten (Seitenlänge entlang der Route im Streifenmodus)."
              },
              "page_size": {
                "label": "Seitengröße",
                "description": "Papierformat-Voreinstellung (a0..a4, letter, legal, tabloid), deren metrische Abmessungen mit map_scale multipliziert werden, um jede Seite zu dimensionieren. Erfordert map_scale."
              },
              "map_scale": {
                "label": "Kartenmaßstab",
                "description": "Maßstabszahl (z. B. 24000 für 1:24.000). Mit page_size gilt: Kachelgröße = Papiermeter × map_scale (metrisches KBS angenommen)."
              },
              "origin_x": {
                "label": "Ursprung X",
                "description": "X des Gitterursprungs, an dem die Kachelgrenzen ausgerichtet werden. Standard: Ausdehnungsminimum X."
              },
              "origin_y": {
                "label": "Ursprung Y",
                "description": "Y des Gitterursprungs, an dem die Kachelgrenzen ausgerichtet werden. Standard: Ausdehnungsminimum Y."
              },
              "naming": {
                "label": "Benennung",
                "description": "Benennungsschema der Seiten: alphanumeric (Standard; Spaltenbuchstabe + Zeilennummer, z. B. A1) oder sequential (Nummer in Lesereihenfolge)."
              },
              "intersect_only": {
                "label": "Nur Verschneidung",
                "description": "Wenn wahr, werden Seiten verworfen, die kein Eingabeobjekt schneiden. Erfordert input. Standard falsch."
              },
              "route": {
                "label": "Route",
                "description": "Streifenmodus: Linien-Vektorlayer, dem gefolgt wird. Standard ist das erste Linienobjekt in input."
              },
              "overlap": {
                "label": "Überlappung",
                "description": "Streifenmodus: Anteil [0,1), um den aufeinanderfolgende Seiten entlang der Route überlappen. Standard 0,05."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG-Code der Ausgabe, wenn die Ausdehnung explizit angegeben ist und kein Eingabelayer vorhanden ist, von dem ein KBS übernommen werden könnte."
              }
            }
          },
          "group_by_proximity": {
            "name": "Nach Nähe gruppieren",
            "description": "Objekte mit einer GROUP_ID für räumlich zusammenhängende Komponenten (Single Linkage) kennzeichnen — Objekte innerhalb einer Distanz ('near') oder sich berührend ('intersects'), optional mit gemeinsamem Attributwert — wie ArcGIS Group By Proximity.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (beliebiger Geometrietyp)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              },
              "relationship": {
                "label": "Beziehung",
                "description": "'near' (innerhalb von 'spatial_near_distance', Standard) oder 'intersects' (berührend, Distanz 0)."
              },
              "spatial_near_distance": {
                "label": "Räumliche Nahdistanz",
                "description": "Suchdistanz in Karteneinheiten für 'near' (Standard 0)."
              },
              "attribute_field": {
                "label": "Attributfeld",
                "description": "Optionales Feld; Objekte werden nur gruppiert, wenn sie diesen Attributwert teilen."
              },
              "group_field": {
                "label": "Gruppierungsfeld",
                "description": "Name des Ausgabefelds für die Gruppen-ID (Standard 'GROUP_ID')."
              }
            }
          },
          "gtfs_to_features": {
            "name": "GTFS zu Objekten",
            "description": "Einen GTFS-Transitfeed in Haltestellenpunkte und Routenlinien parsen, optional mit Bedienhäufigkeiten je Haltestelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad zu einem entpackten GTFS-Feed-Verzeichnis (Ordner mit *.txt-Dateien: stops.txt, shapes.txt, trips.txt, ...)."
              },
              "stops_output": {
                "label": "Haltestellen-Ausgabe",
                "description": "Optionaler Ausgabepfad für einen Punktvektor der Haltestellen (Treiber aus der Erweiterung). Wenn keine Ausgabe angegeben ist, werden die Haltestellen im Speicher abgelegt."
              },
              "shapes_output": {
                "label": "Shapes-Ausgabe",
                "description": "Optionaler Ausgabepfad für einen Linienvektor der Routenverläufe (Treiber aus der Erweiterung)."
              },
              "frequency": {
                "label": "Frequenz",
                "description": "Wenn wahr, werden die planmäßigen Abfahrten jeder Haltestelle aus stop_times.txt in ein Feld n_departures gezählt. Standard falsch."
              },
              "start_time": {
                "label": "Startzeit",
                "description": "Optionale Untergrenze HH:MM:SS für das Frequenzfenster (GTFS-Zeiten können 24:00:00 überschreiten)."
              },
              "end_time": {
                "label": "Endzeit",
                "description": "Optionale Obergrenze HH:MM:SS für das Frequenzfenster."
              }
            }
          },
          "h3_polyfill": {
            "name": "H3-Polyfill",
            "description": "Eingabepolygone mit Zellen des diskreten globalen H3-Gitters in einer gewählten Auflösung überdecken.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Polygonvektordatei (muss geographisch in Lon/Lat, EPSG:4326, vorliegen) oder In-Memory-Handle."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad; der Treiber wird aus der Erweiterung abgeleitet (.geojson, .fgb, .parquet, ...). Wenn nicht angegeben, wird der Layer im Speicher abgelegt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "H3-Auflösung 0 (gröbste) bis 15 (feinste); Standard 8 (Zellen von ~0,7 km²)."
              }
            }
          },
          "h3_to_vector": {
            "name": "H3-Zellen zu Polygonen",
            "description": "Eine Spalte mit H3-Zellen-IDs in Zellgrenzpolygone umwandeln und die übrigen Attribute übernehmen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Vektordatei (oder In-Memory-Handle) mit einem Feld von H3-Zellen-IDs."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad; der Treiber wird aus der Erweiterung abgeleitet (.geojson, .fgb, .parquet, ...). Wenn nicht angegeben, wird der Layer im Speicher abgelegt."
              },
              "field": {
                "label": "Feld",
                "description": "Name des Textfelds mit der H3-Zellen-ID; Standard 'h3'."
              }
            }
          },
          "hdbscan": {
            "name": "HDBSCAN-Clustering",
            "description": "Hierarchisches dichtebasiertes Clustering (HDBSCAN*): MST der gegenseitigen Erreichbarkeit, kondensierter Clusterbaum und Excess-of-Mass-Auswahl, mit Zugehörigkeitswahrscheinlichkeit und Ausreißerwert je Punkt — verarbeitet variable Dichte ohne Epsilon, wie die HDBSCAN-Option von ArcGIS Density-based Clustering.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer (projiziertes KBS; Distanzen in dessen Einheiten)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (eine Kopie der Eingabe mit Clusterfeldern). Wenn nicht angegeben, wird er im Speicher abgelegt."
              },
              "min_cluster_size": {
                "label": "Minimale Clustergröße",
                "description": "Kleinste Gruppierung, die als Cluster gilt (>= 2). Standard 5."
              },
              "min_samples": {
                "label": "Minimale Stichproben",
                "description": "Nachbarschaftsgröße für die Dichteschätzung der Kerndistanz (höher = mehr Punkte werden als Rauschen eingestuft). Standard: min_cluster_size."
              }
            }
          },
          "hot_spot_analysis_comparison": {
            "name": "Vergleich von Hotspot-Analysen",
            "description": "Zwei Getis-Ord-Hotspot-Ergebnislayer vergleichen: ihre Standorte zuordnen, jeden Übergang klassifizieren (hot_to_hot, hot_to_cold, none_to_hot, ...) und einen geseedeten Permutationstest der Gesamtübereinstimmung ausführen — wie ArcGIS Hot Spot Analysis Comparison.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erster Hotspot-Ergebnislayer (Punkte oder Polygone)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweiter Hotspot-Ergebnislayer."
              },
              "bin_field": {
                "label": "Bin-Feld",
                "description": "Signifikanzfeld, das in beiden Eingaben vorhanden ist (positiv = heiß, negativ = kalt)."
              },
              "significance": {
                "label": "Signifikanz",
                "description": "Absolutwert-Schwellenwert, unterhalb dessen ein Ort als 'none' gilt (Standard 0)."
              },
              "match_field": {
                "label": "Zuordnungsfeld",
                "description": "Optionales ID-Feld in beiden Eingaben, das zum Verknüpfen der Orte verwendet wird; andernfalls nächster Schwerpunkt."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Maximale Schwerpunktdistanz für die Zuordnung des nächsten Orts (Karteneinheiten). Unbegrenzt, wenn nicht angegeben."
              },
              "permutations": {
                "label": "Permutationen",
                "description": "Anzahl der Permutationen für den globalen Übereinstimmungstest (Standard 499)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed für den deterministischen Permutations-Zufallsgenerator (Standard 1)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "identify_narrow_polygons": {
            "name": "Schmale Polygone identifizieren",
            "description": "Polygone markieren, die an irgendeiner Stelle schmaler als eine Breitentoleranz sind (Splitter und dünne Einschnürungen), jeweils mit einem is_narrow-Flag und einer geschätzten Mindestbreite.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Polygonvektordatei, Format wird automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "width_tolerance": {
                "label": "Breitentoleranz",
                "description": "Breiten-Schwellenwert in KBS-Einheiten. Ein Polygon ist dort schmal, wo es dünner als dieser Wert ist. Erforderlich."
              },
              "min_narrow_area": {
                "label": "Minimale Engstellenfläche",
                "description": "Minimale Fläche des schmalen Abschnitts (KBS-Einheiten im Quadrat), die erforderlich ist, um ein Polygon zu markieren; kleinere schmale Flächen werden als Rauschen ignoriert. Standard width_tolerance im Quadrat, was auch die geringfügige Eckenrundung der Öffnung abfängt."
              },
              "narrow_only": {
                "label": "Nur Engstellen",
                "description": "Wenn wahr, werden nicht-schmale Objekte verworfen und nur die markierten schmalen Polygone ausgegeben. Standard falsch (alle Objekte annotieren und behalten)."
              }
            }
          },
          "idw_3d": {
            "name": "IDW 3D",
            "description": "Volumetrische Inverse-Distanz-Interpolation von 3D-Punktbeobachtungen in einen Stapel von Höhenniveaus (ein Rasterband je Niveau), mit einem Höheninflationsfaktor für die vertikal-horizontale Anisotropie und optionalen Leave-one-out-Kreuzvalidierungspunkten. Wie ArcGIS IDW3D.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-3D-Punktobjekte."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Numerisches Feld mit dem zu interpolierenden Wert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Multiband-Rasters (ein Band pro Höhenstufe). Wenn nicht angegeben, wird es im Speicher abgelegt."
              },
              "z_field": {
                "label": "Z-Feld",
                "description": "Feld, das die Höhe liefert; Standard ist das Z der Geometrie."
              },
              "power": {
                "label": "Potenz",
                "description": "Exponent der inversen Distanz (Standard 2)."
              },
              "elev_inflation_factor": {
                "label": "Höhenaufblähungsfaktor",
                "description": "Multiplikator, der vor der Berechnung der 3D-Distanz auf den vertikalen Abstand angewendet wird (Standard 1). Werte > 1 lassen die vertikale Distanz stärker zählen, entsprechend der kürzeren vertikalen Korrelationsskala der meisten volumetrischen Daten."
              },
              "x_spacing": {
                "label": "X-Abstand",
                "description": "Ausgabe-Zellengröße in X (Standard: Ausdehnung / 100)."
              },
              "y_spacing": {
                "label": "Y-Abstand",
                "description": "Ausgabe-Zellengröße in Y (Standard: wie x_spacing)."
              },
              "z_spacing": {
                "label": "Z-Abstand",
                "description": "Vertikaler Abstand zwischen den Ausgabestufen (Standard: Z-Bereich / 10)."
              },
              "z_min": {
                "label": "Z-Minimum",
                "description": "Niedrigste Ausgabestufe (Standard: das Datenminimum)."
              },
              "z_max": {
                "label": "Z-Maximum",
                "description": "Höchste Ausgabestufe (Standard: das Datenmaximum)."
              },
              "neighbors": {
                "label": "Nachbarn",
                "description": "Maximale Anzahl Stichproben pro Vorhersage (Standard 12)."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Optionale maximale (gestreckte) 3D-Suchdistanz; Stichproben jenseits davon werden ignoriert."
              },
              "output_cv_features": {
                "label": "CV-Objekte ausgeben",
                "description": "Optionaler Pfad für Leave-One-Out-Kreuzvalidierungspunkte mit beobachteten, vorhergesagten und Residualwerten."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG-Code, der dem Ausgaberaster zugewiesen wird (Standard: das KBS des Eingabelayers)."
              }
            }
          },
          "incremental_spatial_autocorrelation": {
            "name": "Inkrementelle räumliche Autokorrelation",
            "description": "Das globale Moran's I über eine Reihe zunehmender Distanzbänder berechnen und die z-Wert-Kurve mit ihrem ersten und maximalen Peak ausgeben — der belastbare Weg, eine Clusterdistanz zu wählen, wie ArcGIS Incremental Spatial Autocorrelation.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer (andere Geometrien verwenden ihren repräsentativen Punkt aus dem Stützpunktmittel). Ein projiziertes KBS verwenden."
              },
              "field": {
                "label": "Feld",
                "description": "Numerisches Feld, das auf räumliche Autokorrelation getestet wird."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler CSV-Pfad für die Tabelle pro Distanzband. Wird immer im Ergebnis zurückgegeben."
              },
              "begin_distance": {
                "label": "Anfangsdistanz",
                "description": "Distanz des ersten Bands in KBS-Einheiten. Standard: die maximale Nächster-Nachbar-Distanz (jedes Objekt hat >=1 Nachbarn)."
              },
              "increment": {
                "label": "Inkrement",
                "description": "Distanz, die bei jedem Band hinzugefügt wird, in KBS-Einheiten. Standard: die Anfangsdistanz."
              },
              "num_bands": {
                "label": "Anzahl Bänder",
                "description": "Anzahl der auszuwertenden Distanzbänder (Standard 10)."
              }
            }
          },
          "inside_3d": {
            "name": "Innerhalb in 3D",
            "description": "Bestimmt, welche 3D-Objekte (Punkte, Polylinien oder Körper) innerhalb geschlossener volumetrischer Behälter liegen, optional mit Angabe der enthaltenen Länge oder des Stützpunktanteils (ArcGIS Inside 3D). Jedes Enthaltenseinsprädikat in beiden Registrierungen projiziert auf die XY-Ebene, sodass ein Sensor über einem Grundriss oder eine Leitung unter einem Flurstück derzeit als darin liegend gilt. Behälter folgen der Dreiecksnetzkonvention der ausgelieferten buffer_3d und minimum_bounding_volume.",
            "params": {
              "target": {
                "label": "Ziel",
                "description": "Zu testende 3D-Objekte: Punkte, Polylinien oder Dreiecksnetz-Körper."
              },
              "container": {
                "label": "Container",
                "description": "Geschlossene 3D-Objekte (Dreiecksnetz-Körper), die als Container dienen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad der Tabelle mit Ziel/Container-Paaren. Wenn nicht angegeben, wird sie im Speicher abgelegt."
              },
              "mode": {
                "label": "Modus",
                "description": "'simple' (Standard) meldet, ob das Ziel innen liegt; 'complex' ergänzt die enthaltene Länge und den Innenanteil."
              },
              "output_features": {
                "label": "Ausgabeobjekte",
                "description": "Optionaler Pfad für die zugeschnittenen Innenabschnitte von Linienzielen (Modus complex). Wenn nicht angegeben, im Speicher abgelegt (wird dennoch zurückgegeben)."
              }
            }
          },
          "integrate": {
            "name": "Integrieren",
            "description": "Alle Stützpunkte aller Objekte innerhalb einer Clustertoleranz auf eine gemeinsame Position fangen, sodass nahezu zusammenfallende gemeinsame Grenzen exakt zusammenfallen, optional mit Einfügen von T-Kreuzungsstützpunkten auf nahe Kanten — wie ArcGIS Integrate.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (beliebiger Geometrietyp)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Clusterdistanz in KBS-Einheiten: Stützpunkte innerhalb dieser Distanz werden auf eine gemeinsame Position gefangen. Erforderlich."
              },
              "snap_to_edges": {
                "label": "An Kanten fangen",
                "description": "Zusätzlich einen Stützpunkt einfügen, wo der Stützpunkt eines Objekts innerhalb der Toleranz auf dem Segment eines anderen Objekts liegt (T-Kreuzungen). Standard wahr."
              }
            }
          },
          "interpolate_from_spatiotemporal_points": {
            "name": "Aus raumzeitlichen Punkten interpolieren",
            "description": "Punktbeobachtungen mit Zeitstempel in regelmäßige Zeitscheiben einteilen und jede auf ein gemeinsames Gitter interpolieren, was ein koregistriertes multidimensionales Raster ergibt, wie ArcGIS Interpolate From Spatiotemporal Points.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Punktobjekte mit Zeitstempel."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Numerisches Feld, das interpoliert wird."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Zeitstempelfeld: numerische Sekunden seit der Epoche oder ISO-8601-Text."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Rasterpfad für die erste Zeitscheibe. Spätere Zeitscheiben werden daneben mit dem Suffix _t<index> geschrieben. Wenn nicht angegeben, werden alle Zeitscheiben im Speicher abgelegt."
              },
              "time_step": {
                "label": "Zeitschritt",
                "description": "daily | weekly | monthly (Standard) | quarterly | yearly."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabe-Zellengröße in Karteneinheiten. Standard ist 1/50 der größeren Ausdehnungsdimension."
              },
              "method": {
                "label": "Methode",
                "description": "idw (Standard) | nearest | mean | median."
              },
              "power": {
                "label": "Potenz",
                "description": "IDW-Distanzexponent (Standard 2)."
              },
              "neighbors": {
                "label": "Nachbarn",
                "description": "Anzahl der nächsten Beobachtungen pro Zelle (Standard 8)."
              },
              "min_points": {
                "label": "Minimale Punkte",
                "description": "Mindestanzahl Beobachtungen, damit eine Zeitscheibe interpoliert wird; dünner besetzte Zeitscheiben geben ausschließlich NoData aus statt einer irreführenden Oberfläche (Standard 3)."
              }
            }
          },
          "interpolate_shape": {
            "name": "Form interpolieren",
            "description": "Punkte/Linien/Polygone auf ein Oberflächenraster drapieren: verdichten, Z je Stützpunkt abtasten (bilinear oder nächster Nachbar), 3D-Geometrie schreiben und Oberflächenkennzahlen hinzufügen (z_min/z_max/z_mean, 3D-Oberflächenlänge, mittlere Neigung), wie ArcGIS Interpolate Shape / Add Surface Information.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (Punkte, Linien oder Polygone) mit demselben KBS wie die Oberfläche."
              },
              "surface": {
                "label": "Oberfläche",
                "description": "Abzutastendes Höhen-/Oberflächenraster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              },
              "sample_distance": {
                "label": "Abtastdistanz",
                "description": "Verdichtungsintervall in KBS-Einheiten; lange Segmente werden geteilt, damit sie der Oberfläche folgen. Standard: die Rasterzellengröße."
              },
              "method": {
                "label": "Methode",
                "description": "Oberflächenabtastung: 'bilinear' (Standard) oder 'nearest'."
              },
              "attributes": {
                "label": "Attribute",
                "description": "Kommagetrennte Liste der hinzuzufügenden Kennzahlspalten: z_min,z_max,z_mean,surf_len,avg_slope. Standard: alle."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band der Oberfläche für die Abtastung (Standard 1)."
              }
            }
          },
          "interpolate_with_barriers": {
            "name": "Mit Barrieren interpolieren",
            "description": "Punktmessungen zu einem Raster interpolieren und dabei absolute Barrieren (Küstenlinien, Grate, Verwerfungen, Mauern) beachten: der Einfluss wandert über Kosten-/geodätische Distanz um Barrieren herum, nicht hindurch — IDW oder ein lokaler Polynomkernel erster Ordnung, wie ArcGIS Kernel Interpolation With Barriers / Spline With Barriers. Die gebündelten IDW-/Kriging-/Natural-Neighbour-/Spline-Werkzeuge ignorieren alle Barrieren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer mit Messungen."
              },
              "field": {
                "label": "Feld",
                "description": "Numerisches Feld der Punkte mit dem zu interpolierenden Wert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Interpoliertes Ausgaberaster (GeoTIFF). Falls weggelassen, im Speicher abgelegt."
              },
              "barriers": {
                "label": "Barrieren",
                "description": "Optionaler Barrieren-Vektorlayer (Polylinien oder Polygone). Wird als unpassierbare Zellen gerastert, sodass der Einfluss um sie herumgeführt werden muss. Weglassen für eine barrierefreie Kontrolle."
              },
              "method": {
                "label": "Methode",
                "description": "'idw' (Standard) oder 'local_polynomial' (gewichtete ebene Anpassung erster Ordnung mit einem Gauß-Kernel über die geodätische Distanz)."
              },
              "power": {
                "label": "Potenz",
                "description": "IDW-Distanzabnahme-Exponent (Standard 2)."
              },
              "bandwidth": {
                "label": "Bandbreite",
                "description": "Gauß-Kernel-Bandbreite für local_polynomial (Distanzeinheiten). Standard: der Suchradius, andernfalls die Gitterausdehnung."
              },
              "radius": {
                "label": "Radius",
                "description": "Suchradius als geodätische (Kosten-)Distanz: Stichproben jenseits davon beeinflussen eine Zelle nicht, und innerhalb davon unerreichbare Zellen werden NoData. Meter für ein geographisches KBS, sonst KBS-Einheiten. Standard: unbegrenzt."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabe-Zellengröße in KBS-Einheiten (Grad für ein geographisches KBS). Standard: so bemessen, dass die längere Achse ~256 Zellen umfasst."
              }
            }
          },
          "intersect_3d": {
            "name": "In 3D verschneiden",
            "description": "Berechnet das von überlappenden geschlossenen 3D-Körpern gemeinsam eingenommene Volumen, paarweise, mit optionalem umhüllendem Körper je Verschneidung (ArcGIS Intersect 3D). union_3d ist das einzige 3D-Overlay in beiden Registrierungen und beantwortet nur die Frage nach dem Gesamtvolumen; inside_3d ist ein Enthaltenseinsprädikat für Punkte und Linien, und polygon_volume / surface_volume messen gegen eine Referenzebene. Die Volumen je Körper sind exakt; die Verschneidung wird durch Voxelbelegung bei einer ausgewiesenen Auflösung geschätzt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Geschlossene 3D-Körperobjekte (Dreiecksnetz-MultiPolygone mit Z, wie sie buffer_3d und minimum_bounding_volume ausgeben)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Optionaler zweiter Körperlayer. Wenn nicht angegeben, wird jedes Paar innerhalb von 'input' verschnitten (Einzeleingabemodus von ArcGIS)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabetabelle der sich schneidenden Paare, eine Zeile pro nicht-leerer Verschneidung. Wenn nicht angegeben, wird sie im Speicher abgelegt."
              },
              "mode": {
                "label": "Modus",
                "description": "'table' (Standard): nur Attribute. 'solid': zusätzlich den umhüllenden Körper jeder Verschneidung als Geometrie ausgeben. Das gemessene Volumen ist immer ein Attribut — es wird kein exakt vereinigtes Netz beansprucht."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Voxelzellen entlang der längsten Achse des gemeinsamen Begrenzungsrahmens jedes Paars (Standard 64). Höhere Werte sind genauer und langsamer."
              }
            }
          },
          "intersect_3d_line_with_surface": {
            "name": "3D-Linie mit Oberfläche verschneiden",
            "description": "Teilt 3D-Linien an jedem Punkt, an dem sie eine Höhenoberfläche oder ein Multipatch kreuzen, kennzeichnet jedes Teilstück als oberhalb oder unterhalb und gibt die Kreuzungspunkte aus (ArcGIS Intersect 3D Line With Surface / Intersect 3D Line With Multi Patch). intersect_3d aus Runde 17 nimmt geschlossene Körper statt Linien, inside_3d ist ein Enthaltenseinsprädikat, das weder die Geometrie schneidet noch die Kreuzungen lokalisiert, und interpolate_shape drapiert eine Linie auf eine Oberfläche und verwirft das Linien-Z, auf dem der Vergleich beruht.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "3D-Linienlayer mit Z-tragenden Stützpunkten."
              },
              "surface": {
                "label": "Oberfläche",
                "description": "Höhenraster, gegen das geschnitten wird. Erforderlich, sofern nicht 'multipatch' angegeben ist."
              },
              "multipatch": {
                "label": "Multipatch",
                "description": "Multipatch-Layer (Dreiecks-Multipolygone), gegen den anstelle einer Rasteroberfläche geschnitten wird."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienlayer, an jeder Kreuzung geteilt. Wenn nicht angegeben, wird er im Speicher abgelegt."
              },
              "output_points": {
                "label": "Punkte ausgeben",
                "description": "Ausgabe-Punktlayer der Kreuzungen selbst. Wird immer erzeugt; im Speicher abgelegt, wenn kein Pfad angegeben ist."
              },
              "spacing": {
                "label": "Abstand",
                "description": "Verdichtungsschritt in der Draufsicht in Karteneinheiten (Standard: eine Oberflächenzelle). Kleinere Werte lösen Kreuzungen feiner auf, bei höherem Aufwand."
              },
              "keep_above": {
                "label": "Oberhalb behalten",
                "description": "Die Teilstücke oberhalb der Oberfläche behalten (Standard wahr)."
              },
              "keep_below": {
                "label": "Unterhalb behalten",
                "description": "Die Teilstücke unterhalb der Oberfläche behalten (Standard wahr)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band des Oberflächenrasters (Standard 1)."
              }
            }
          },
          "intersecting_layers_masks": {
            "name": "Masken sich schneidender Layer",
            "description": "Kartografische Maskenpolygone mit einem Rand um Objekte eines maskierten Layers erzeugen, aber nur dort, wo sie einen zweiten Maskierungslayer schneiden (exakter Umriss, konvexe Hülle oder Begrenzungsrahmen).",
            "params": {
              "masked_layer": {
                "label": "Maskierter Layer",
                "description": "Maskierter Vektorlayer (beliebige Geometrie): jedes Objekt, das den maskierenden Layer schneidet, erhält eine Maske. Format wird automatisch erkannt (oder ein In-Memory-Handle)."
              },
              "masking_layer": {
                "label": "Maskierungslayer",
                "description": "Maskierender Vektorlayer (beliebige Geometrie): ein maskiertes Objekt wird nur dort maskiert, wo es ein Objekt dieses Layers schneidet."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "margin": {
                "label": "Rand",
                "description": "Randabstand der Maske. Meter bei einem geografischen KBS (EPSG:4326 oder unbekannt, in Grad umgerechnet), sonst in den KBS-Einheiten des Layers. Muss positiv sein."
              },
              "mask_kind": {
                "label": "Maskenart",
                "description": "Maskenform: 'exact' (Standard, gepufferter Objektumriss), 'convex_hull' (erweiterte konvexe Hülle) oder 'box' (Begrenzungsrahmen + Rand)."
              },
              "id_field": {
                "label": "ID-Feld",
                "description": "Optionales Feld des maskierten Layers, dessen Wert als 'source_id' auf jede Maske kopiert wird. Standard ist der Index des Quellobjekts."
              }
            }
          },
          "intervisibility": {
            "name": "Intervisibilität",
            "description": "Prüft jede Sichtlinie gegen 3D-Vektorhindernisse und markiert sie als sichtbar oder blockiert, mit Angabe, welches Hindernis sie wo blockiert hat (ArcGIS Intervisibility). line_of_sight, visibility_index, viewshed und skyline_analysis arbeiten alle gegen ein Oberflächenraster; keines kann gegen 3D-Multipatch-Hindernisse wie Gebäude prüfen, deren Überhänge und Arkaden beim Einbrennen in ein DEM verloren gehen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Sichtlinien: 3D-Polylinien, deren erster Stützpunkt der Beobachter und deren letzter Stützpunkt das Ziel ist."
              },
              "obstructions": {
                "label": "Hindernisse",
                "description": "Ein oder mehrere kommagetrennte 3D-Hindernislayer (Dreiecksnetz-MultiPolygone mit Z)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Sichtlinien mit den angehängten Sichtbarkeitsfeldern. Wenn nicht angegeben, werden sie im Speicher abgelegt."
              },
              "visible_field": {
                "label": "Sichtbarkeitsfeld",
                "description": "Name des booleschen Sichtbarkeitsfelds (Standard 'VISIBLE'), entsprechend dem ArcGIS-Parameter."
              },
              "observer_offset": {
                "label": "Beobachterversatz",
                "description": "Höhe, die vor dem Test zum Beobachter-Endpunkt addiert wird, in KBS-Einheiten (Standard 0). Modelliert Augen- oder Instrumentenhöhe."
              },
              "target_offset": {
                "label": "Zielversatz",
                "description": "Höhe, die vor dem Test zum Ziel-Endpunkt addiert wird, in KBS-Einheiten (Standard 0)."
              },
              "visible_only": {
                "label": "Nur sichtbare",
                "description": "Nur die unverdeckten Sichtlinien ausgeben (Standard falsch)."
              }
            }
          },
          "is_closed_3d": {
            "name": "Ist in 3D geschlossen",
            "description": "Markiert, welche 3D-Multipatch-Objekte wasserdichte geschlossene Körper und welche offene Oberflächen sind, mit diagnostischen Zählungen ungepaarter Randkanten, nicht-mannigfaltiger Kanten und Konsistenz der Umlaufrichtung (ArcGIS Is Closed 3D). Jedes volumetrische Werkzeug im Katalog — union_3d, inside_3d, minimum_bounding_volume, buffer_3d — setzt geschlossene Eingaben voraus und liefert für ein offenes Netz eine bedeutungslose Zahl, und nichts erlaubte, diese Voraussetzung vorab zu prüfen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "3D-Objekte (Dreiecksnetz-MultiPolygone mit Z, wie sie buffer_3d, minimum_bounding_volume und voxel_isosurface ausgeben)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad: die Eingabeobjekte mit den angehängten Diagnosefeldern. Wenn nicht angegeben, wird er im Speicher abgelegt."
              },
              "closed_only": {
                "label": "Nur geschlossene",
                "description": "Nur die Objekte ausgeben, die geschlossene Körper sind (Standard falsch: jedes Objekt wird mit seinem Urteil ausgegeben)."
              }
            }
          },
          "kernel_density_ratio": {
            "name": "Kerndichteverhältnis",
            "description": "Relatives Risikoverhältnis zweier Kerndichteoberflächen: einen Zähler-Punktlayer (Fälle) und einen Nenner-Punktlayer (Risikobevölkerung) mit demselben quartischen Kernel und gemeinsamer Bandbreite auswerten und dann zellenweise dividieren — wie ArcGIS Calculate Kernel Density Ratio. Eine Nenneruntergrenze schreibt NoData, wo die Bevölkerung zu dünn ist (keine inf/NaN-Lecks), und eine optionale natürliche Log-Transformation macht Über-/Unterrepräsentation symmetrisch. Das Dichteverhältnis, das die einlagige heat_map nicht ausdrücken kann.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zähler-Punktlayer (z. B. Fälle / Vorfälle)."
              },
              "denominator": {
                "label": "Nenner",
                "description": "Nenner-Punktlayer (z. B. Bevölkerung / exponierte Risikogruppe)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Verhältnisrasters. Wenn nicht angegeben, wird es im Speicher abgelegt."
              },
              "weight_field": {
                "label": "Gewichtungsfeld",
                "description": "Numerisches Feld zur Gewichtung der Zählerpunkte (Standard: jeder Punkt zählt 1)."
              },
              "denominator_weight_field": {
                "label": "Nenner-Gewichtungsfeld",
                "description": "Numerisches Feld zur Gewichtung der Nennerpunkte (Standard: jeder Punkt zählt 1)."
              },
              "bandwidth": {
                "label": "Bandbreite",
                "description": "Gemeinsame Kernel-Bandbreite / Suchradius (Meter für ein geographisches KBS, sonst KBS-Einheiten). Standard: Silverman-Regel aus der kombinierten Punktstreuung."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabe-Zellengröße in KBS-Einheiten (Standard: größere Ausdehnungsseite / 200)."
              },
              "log_ratio": {
                "label": "Log-Verhältnis",
                "description": "Wenn wahr, wird der natürliche Logarithmus des Verhältnisses ausgegeben (symmetrisch um 0). Standard falsch."
              },
              "denominator_floor": {
                "label": "Nenner-Untergrenze",
                "description": "Zellen, deren Nennerdichte unter diesem Wert liegt (oder null ist), werden NoData, um Divisionsexplosionen zu vermeiden. Standard 0 (nur ein exakt null Nenner wird maskiert)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG zur Kennzeichnung der Ausgabe (Standard: aus dem Zählerlayer)."
              }
            }
          },
          "kernel_interpolation_with_barriers": {
            "name": "Kerninterpolation mit Barrieren",
            "description": "Interpoliert Punktbeobachtungen mit einer kernelgewichteten Polynomanpassung im gleitenden Fenster, wobei die Distanz als kürzester Pfad UM absolute Barrieren herum statt direkt hindurch gemessen wird (ArcGIS Kernel Interpolation With Barriers). Ergänzt das ausgelieferte diffusion_interpolation_with_barriers, das stattdessen eine Wärmegleichung löst statt einen expliziten Kernel anzuwenden. Jeder andere Interpolator in beiden Registrierungen nutzt euklidische Distanz, sodass alle geradewegs über Landzungen und Verwerfungen hinweg interpolieren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktlayer mit den Beobachtungen."
              },
              "z_field": {
                "label": "Z-Feld",
                "description": "Numerisches Feld, das interpoliert wird."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Rasterpfad für vorhergesagte Werte. Wenn nicht angegeben, wird es im Speicher abgelegt."
              },
              "output_error": {
                "label": "Fehler ausgeben",
                "description": "Optionaler Pfad für das Raster des lokalen gewichteten Residuen-RMS — die gewichtete Streuung der Nachbarresiduen um die lokale Anpassung. Dies ist ein Maß für die Anpassungsgüte, NICHT ein Vorhersage-Standardfehler im Stil von ArcGIS (er berücksichtigt weder effektive Freiheitsgrade noch Hebelwirkung). Wenn nicht angegeben, im Speicher abgelegt (wird dennoch zurückgegeben)."
              },
              "barriers": {
                "label": "Barrieren",
                "description": "Optionaler Polylinienlayer absoluter Barrieren. Ohne Angabe reduziert sich das Werkzeug auf eine einfache Kernel-Interpolation."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabe-Zellengröße in KBS-Einheiten. Standard ist etwa 1/100 der größeren Ausdehnungsseite."
              },
              "kernel": {
                "label": "Kernel",
                "description": "exponential, gaussian, quartic, epanechnikov, polynomial5 (Standard) oder constant."
              },
              "bandwidth": {
                "label": "Bandbreite",
                "description": "Kernel-Bandbreite in KBS-Einheiten. Standard ist ein datengetriebener Wert aus dem mittleren Nächster-Nachbar-Abstand."
              },
              "power": {
                "label": "Potenz",
                "description": "Lokale Polynomordnung: 0 (gewichteter Mittelwert) oder 1 (Standard, ebene Anpassung)."
              },
              "ridge": {
                "label": "Kamm",
                "description": "Ridge-Parameter zur Stabilisierung der lokalen Kleinste-Quadrate-Anpassung, wo eine Nachbarschaft degeneriert ist (Standard 1e-6)."
              },
              "max_neighbors": {
                "label": "Maximale Nachbarn",
                "description": "Obergrenze für die Anzahl der Beobachtungen, die zu jeder lokalen Anpassung beitragen (Standard 32)."
              }
            }
          },
          "kml_to_features": {
            "name": "KML zu Objekten",
            "description": ".kml-/.kmz-Placemarks in Punkt-, Linien- und Polygonlayer mit name/description-Attributen einlesen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad zu einer .kml-Datei oder einem .kmz-Archiv (gezipptes KML)."
              },
              "points_output": {
                "label": "Punktausgabe",
                "description": "Optionaler Ausgabepfad für einen Punktvektor (Treiber aus der Erweiterung). Wird nur geschrieben, wenn das KML Punkt-Placemarks enthält."
              },
              "lines_output": {
                "label": "Linienausgabe",
                "description": "Optionaler Ausgabepfad für einen Linienvektor (Treiber aus der Erweiterung). Wird nur geschrieben, wenn das KML Linien-Placemarks enthält."
              },
              "polygons_output": {
                "label": "Polygonausgabe",
                "description": "Optionaler Ausgabepfad für einen Polygonvektor (Treiber aus der Erweiterung). Wird nur geschrieben, wenn das KML Polygon-Placemarks enthält."
              }
            }
          },
          "landtrendr": {
            "name": "LandTrendr",
            "description": "LandTrendr-Zeitsegmentierung einer jährlichen Bildreihe (wie ArcGIS Analyze Changes Using LandTrendr): Despiking, gierige stützpunktbasierte stückweise lineare Anpassung und Extraktion der größten Störung (Jahr, Stärke, Dauer) je Pixel. Die Veränderungshistorien-Segmentierung je Pixel, die das zweizeitige change_vector_analysis und das Einzeltrend-Werkzeug generate_trend_raster nicht leisten können.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Kommagetrennte Pfade jährlicher Raster in zeitlicher Reihenfolge (z. B. spectral_index-NBR-Ausgaben; >= 4)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster: Jahr der größten Störung pro Pixel. Wenn nicht angegeben, wird es im Speicher abgelegt."
              },
              "years": {
                "label": "Jahre",
                "description": "Kommagetrennte Jahre passend zu 'inputs' (Standard 0,1,2,...)."
              },
              "magnitude_output": {
                "label": "Betragsausgabe",
                "description": "Optionales Raster der Störungsmagnitude (Indexänderung)."
              },
              "duration_output": {
                "label": "Dauer ausgeben",
                "description": "Optionales Raster der Störungsdauer (Jahre)."
              },
              "direction": {
                "label": "Richtung",
                "description": "Richtung der Störung im Index: 'loss' (ein Abfall; Standard) oder 'gain' (ein Anstieg)."
              },
              "max_segments": {
                "label": "Maximale Segmente",
                "description": "Maximale Anzahl Segmente (Standard 6)."
              },
              "spike_threshold": {
                "label": "Spitzen-Schwellenwert",
                "description": "Despike-Stärke 0..1 (Anteil des Wertebereichs der Reihe; Standard 0,75; 1 deaktiviert)."
              },
              "min_valid": {
                "label": "Minimale gültige",
                "description": "Minimale Anzahl gültiger Beobachtungen pro Pixel (Standard 4)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das aus jeder Eingabe gelesen wird (Standard 1)."
              }
            }
          },
          "las_height_metrics": {
            "name": "LAS-Höhenkennzahlen",
            "description": "Kronenhöhenkennzahlen je Zelle aus LiDAR-Höhen rastern (wie ArcGIS LAS Height Metrics): Mittelwert, Standardabweichung, Schiefe, Kurtosis, MAD und Höhenperzentile als Multiband-Gitter — die forstliche Momente-/Perzentilsuite, die die gebündelten height_above_ground und lidar_point_stats nicht in einem Durchgang ausgeben.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-LAS/LAZ-Punktwolke der Höhen über Grund (zuerst mit height_above_ground normalisieren)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Multiband-Rasters. Wenn nicht angegeben, wird es im Speicher abgelegt."
              },
              "metrics": {
                "label": "Kennzahlen",
                "description": "Kommagetrennte Teilmenge von mean,std,skewness,kurtosis,mad (Standard 'mean,std,skewness,kurtosis,mad')."
              },
              "height_percentiles": {
                "label": "Höhenperzentile",
                "description": "Kommagetrennte Perzentile in [0,100], z. B. '50,95,99' (Standard '50,95,99'; leer für keine)."
              },
              "min_height": {
                "label": "Minimale Höhe",
                "description": "Punkte mit einer Höhe unter diesem Wert ausschließen (Boden-/Rausch-Abschneidung). Standard 0."
              },
              "min_points": {
                "label": "Minimale Punkte",
                "description": "Zellen mit weniger gültigen Punkten werden NoData. Standard 4."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabe-Zellengröße in KBS-Einheiten. Standard 10."
              }
            }
          },
          "less_than_or_equal_to": {
            "name": "KleinerOderGleich",
            "description": "Prüft zellenweise, ob das erste Raster kleiner oder gleich dem zweiten ist.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erstes Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweites Eingaberaster (Pfadzeichenkette oder typisiertes Rasterobjekt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabe-Rasterdatei. Wenn ausgelassen, bleibt die Ausgabe im Speicher und wird als memory://-Rasterhandle zurückgegeben."
              }
            }
          },
          "line_density": {
            "name": "Liniendichte",
            "description": "Dichte linearer Objekte (Länge je Flächeneinheit) in einer kreisförmigen Nachbarschaft um jede Rasterzelle — Straßen-, Gewässer- oder Störungsdichte — durch Zuschneiden jedes Liniensegments auf den Suchradiuskreis (geschlossene Form) und Division der summierten gewichteten Länge durch pi*r^2. Wie ArcGIS Line Density; das Vektorlinien-Gegenstück, das der gebündelten reinen Punkt-heat_map und der kategorialen edge_density fehlt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polylinienvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Dichterasters (Treiber aus der Erweiterung). Wenn nicht angegeben, wird es im Speicher abgelegt."
              },
              "weight_field": {
                "label": "Gewichtungsfeld",
                "description": "Numerisches Feld zur Gewichtung jeder Linie (z. B. Fahrspuren, Verkehr, Bevölkerung). Standard: jede Linie hat Gewicht 1."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius (Meter für ein geographisches KBS, sonst KBS-Einheiten). Standard: kürzere Ausdehnungsseite / 25."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabe-Zellengröße (gleiche Einheiten wie search_radius). Standard: search_radius / 10."
              },
              "area_units": {
                "label": "Flächeneinheiten",
                "description": "Flächeneinheit der Dichtewerte: 'square_map_units' (Standard), 'square_meters', 'square_kilometers', 'square_miles' oder 'square_feet'."
              }
            }
          },
          "line_of_sight": {
            "name": "Sichtlinie",
            "description": "Punkt-zu-Punkt-Sichtbarkeit über ein DEM: für jedes Beobachter-Ziel-Paar die Sichtlinie, aufgeteilt in sichtbare und verdeckte Segmente, plus ein Ziel-sichtbar-Flag ausgeben, wie ArcGIS Line Of Sight.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-Höhenraster (projiziertes KBS; Distanzen/Höhen in dessen Einheiten)."
              },
              "observers": {
                "label": "Beobachter",
                "description": "Beobachter-Punktvektorlayer."
              },
              "targets": {
                "label": "Ziele",
                "description": "Ziel-Punktvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienvektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "observer_offset": {
                "label": "Beobachterversatz",
                "description": "Beobachterhöhe über Grund, in DEM-Einheiten (Standard 1,75)."
              },
              "target_offset": {
                "label": "Zielversatz",
                "description": "Zielhöhe über Grund, in DEM-Einheiten (Standard 0)."
              },
              "pair_field": {
                "label": "Paarfeld",
                "description": "Optionales Feld in beiden Layern; Beobachter und Ziele werden gepaart, wo dieses Feld übereinstimmt (statt alle mit allen)."
              },
              "band": {
                "label": "Band",
                "description": "Abzutastendes DEM-Band (Standard 1)."
              }
            }
          },
          "line_statistics": {
            "name": "Linienstatistik",
            "description": "Eine Nachbarschaftsstatistik eines Linienattributs rastern (Mittelwert, Mehrheit, Median, Min/Max, Spannweite, Vielfalt oder Gesamtlänge), indem jedes Segment auf den Suchradiuskreis zugeschnitten und die Werte längengewichtet werden — wie ArcGIS Line Statistics; das Attributoberflächen-Gegenstück zu line_density, das der gebündelten Suite fehlt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polylinienvektorlayer."
              },
              "field": {
                "label": "Feld",
                "description": "Numerisches Feld, das zusammengefasst wird. Erforderlich für jede Statistik außer 'length'."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Rasterpfad (Treiber aus der Erweiterung). Wenn nicht angegeben, wird es im Speicher abgelegt."
              },
              "statistic": {
                "label": "Statistik",
                "description": "'mean' (Standard), 'majority', 'maximum', 'median', 'minimum', 'minority', 'range', 'variety' oder 'length'."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nachbarschaftsradius in KBS-Einheiten. Standard: kürzere Ausdehnungsseite / 25."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabe-Zellengröße in KBS-Einheiten. Standard: search_radius / 10."
              }
            }
          },
          "local_bivariate_relationships": {
            "name": "Lokale bivariate Beziehungen",
            "description": "Für jedes Objekt klassifizieren, wie zwei Variablen in seiner lokalen Nachbarschaft zusammenhängen (nicht signifikant, positiv/negativ linear, konkav, konvex, undefiniert), aus lokalen linearen und quadratischen Anpassungen, einer Abhängigkeitsstatistik der Entropiereduktion und einem geseedeten Permutationstest-p-Wert — wie ArcGIS Local Bivariate Relationships.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer mit den beiden Variablenfeldern."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (eine Kopie der Eingabe mit Beziehungsfeldern). Wenn nicht angegeben, wird er im Speicher abgelegt."
              },
              "field1": {
                "label": "Feld 1",
                "description": "Feldname der ersten (erklärenden) Variable."
              },
              "field2": {
                "label": "Feld 2",
                "description": "Feldname der zweiten (abhängigen) Variable."
              },
              "neighbors": {
                "label": "Nachbarn",
                "description": "Anzahl der nächsten Nachbarn k, die jede lokale Stichprobe definieren (Standard 12; muss >= 5 sein)."
              },
              "permutations": {
                "label": "Permutationen",
                "description": "Anzahl der Permutationen für den Signifikanztest (Standard 199; 0 deaktiviert)."
              },
              "significance": {
                "label": "Signifikanz",
                "description": "Pseudo-p-Wert-Schwellenwert, ab dem eine Beziehung als signifikant gilt (Standard 0,05)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed für den Permutations-Zufallszahlengenerator (Standard 1), für reproduzierbare Ergebnisse."
              }
            }
          },
          "local_outlier_analysis": {
            "name": "Lokale Ausreißeranalyse",
            "description": "Raum-Zeit-Analyse lokaler Ausreißer (Anselins lokales Moran's I auf einem H3-Raum-Zeit-Würfel): jede Zelle x Zeitklasse als High-High-/Low-Low-Cluster oder High-Low-/Low-High-Ausreißer mit geseedetem Permutations-p-Wert klassifizieren und dann je Zelle über die Zeit zusammenfassen — wie ArcGIS Local Outlier Analysis. Die Raum-Zeit-Erweiterung des gebündelten, rein räumlichen local_morans_i_lisa.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktlayer zeitgestempelter Ereignisse (Länge/Breite)."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Feld mit der Zeit jedes Punkts: eine Zahl oder ein ISO-8601-Zeitstempel."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-H3-Polygon-Zusammenfassungslayer. Wenn nicht angegeben, wird er im Speicher abgelegt."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Numerisches Feld, das pro Bin aggregiert wird (Standard: Punktanzahl)."
              },
              "time_step": {
                "label": "Zeitschritt",
                "description": "Breite eines Zeitschritts in den Einheiten von time_field (Standard 1)."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "H3-Auflösung 0..15 (Standard 7)."
              },
              "kring": {
                "label": "K-Ring",
                "description": "Räumlicher Nachbarschaftsradius als k-Ring (Standard 1)."
              },
              "time_window": {
                "label": "Zeitfenster",
                "description": "Halbe Breite der zeitlichen Nachbarschaft in Schritten (Standard 1)."
              },
              "permutations": {
                "label": "Permutationen",
                "description": "Permutationen für den Signifikanztest (Standard 99; 0 deaktiviert)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed für den Permutations-Zufallsgenerator (Standard 1)."
              }
            }
          },
          "local_polynomial_interpolation": {
            "name": "Lokale Polynominterpolation",
            "description": "An jeder Zelle ein Polynom 1./2./3. Ordnung innerhalb einer kernelgewichteten gleitenden Nachbarschaft anpassen und eine Vorhersageoberfläche, eine Oberfläche des Vorhersagestandardfehlers oder eine Konditionszahloberfläche erzeugen. Anders als das gebündelte globale trend_surface wird das Polynom lokal neu angepasst. Wie ArcGIS Local Polynomial Interpolation.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktobjekte mit dem zu interpolierenden Wert."
              },
              "z_field": {
                "label": "Z-Feld",
                "description": "Numerisches Feld mit dem zu interpolierenden Wert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Rasterpfad. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabe-Zellengröße in Karteneinheiten (Standard: Eingabeausdehnung / 200)."
              },
              "order": {
                "label": "Ordnung",
                "description": "Polynomordnung: 1 (Standard), 2 oder 3."
              },
              "kernel": {
                "label": "Kernel",
                "description": "'exponential' (Standard), 'gaussian', 'quartic', 'epanechnikov', 'fifth_order' oder 'constant'."
              },
              "bandwidth": {
                "label": "Bandbreite",
                "description": "Feste Kernel-Bandbreite in Karteneinheiten. Wenn nicht angegeben, wird eine adaptive Bandbreite verwendet: die Distanz zur 'neighbors'-ten nächsten Stichprobe."
              },
              "neighbors": {
                "label": "Nachbarn",
                "description": "Stichproben pro lokaler Anpassung für die adaptive Bandbreite (Standard: 3-mal die Anzahl der Polynomterme)."
              },
              "weight_field": {
                "label": "Gewichtungsfeld",
                "description": "Optionales Feld mit Messgewichten pro Beobachtung."
              },
              "condition_number": {
                "label": "Konditionszahl",
                "description": "Vorhersage verweigern, wo die Konditionszahl des lokalen Designs diesen Schwellenwert überschreitet (Standard: keine Grenze)."
              },
              "output_type": {
                "label": "Ausgabetyp",
                "description": "'prediction' (Standard), 'standard_error' oder 'condition_number'."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG-Code, der dem Ausgaberaster zugewiesen wird (Standard: das KBS des Eingabelayers)."
              }
            }
          },
          "locate_lines_along_routes": {
            "name": "Linien entlang von Routen lokalisieren",
            "description": "Linien- oder Polygonobjekte auf gemessene Routen legen, um Linienereignisse mit Von-/Bis-Messwert (RID, FMEAS, TMEAS) zu erzeugen, wie ArcGIS Locate Features Along Routes (Linien-/Polygonereignisse).",
            "params": {
              "input_features": {
                "label": "Eingabeobjekte",
                "description": "Eingabe-Linien- oder Polygonvektorlayer, der entlang der Routen verortet wird."
              },
              "routes": {
                "label": "Routen",
                "description": "Routen-(Linien-)Vektorlayer, der die Messwerte der linearen Referenzierung liefert."
              },
              "route_id_field": {
                "label": "Routen-ID-Feld",
                "description": "Feld des Routenlayers mit der Kennung jeder Route (RID). Wenn nicht angegeben, wird der 0-basierte Objektindex der Route verwendet."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Suchradius in KBS-Einheiten. Ein Objektstützpunkt innerhalb dieser Distanz zu einer Route gilt als deckungsgleich. Erforderlich (> 0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Linienereignis-Vektors (Treiber aus der Erweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              }
            }
          },
          "locate_regions": {
            "name": "Regionen lokalisieren",
            "description": "Die beste(n) zusammenhängende(n) Region(en) einer Zielfläche aus einem Eignungsraster finden (wie ArcGIS Locate Regions): Best-first-Regionenwachstum von Eignungsmaxima aus mit Form-/Kompaktheitssteuerung und Abstand zwischen Regionen — der Standortwahlschritt, der eine fuzzy_overlay-/weighted_overlay-Oberfläche in echte Regionen verwandelt, was clump und Schwellenwertbildung nicht können.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eignungsraster (höher = besser geeignet)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster der 1-basierten Regions-IDs (sonst NoData). Wenn nicht angegeben, wird es im Speicher abgelegt."
              },
              "total_area": {
                "label": "Gesamtfläche",
                "description": "Gesamtzielfläche über alle Regionen, in KBS-Flächeneinheiten (Standard: 5 % der gültigen Fläche)."
              },
              "num_regions": {
                "label": "Anzahl Regionen",
                "description": "Anzahl der zu verortenden Regionen (Standard 1). Jede zielt auf total_area / num_regions."
              },
              "shape": {
                "label": "Form",
                "description": "Kompaktheitsgewicht 0..1: 0 = reine Eignung, 1 = runde Regionen stark bevorzugen (Standard 0,3)."
              },
              "min_distance": {
                "label": "Minimale Distanz",
                "description": "Mindestabstand zwischen Regionen, in KBS-Einheiten (Standard 0)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das gelesen wird (Standard 1)."
              }
            }
          },
          "matched_filter_target_detection": {
            "name": "Zielerkennung mit angepasstem Filter (CEM/ACE)",
            "description": "Jedes Pixel eines Multiband-Bildes gegen ein bekanntes Zielspektrum bewerten und dabei den Hintergrund mit den Szenenstatistiken unterdrücken — Constrained Energy Minimization (CEM) oder Adaptive Coherence Estimator (ACE) — mit optionaler Perzentil-Schwellenwertmaske, wie ArcGIS Detect Target Using Spectra.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Multiband-Eingaberaster (2+ Bänder)."
              },
              "target_spectrum": {
                "label": "Zielspektrum",
                "description": "Zielspektrum: ein Wert pro Band, als JSON-Array oder komma-/leerzeichengetrennte Liste (Länge muss der Bandanzahl entsprechen)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster der Erkennungswerte (F32). Wenn nicht angegeben, wird es im Speicher abgelegt."
              },
              "method": {
                "label": "Methode",
                "description": "'cem' (Constrained Energy Minimization, Standard) oder 'ace' (Adaptive Coherence Estimator, Werte in 0..1)."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Optionales Perzentil (0-100) der Score-Verteilung, oberhalb dessen eine binäre Erkennungsmaske geschrieben wird."
              },
              "mask_output": {
                "label": "Maskenausgabe",
                "description": "Ausgabepfad für die binäre Erkennungsmaske (erfordert 'threshold'). Wenn bei gesetztem Schwellenwert weggelassen, im Speicher abgelegt."
              }
            }
          },
          "maximum_likelihood_classification": {
            "name": "Maximum-Likelihood-Klassifikation",
            "description": "Überwachter Gauß-Maximum-Likelihood-Klassifikator: modelliert jede Trainingsklasse als multivariate Normalverteilung (Mittelwert + Kovarianz je Klasse), klassifiziert jedes Pixel eines Multiband-Bildes nach der größten Gauß-Log-Likelihood mit optionalen gleichen/stichprobenbasierten A-priori-Gewichten und kann ein Wahrscheinlichkeits-/Konfidenzraster je Pixel ausgeben und die unsichersten Zellen verwerfen, wie ArcGIS Maximum Likelihood Classification.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zu klassifizierendes Eingabe-Multiband-Raster (1+ Bänder; jedes Band ist ein Merkmal)."
              },
              "training": {
                "label": "Training",
                "description": "Ganzzahlig beschriftetes Trainingsraster auf demselben Gitter wie 'input': jede eigene positive Ganzzahl ist eine Klasse; NoData-, nicht positive und nicht endliche Zellen sind unbeschriftet."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Klassifikationsraster mit den Trainingsklassen-IDs. Wenn weggelassen, im Speicher abgelegt."
              },
              "prob_output": {
                "label": "Wahrscheinlichkeitsausgabe",
                "description": "Optionales F32-Ausgaberaster der A-posteriori-Wahrscheinlichkeit (Konfidenz) der Gewinnerklasse in [0,1]."
              },
              "a_priori": {
                "label": "A priori",
                "description": "A-priori-Klassengewichte: 'equal' (Standard, 1/K) oder 'sample' (proportional zur Anzahl der Trainingspixel jeder Klasse)."
              },
              "reject_fraction": {
                "label": "Rückweisungsanteil",
                "description": "Anteil in [0,1) der am wenigsten sicher klassifizierten Zellen, die unklassifiziert (NoData) bleiben. Standard 0."
              }
            }
          },
          "median_center": {
            "name": "Medianzentrum",
            "description": "Der geometrische Median (Weiszfeld-Punkt, der die summierte, optional gewichtete euklidische Distanz zu allen Eingabepunkten minimiert) — ein robuster Mittelpunkt je Fallgruppe, mit optionalen Medianattributen je Feld (ArcGIS Median Center).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              },
              "weight_field": {
                "label": "Gewichtungsfeld",
                "description": "Optionales numerisches Feld, das den Zug jedes Punktes auf den Median gewichtet."
              },
              "case_field": {
                "label": "Fallfeld",
                "description": "Optionales Feld zum Gruppieren der Punkte; ein Median je eigenem Wert."
              },
              "attribute_fields": {
                "label": "Attributfelder",
                "description": "Optionale kommagetrennte numerische Felder; der Median jedes Feldes je Gruppe wird als '<field>_med' angehängt."
              }
            }
          },
          "merge_divided_roads": {
            "name": "Getrennte Fahrbahnen zusammenführen",
            "description": "Zugeordnete Paare getrennter Fahrspuren durch einzelne Mittellinien ersetzen und dabei die Kreuzungskonnektivität bewahren; es werden nur Spuren gepaart, die ein Zusammenführungsfeld teilen und innerhalb einer Trenndistanz antiparallel verlaufen, mit Ausgabe von Verschiebungspolygonen für propagate_displacement. Wie ArcGIS Merge Divided Roads.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Straßenmittellinien-Objekte."
              },
              "merge_field": {
                "label": "Zusammenführungsfeld",
                "description": "Feld, dessen übereinstimmende Werte zwei Linien zu Kandidaten für Fahrbahnpaare machen (z. B. Straßenname oder Klasse)."
              },
              "merge_distance": {
                "label": "Zusammenführungsdistanz",
                "description": "Maximaler Abstand zwischen gepaarten Fahrbahnen, in Karteneinheiten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der zusammengeführten Mittellinie. Wenn weggelassen, im Speicher abgelegt."
              },
              "output_displacement_features": {
                "label": "Verschiebungsobjekte ausgeben",
                "description": "Optionale Polygone, die zeigen, wo Geometrie verschoben wurde, für propagate_displacement."
              },
              "character_field": {
                "label": "Zeichenfeld",
                "description": "Optionales Feld; Objekte mit einem Wert ungleich null bzw. nicht leerem Wert werden vom Zusammenführen ausgeschlossen."
              },
              "output_table": {
                "label": "Ausgabetabelle",
                "description": "Optionale Herkunftstabelle, die Ausgabeobjekte auf ihre Quellobjekte zurückführt."
              }
            }
          },
          "merge_lines_by_pseudo_node": {
            "name": "Linien an Pseudoknoten zusammenführen",
            "description": "Ketten von Liniensegmenten, die sich an Pseudoknoten vom Grad 2 treffen, zu einzelnen Polylinien zusammenführen, unter Beibehaltung echter Kreuzungen und (optional) von Attributwechseln.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Linienvektordatei, Format automatisch erkannt (oder Speicher-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "dissolve_fields": {
                "label": "Zusammenführungsfelder",
                "description": "Kommagetrennte Attributfeldnamen; zwei Segmente werden nur zusammengeführt, wenn sie in allen übereinstimmen. Wenn weggelassen, werden Segmente an jedem Knoten vom Grad 2 unabhängig von Attributen zusammengeführt."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Endpunkte innerhalb dieses Abstands (KBS-Einheiten) werden als derselbe Knoten behandelt. Standard 1e-6."
              }
            }
          },
          "merge_multidimensional_rasters": {
            "name": "Multidimensionale Raster zusammenführen",
            "description": "Fügt mehrere koregistrierte Rasterwürfel zu einem zusammen, geordnet nach Dimensionskoordinate, und löst doppelte Koordinaten je Zelle auf (ArcGIS Merge Multidimensional Rasters). aggregate_multidimensional_raster reduziert einen Würfel und composite_bands stapelt Einzelbandraster zu Bändern, aber nichts fügte Würfel entlang ihrer gemeinsamen Dimension zusammen.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Komma- oder semikolongetrennte Cube-Pfade (Multiband-Raster). Mindestens zwei."
              },
              "dimension_values": {
                "label": "Dimensionswerte",
                "description": "Optionale Koordinaten je Schicht, die jede Schicht jeder Eingabe in Eingabereihenfolge abdecken. Müssen weder sortiert noch eindeutig sein — genau das löst dieses Werkzeug auf. Ohne sie werden die Eingaben in der angegebenen Reihenfolge aneinandergehängt."
              },
              "dimension": {
                "label": "Dimension",
                "description": "Name der Dimension, nur für die Berichterstattung verwendet (Standard 'slice')."
              },
              "resolve_overlap": {
                "label": "Überlappung auflösen",
                "description": "Regel für doppelte Koordinaten: 'first' (Standard), 'last', 'mean', 'min', 'max' oder 'error'."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Relative Toleranz, um zwei Koordinaten als gleich zu behandeln (Standard 1e-9)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Cube-Raster, ein Band je zusammengeführter Schicht, in Dimensionsreihenfolge. Wenn weggelassen, im Speicher abgelegt."
              }
            }
          },
          "mgwr": {
            "name": "Multiskalige geographisch gewichtete Regression",
            "description": "GWR, bei der jeder erklärende Term seine eigene Bandbreite per AICc-Backfitting erhält (MGWR): Koeffizienten je Objekt, lokales R2, Residuen, Konditionszahl, plus die optimale Bandbreite jedes Terms mit lokaler/regionaler/globaler Interpretation und globalen AICc-/R2-Diagnosen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Objektlayer (Punkte oder andere Geometrien über ihren repräsentativen Punkt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "dependent_field": {
                "label": "Abhängiges Feld",
                "description": "Abhängiges numerisches Feld (Antwortvariable)."
              },
              "explanatory_fields": {
                "label": "Erklärende Felder",
                "description": "Kommagetrennte erklärende numerische Felder, jedes mit eigener Bandbreite angepasst."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Entfernungsabkling-Kernel: 'gaussian' (Standard) oder 'bisquare'."
              },
              "bandwidth_type": {
                "label": "Bandbreitentyp",
                "description": "'adaptive' (Standard; Bandbreite = k nächste Nachbarn) oder 'fixed' (Bandbreite = eine Distanz). Gilt für die eigene Bandbreitensuche jedes Terms."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Konvergenztoleranz des Backfitting: Abbruch, wenn die relative Änderung der RSS zwischen Durchläufen unter diesen Wert fällt (Standard 0.001)."
              },
              "max_iterations": {
                "label": "Maximale Iterationen",
                "description": "Maximale Backfitting-Durchläufe über alle Terme (Standard 30)."
              }
            }
          },
          "minimum_bounding_volume": {
            "name": "Minimales umschließendes Volumen",
            "description": "Das minimal umschließende Volumen (konvexe Hülle, Kugel oder Hüllquader) um 3D-Objekte berechnen, je Objekt, je Gruppe oder über alle Eingaben, und den Körper als Z-bewertete Dreiecksflächen mit Volumen- und Oberflächenattributen ausgeben. Wie ArcGIS Minimum Bounding Volume.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-3D-Punkt-, Multipunkt- oder Linienobjekte."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad für die Volumenflächen. Wenn weggelassen, im Speicher abgelegt."
              },
              "z_value": {
                "label": "Z-Wert",
                "description": "'geometry' (Standard), um Z aus der Geometrie zu nehmen, oder der Name eines numerischen Feldes, das Z liefert."
              },
              "geometry_type": {
                "label": "Geometrietyp",
                "description": "'convex_hull' (Standard), 'sphere' oder 'envelope'. ('concave_hull' ist in dieser Version nicht implementiert.)"
              },
              "group_option": {
                "label": "Gruppierungsoption",
                "description": "'none' (ein Volumen je Objekt, Standard), 'all' (ein einziges Volumen über alle Eingaben) oder 'list' (eines je Wert von 'group_field')."
              },
              "group_field": {
                "label": "Gruppierungsfeld",
                "description": "Feld, das Gruppen definiert, wenn 'group_option' gleich 'list' ist."
              },
              "mbv_fields": {
                "label": "MBV-Felder",
                "description": "Felder MBV_VOLUME und MBV_AREA anhängen (Standard falsch)."
              }
            }
          },
          "multicriteria_overlay": {
            "name": "Multikriterien-Overlay",
            "description": "Einen Stapel von Kriterienrastern mit rangbasierter MCDA zu einer Eignungsoberfläche kombinieren: weighted_sum, weighted_geometric_mean, OWA (Ordered Weighted Averaging) oder TOPSIS (Nähe zum Idealpunkt), mit Gewichten je Raster und from_scale/to_scale-Umskalierung, wie ArcGIS Multicriteria Overlay.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Kommagetrennte Liste von ≥2 koregistrierten Kriterienrastern (höherer Wert = geeigneter; jedes wird vor der Kombination per Min-Max auf 0..1 skaliert)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des Ausgaberasters. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "method": {
                "label": "Methode",
                "description": "Kombinationsmethode: 'weighted_sum' (Standard), 'weighted_geometric_mean', 'owa', 'topsis'."
              },
              "weights": {
                "label": "Gewichte",
                "description": "Kommagetrennte Wichtigkeitsgewichte je Raster, eines je Eingabe (Standard gleich). Auf Summe 1 normiert."
              },
              "order_weights": {
                "label": "Ordnungsgewichte",
                "description": "Nur OWA: kommagetrennte Ordnungsgewichte, eines je Eingabe, angewendet auf die je Zelle von hoch nach niedrig sortierten Kriterien (Standard gleich, wodurch OWA == gewichteter Mittelwert). Auf Summe 1 normiert."
              },
              "from_scale": {
                "label": "Von Maßstab",
                "description": "Untere Grenze der Ausgabe-Bewertungsskala (Standard 0)."
              },
              "to_scale": {
                "label": "Zu Maßstab",
                "description": "Obere Grenze der Ausgabe-Bewertungsskala (Standard 1)."
              }
            }
          },
          "multidimensional_anomaly": {
            "name": "Multidimensionale Anomalie erzeugen",
            "description": "Zeitlicher Anomaliewürfel je Schicht aus einem Rasterzeitstapel (wie ArcGIS Generate Multidimensional Anomaly): für jedes Pixel eine zeitliche Basislinie berechnen (Mittelwert/Standardabweichung oder Median über die Schichtdimension) und jede Zeitscheibe als ihre Abweichung von dieser Basislinie neu schreiben — Differenz zum Mittelwert, Prozent des Mittelwerts, z-Wert oder Differenz zum Median — mit Ausgabe eines Anomaliestapels mit einer Schicht je Eingabeschicht.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Ein Multiband-Raster (jedes Band ist ein Zeitschnitt) oder eine kommagetrennte Liste koregistrierter Raster in zeitlicher Reihenfolge."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Multiband-Anomalieraster (ein Band je Eingabeschicht). Wenn weggelassen, im Speicher abgelegt."
              },
              "method": {
                "label": "Methode",
                "description": "Anomalieberechnung: 'difference_from_mean' (Standard), 'percent_of_mean', 'z_score' oder 'difference_from_median'."
              },
              "reference_range": {
                "label": "Referenzbereich",
                "description": "Optionaler 1-basierter, inklusiver Schichtbereich 'start-end' zur Berechnung der Basislinie je Pixel (Standard: alle Schichten)."
              },
              "min_valid": {
                "label": "Minimale gültige",
                "description": "Minimale Anzahl von Nicht-NoData-Beobachtungen je Pixel innerhalb des Referenzbereichs (Standard 1); darunter ist das Pixel NoData."
              }
            }
          },
          "multidimensional_principal_components": {
            "name": "Multidimensionale Hauptkomponenten",
            "description": "Zerlegt einen Rasterwürfel in die wenigen realen Moden, die einer langen Zeitreihe zugrunde liegen, und gibt Komponentenraster, Ladungen und Eigenwerte aus, entweder als Dimensionsreduktion oder als räumliche Reduktion (ArcGIS Multidimensional Principal Components). Das gebündelte principal_component_analysis zerlegt den Bandraum innerhalb einer Szene, sodass seine Komponenten Spektralbänder statt Zeit mischen; dimension_reduction arbeitet auf Vektorattributtabellen. Beide Reduktionen stammen aus einer Kovarianz im Schichtraum, da das Pixelraum-Äquivalent Millionen Zeilen im Quadrat hätte.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Ein Multiband-Raster (jedes Band ist eine Schicht) oder eine kommagetrennte Liste koregistrierter Raster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Multiband-Raster: Komponentenscores bei 'dimension_reduction', Komponentenladungen bei 'spatial_reduction'. Wenn weggelassen, im Speicher abgelegt."
              },
              "output_loadings": {
                "label": "Ladungen ausgeben",
                "description": "Ausgabetabelle der Ladungen je Schicht (bzw. der Komponentenreihen je Schicht bei 'spatial_reduction'). Wird immer erzeugt; ohne Pfadangabe im Speicher abgelegt."
              },
              "output_eigenvalues": {
                "label": "Eigenwerte ausgeben",
                "description": "Ausgabetabelle der Eigenwerte und der jeweils erklärten Varianz. Wird immer erzeugt; ohne Pfadangabe im Speicher abgelegt."
              },
              "mode": {
                "label": "Modus",
                "description": "'dimension_reduction' (Standard; Komponenten sind räumliche Muster) oder 'spatial_reduction' (Komponenten sind Reihen entlang der Dimension)."
              },
              "dimension": {
                "label": "Dimension",
                "description": "Name der Dimension, nur im Bericht verwendet (Standard 'slice')."
              },
              "dimension_values": {
                "label": "Dimensionswerte",
                "description": "Kommagetrennte Koordinate jeder Schicht, streng aufsteigend. Standard ist der 1-basierte Schichtindex."
              },
              "number_of_pc": {
                "label": "Anzahl der Hauptkomponenten",
                "description": "Anzahl der zu behaltenden Komponenten (Standard: alle Schichten)."
              },
              "correlation": {
                "label": "Korrelation",
                "description": "Die Korrelationsmatrix statt der Kovarianzmatrix zerlegen (Standard falsch). Verwenden, wenn die Schichten unterschiedliche Skalen haben."
              }
            }
          },
          "multidimensional_raster_correlation": {
            "name": "Korrelation multidimensionaler Raster",
            "description": "Korreliert zwei Rasterwürfel zellenweise entlang ihrer gemeinsamen Dimension und erzeugt eine Karte der Pearson-, Spearman- oder Kendall-Koeffizienten sowie — im Kreuzkorrelationsmodus — den Lag, bei dem der Zusammenhang jeder Zelle maximal ist (ArcGIS Multidimensional Raster Correlation). Nichts in beiden Registrierungen kartiert dies: image_correlation reduziert ein Bildpaar auf einen Skalar, time_series_cross_correlation aus Runde 17 ist rein vektorbasiert, attribute_correlation ist eine Tabellenoperation, und bivariate_spatial_association vergleicht zwei Einzelbandraster ohne Zeitachse.",
            "params": {
              "input1": {
                "label": "Eingabe 1",
                "description": "Erster Cube: ein Multiband-Raster (jedes Band eine Schicht) oder eine kommagetrennte Liste koregistrierter Raster."
              },
              "input2": {
                "label": "Eingabe 2",
                "description": "Zweiter Cube, koregistriert mit dem ersten und mit derselben Anzahl Schichten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Korrelationsraster in [-1, 1]. Wenn weggelassen, im Speicher abgelegt."
              },
              "output_lag": {
                "label": "Lag ausgeben",
                "description": "Ausgaberaster des besten Lags je Zelle (Kreuzkorrelationsmodus); andernfalls überall der feste Lag. Wird immer erzeugt; ohne Pfadangabe im Speicher abgelegt."
              },
              "output_count": {
                "label": "Anzahl ausgeben",
                "description": "Ausgaberaster der Anzahl gepaarter Stichproben hinter jedem Koeffizienten. Wird immer erzeugt; ohne Pfadangabe im Speicher abgelegt."
              },
              "method": {
                "label": "Methode",
                "description": "'pearson' (Standard), 'spearman' oder 'kendall'."
              },
              "lag": {
                "label": "Lag",
                "description": "Feste Anzahl Schichten, um die der zweite Cube vor dem Paaren vorwärts verschoben wird (Standard 0). Im Kreuzkorrelationsmodus ignoriert."
              },
              "cross_correlation": {
                "label": "Kreuzkorrelation",
                "description": "Jeden Lag in -max_lag..=max_lag durchsuchen und den stärksten Koeffizienten behalten (Standard falsch)."
              },
              "max_lag": {
                "label": "Maximaler Lag",
                "description": "Halbe Breite der Lag-Suche in Schichten (Standard 3). Nur im Kreuzkorrelationsmodus."
              },
              "use_absolute": {
                "label": "Absolutwert verwenden",
                "description": "Im Kreuzkorrelationsmodus Lags nach absoluter Korrelation ordnen, sodass ein stark negativer Zusammenhang gewinnt (Standard wahr)."
              },
              "min_valid": {
                "label": "Minimale gültige",
                "description": "Minimale Anzahl gepaarter Stichproben, bevor ein Koeffizient geschrieben wird (Standard 3)."
              }
            }
          },
          "multilook": {
            "name": "Multilook",
            "description": "Reduziert SAR-Speckle durch inkohärente Mittelung benachbarter Looks in Entfernung und Azimut und erzeugt Intensitätsbilder mit quadratischen Pixeln (ArcGIS Multilook). Keine der Registrierungen liefert ein SAR-Werkzeug; die gebündelte lee_filter-Familie arbeitet auf bereits detektierter Intensität, daher liefert dies den vorgelagerten Schritt, der komplexe Single-Look-Daten in die detektierten Bilder verwandelt, die diese Filter erwarten. Komplexe Eingaben werden als zweibandiges I/Q-Paar gelesen; die Detektion erfolgt vor der Mittelung, und die äquivalente Anzahl der Looks wird für die nachgelagerte Speckle-Filterung ausgegeben.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-SAR-Raster: ein zweibandiges I/Q-Paar für komplexe (SLC-)Daten oder ein einzelnes Band bereits detektierter Daten (siehe 'input_domain')."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              },
              "input_domain": {
                "label": "Eingabedomäne",
                "description": "Für nicht komplexe Eingaben: was Band 1 bereits enthält: 'intensity' (Standard) oder 'amplitude'. Amplitude wird vor der Mittelung zu Intensität quadriert, da inkohärente Mittelung nur im Intensitätsbereich korrekt ist."
              },
              "complex": {
                "label": "Komplex",
                "description": "Die Eingabe als komplexes I/Q-Paar behandeln (Standard: wahr, wenn das Raster 2+ Bänder hat, sonst falsch)."
              },
              "range_looks": {
                "label": "Range-Looks",
                "description": "Anzahl der Looks in Range-Richtung (x). Standard 1 oder abgeleitet, wenn auto_looks gesetzt ist."
              },
              "azimuth_looks": {
                "label": "Azimut-Looks",
                "description": "Anzahl der Looks in Azimut-Richtung (y). Standard 1 oder abgeleitet, wenn auto_looks gesetzt ist."
              },
              "auto_looks": {
                "label": "Automatische Looks",
                "description": "Wenn wahr (Standard) und die Looks nicht explizit angegeben sind, werden sie aus dem Verhältnis der Pixelabstände abgeleitet, sodass die Ausgabe-Bodenpixel annähernd quadratisch sind."
              },
              "output_units": {
                "label": "Ausgabeeinheiten",
                "description": "amplitude, intensity (Standard) oder db."
              },
              "statistic": {
                "label": "Statistik",
                "description": "mean (Standard) oder median; median ist robuster, wo starke Streuer ein Look-Fenster dominieren."
              }
            }
          },
          "multipatch_footprint": {
            "name": "Multipatch-Umriss",
            "description": "Projiziert 3D-Multipatch-Objekte auf die XY-Ebene und führt sie zu 2D-Grundrisspolygonen zusammen, eines je Objekt oder je Gruppenfeld (ArcGIS Multipatch Footprint). layer_footprint_vector liefert ein einzelnes Ausdehnungsrechteck für einen ganzen Layer, keine Umrisse je Objekt, sodass es derzeit keinen Weg gibt, buffer_3d / voxel_isosurface / importierte Gebäudekörper in die Pipeline regularize_building_footprints einzuspeisen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "3D-Multipatch-Objekte (Dreiecksnetz-MultiPolygone mit Z)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe der 2D-Polygon-Grundrisse. Wenn weggelassen, im Speicher abgelegt."
              },
              "group_field": {
                "label": "Gruppierungsfeld",
                "description": "Optionales Feld, dessen Werte Grundrisse zusammenführen (ein Ausgabepolygon je eigenem Wert). Standard: eine Ausgabe je Eingabeobjekt."
              },
              "simplify_tolerance": {
                "label": "Vereinfachungstoleranz",
                "description": "Optionale Douglas-Peucker-Toleranz (KBS-Einheiten), angewendet auf den zusammengeführten Grundriss. Standardmäßig weggelassen, damit der rohe Umriss für regularize_building_footprints erhalten bleibt."
              }
            }
          },
          "multipatch_to_mesh": {
            "name": "Multipatch zu Mesh",
            "description": "Exportiert Multipatch- und 3D-Körpergeometrie nach OBJ oder glTF 2.0 / GLB für beliebige 3D- oder Web-Viewer (ArcGIS Multipatch To Collada). Die Suite union_3d / difference_3d / enclose_multipatch / voxel_isosurface hatte überhaupt keinen Exportpfad — nirgends in der Registrierung existierte ein Netzformat — sodass 3D-Ergebnisse nur von diesem Katalog zurückgelesen werden konnten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Multipatch-/3D-Polygon-Layer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der .glb-, .gltf- oder .obj-Datei. Die Erweiterung bestimmt das Format, sofern 'format' nicht angegeben ist."
              },
              "format": {
                "label": "Format",
                "description": "'glb' (Standard für .glb), 'gltf' (JSON mit eingebettetem Base64-Puffer) oder 'obj'. Standard aus der Ausgabeerweiterung."
              },
              "origin": {
                "label": "Ursprung",
                "description": "Verschiebung zum lokalen Ursprung: 'centroid' (Standard), 'min_corner' oder 'none'. Für die Genauigkeit erforderlich — glTF-Positionen sind 32-Bit-Gleitkommazahlen."
              },
              "y_up": {
                "label": "Y nach oben",
                "description": "Von geodätischem Z-oben zur Y-oben-Konvention von glTF wechseln (Standard wahr für glTF/GLB, falsch für OBJ)."
              },
              "name_field": {
                "label": "Namensfeld",
                "description": "Attribut, das das Netz jedes Objekts in der Ausgabe benennt."
              }
            }
          },
          "multiple_ring_buffer": {
            "name": "Mehrfachringpuffer",
            "description": "Objekte mit einer Liste von Distanzen zu konzentrischen Bändern puffern — verschachtelte Scheiben oder nicht überlappende Ringe — optional je Distanz zusammengeführt, wobei die Banddistanz als Attribut gespeichert wird.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (Punkte, Linien oder Polygone), Format automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "distances": {
                "label": "Distanzen",
                "description": "Kommagetrennte Liste von Pufferdistanzen in KBS-Einheiten, z. B. \"100,250,500\". Aufsteigend sortiert; Duplikate und nicht positive Werte werden verworfen."
              },
              "ring_type": {
                "label": "Ringtyp",
                "description": "'rings' (Standard) für nicht überlappende Ringbänder oder 'disks' für verschachtelte kumulative Puffer."
              },
              "dissolve": {
                "label": "Auflösen",
                "description": "'none' (Standard) behält ein Band je Quellobjekt; 'per_ring' vereinigt die Bänder aller Objekte je Distanz zu einem Polygon."
              },
              "distance_field": {
                "label": "Distanzfeld",
                "description": "Name des Ausgabeattributs mit der Distanz jedes Bandes. Standard 'distance'."
              }
            }
          },
          "multitemporal_coherence": {
            "name": "Multitemporale Kohärenz",
            "description": "Berechnet die interferometrische Kohärenz über einen Stapel koregistrierter SAR-Aufnahmen und reduziert sie auf Mittelwert/Min/Max/Standardabweichung und die Steigung der zeitlichen Dekorrelation, optional mit Ausgabe des Kohärenzwürfels je Paar (ArcGIS Generate Multitemporal Coherence). sar_coherence verarbeitet genau zwei Szenen, sodass die Auswahl persistenter Streuer und die zeitliche Bestimmung von Kohärenzänderungen außer Reichweite waren.",
            "params": {
              "inputs": {
                "label": "Eingaben",
                "description": "Komma- oder semikolongetrennte koregistrierte komplexe SLC-Raster (je zwei Bänder: I, dann Q). Mindestens zwei."
              },
              "dates": {
                "label": "Daten",
                "description": "Optionale Aufnahmezeitpunkte, einer je Eingabe, als Zahlen in einheitlichen Einheiten (z. B. Tage). Erforderlich für die Statistik 'decorrelation_slope'."
              },
              "pairs": {
                "label": "Paare",
                "description": "'consecutive' (Standard, i mit i+1), 'all' (jedes ungeordnete Paar) oder 'reference' (jede Szene gegen reference_index)."
              },
              "reference_index": {
                "label": "Referenzindex",
                "description": "0-basierter Index der Referenzszene für pairs='reference' (Standard 0)."
              },
              "window_size": {
                "label": "Fenstergröße",
                "description": "Schätzfenster in Zellen; ein einzelner Wert oder 'range,azimuth' (Standard 5). Gerade Werte werden auf ungerade aufgerundet."
              },
              "bias_correction": {
                "label": "Bias-Korrektur",
                "description": "Die Kohärenz-Bias-Korrektur für kleine Stichproben anwenden (Standard wahr)."
              },
              "statistics": {
                "label": "Statistiken",
                "description": "Kommagetrennt: 'mean' (Standard), 'min', 'max', 'std', 'decorrelation_slope'. Ein Ausgabeband je Statistik, in dieser Reihenfolge."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster, ein Band je angeforderter Statistik. Wenn weggelassen, im Speicher abgelegt."
              },
              "output_pairs": {
                "label": "Paare ausgeben",
                "description": "Optionales Raster, das den Kohärenz-Cube je Paar aufnimmt, ein Band je Paar."
              }
            }
          },
          "multivariate_clustering": {
            "name": "Multivariates Clustering",
            "description": "Vektorobjekte nach der Ähnlichkeit ihrer standardisierten Attributwerte clustern (geseedetes k-Means oder k-Medoids), wobei die Clusteranzahl, falls nicht angegeben, automatisch über das Calinski-Harabasz-Pseudo-F gewählt wird, wie ArcGIS Multivariate Clustering.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer, Format automatisch erkannt (oder In-Memory-Handle)."
              },
              "fields": {
                "label": "Felder",
                "description": "Kommagetrennte numerische Analysefelder (Attributraum, in dem geclustert wird)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (eine Kopie der Eingabe mit cluster_id/silhouette). Wenn weggelassen, im Speicher abgelegt."
              },
              "num_clusters": {
                "label": "Anzahl Cluster",
                "description": "Anzahl der Cluster k. Weglassen oder 0 übergeben, um k = 2..15 automatisch per Calinski-Harabasz-Pseudo-F zu bewerten."
              },
              "method": {
                "label": "Methode",
                "description": "Clustermethode: 'kmeans' (Standard) oder 'kmedoids' (PAM; geeignet für kleinere Objektanzahlen)."
              },
              "seed": {
                "label": "Seed",
                "description": "Zufalls-Seed für die deterministische k-means++-/Medoid-Initialisierung (Standard 1)."
              }
            }
          },
          "near_3d": {
            "name": "Nähe in 3D",
            "description": "Das nächste Objekt in echter 3D-Distanz finden und Distanz, nächste Position, Winkel und Deltas je Achse ausgeben, wie ArcGIS Near 3D.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Objektlayer (3D-Stützpunkte; fehlendes Z wird als 0 behandelt)."
              },
              "near_features": {
                "label": "Nahe Objekte",
                "description": "Kommagetrennte Liste der zu durchsuchenden Layer. Weglassen, um den Eingabelayer mit sich selbst zu verknüpfen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Nur nahe Objekte innerhalb dieser 3D-Distanz (Karteneinheiten) berücksichtigen. Unbegrenzt, wenn weggelassen."
              },
              "location": {
                "label": "Standort",
                "description": "Die Koordinaten des nächsten Punktes als near_x / near_y / near_z anhängen (Standard falsch)."
              },
              "angle": {
                "label": "Winkel",
                "description": "Die horizontale Peilung (near_bearing, Grad von Norden) und den Vertikalwinkel (near_vert_angle, Grad von der Horizontalen) zum nächsten Punkt anhängen (Standard falsch)."
              },
              "delta": {
                "label": "Delta",
                "description": "Achsenweise Versätze near_dx / near_dy / near_dz anhängen (Standard falsch)."
              }
            }
          },
          "neighborhood_summary_statistics": {
            "name": "Zusammenfassende Nachbarschaftsstatistik",
            "description": "Für jedes Objekt ausgewählte numerische Felder über seine Nachbarn zusammenfassen (k nächste, innerhalb einer Distanz oder Kontiguität über gemeinsame Kanten) und <field>_nbr_mean/median/std/min/max/sum sowie eine Nachbaranzahl hinzufügen, wie ArcGIS Neighborhood Summary Statistics.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (Punkte, Linien oder Polygone)."
              },
              "fields": {
                "label": "Felder",
                "description": "Kommagetrennte numerische Felder, die über die Nachbarn zusammengefasst werden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (Eingabekopie + Spalten der Nachbarschaftsstatistik). Wenn weggelassen, im Speicher abgelegt."
              },
              "neighborhood": {
                "label": "Nachbarschaft",
                "description": "'knn' (Standard), 'distance_band' oder 'contiguity' (Polygone mit gemeinsamer Kante)."
              },
              "neighbors": {
                "label": "Nachbarn",
                "description": "k für knn (Standard 8)."
              },
              "distance": {
                "label": "Distanz",
                "description": "Banddistanz für distance_band (Karteneinheiten)."
              },
              "weights": {
                "label": "Gewichte",
                "description": "'uniform' (Standard) oder 'inverse_distance' (gewichtet Mittelwert und Standardabweichung)."
              }
            }
          },
          "non_maximum_suppression": {
            "name": "Non-Maximum-Suppression",
            "description": "In jedem Überlappungscluster die Erkennung mit der höchsten Konfidenz behalten und niedriger bewertete Polygone verwerfen, deren Intersection-over-Union einen Schwellenwert überschreitet (wie ArcGIS Non Maximum Suppression) — der bewertungsbasierte Deduplizierer für Objekterkennungs-/OBIA-Ausgaben, den count_overlapping_features (zählt, behält alles), resolve_building_conflicts (verschiebt) und find_identical (nur exakt) nicht bieten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygon-Detektionen (dürfen sich überlappen)."
              },
              "confidence_score_field": {
                "label": "Konfidenzwertfeld",
                "description": "Numerisches Feld mit der Konfidenz/dem Score jeder Detektion; höher gewinnt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonpfad mit den verbleibenden Detektionen. Wenn weggelassen, im Speicher abgelegt."
              },
              "max_overlap_ratio": {
                "label": "Maximales Überlappungsverhältnis",
                "description": "IoU, oberhalb dessen eine Detektion mit niedrigerem Score unterdrückt wird (0-1, Standard 0.5)."
              },
              "class_value_field": {
                "label": "Klassenwertfeld",
                "description": "Optionales Feld; nur Detektionen derselben Klasse unterdrücken einander."
              }
            }
          },
          "observer_points": {
            "name": "Beobachterpunkte",
            "description": "Ermittelt als Bitmaske je Beobachter, welche von bis zu 32 Beobachtern jede Zelle sehen können, und schreibt das Raster der Höhe über Grund, das angibt, um wie viel ein Ziel angehoben werden müsste, um sichtbar zu werden (ArcGIS Observer Points / Viewshed 2 im OBSERVERS-Modus). Das gebündelte viewshed liefert nur eine Anzahl sichtbarer Stationen, aus der sich keine der beiden Antworten ableiten lässt: eine Anzahl von 1 sagt nicht, welcher Turm ein Flurstück abdeckt, und eine Anzahl von 0 unterscheidet nicht zwischen zwei Metern zu niedrig und hinter einem Berg.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Höhenraster (DEM oder DSM)."
              },
              "observers": {
                "label": "Beobachter",
                "description": "Punktlayer der Beobachterpositionen, höchstens 32."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Sichtbarkeitsraster: eine Beobachter-Bitmaske oder eine Anzahl bei analysis_type 'frequency'. Wenn weggelassen, im Speicher abgelegt."
              },
              "output_agl": {
                "label": "AGL ausgeben",
                "description": "Ausgaberaster der Höhe über Grund: die Höhe, um die ein Ziel angehoben werden muss, um sichtbar zu werden. Wird immer erzeugt; ohne Pfadangabe im Speicher abgelegt."
              },
              "output_table": {
                "label": "Ausgabetabelle",
                "description": "Ausgabetabelle mit einer Zeile je Beobachter sowie den gesehenen Zellen und der gesehenen Fläche. Wird immer erzeugt; ohne Pfadangabe im Speicher abgelegt."
              },
              "analysis_type": {
                "label": "Analysetyp",
                "description": "'observers' (Standard; eine Bitmaske) oder 'frequency' (eine Anzahl, passend zum mitgelieferten Sichtfeld-Werkzeug)."
              },
              "observer_offset": {
                "label": "Beobachterversatz",
                "description": "Höhe jedes Beobachters über der Oberfläche, in Z-Einheiten (Standard 2.0)."
              },
              "observer_offset_field": {
                "label": "Beobachterversatzfeld",
                "description": "Attribut mit einer Höhe je Beobachter, überschreibt 'observer_offset'."
              },
              "target_offset": {
                "label": "Zielversatz",
                "description": "Höhe des Ziels über der Oberfläche, in Z-Einheiten (Standard 0.0)."
              },
              "max_distance": {
                "label": "Maximale Distanz",
                "description": "Zellen ignorieren, die weiter als dieser Wert von einem Beobachter entfernt sind, in Karteneinheiten. Standardmäßig unbegrenzt."
              },
              "curvature": {
                "label": "Krümmung",
                "description": "Die Korrektur für Erdkrümmung und Refraktion anwenden (Standard falsch, d. h. flache Erde)."
              },
              "refractivity_coefficient": {
                "label": "Refraktionskoeffizient",
                "description": "Atmosphärischer Refraktionskoeffizient, verwendet mit 'curvature' (Standard 0.13)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band des Höhenrasters (Standard 1)."
              }
            }
          },
          "optics_clustering": {
            "name": "OPTICS-Clustering",
            "description": "Mehrskaliges dichtebasiertes Clustering per OPTICS (wie die OPTICS-Option von ArcGIS Density-based Clustering): baut eine Erreichbarkeitsordnung auf und extrahiert Cluster variierender Dichte mit der ξ-Steilheitsmethode — das mehrskalige Mitglied des Trios DBSCAN/HDBSCAN/OPTICS, das die erstellten dbscan und hdbscan nicht abdecken.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer (projiziertes KBS; Distanzen in dessen Einheiten)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad (eine Kopie der Eingabe mit Clusterfeldern). Wenn nicht angegeben, wird er im Speicher abgelegt."
              },
              "min_features_cluster": {
                "label": "Minimale Objekte pro Cluster",
                "description": "Minimale Punktanzahl für die Kerndistanz-Dichteschätzung und den kleinsten Cluster (>= 2). Standard 5."
              },
              "search_distance": {
                "label": "Suchdistanz",
                "description": "Optionale maximale Erreichbarkeitsdistanz (max. Epsilon). Standard: unbegrenzt (alle Skalen)."
              },
              "cluster_sensitivity": {
                "label": "Cluster-Empfindlichkeit",
                "description": "0-100; höher erkennt mehr/engere Cluster. Wird auf xi = 1 - sensitivity/100 abgebildet. Standard 95 (xi = 0.05)."
              }
            }
          },
          "optimal_corridor_connections": {
            "name": "Optimale Korridorverbindungen",
            "description": "Das Netz von Korridorpolygonen fester Breite mit geringsten Kosten berechnen, das jede Eingaberegion über eine Kostenoberfläche optimal verbindet, plus die Korridormittellinien. Anders als cost_connectivity (Linien ohne Breite) oder corridor (Kostenoberfläche für ein einzelnes Paar) gibt dies direkt nutzbare Korridorpolygone für das gesamte Regionennetz aus. Wie ArcGIS Optimal Corridor Connections.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zu verbindende Regionspolygon-Objekte."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Korridorpolygone. Wenn weggelassen, im Speicher abgelegt."
              },
              "cost_raster": {
                "label": "Kostenraster",
                "description": "Optionale Kostenoberfläche. Ohne sie sind die Kosten gleichförmig (euklidisch)."
              },
              "barriers": {
                "label": "Barrieren",
                "description": "Optionale Polygonobjekte, die als unpassierbar behandelt werden."
              },
              "corridor_width": {
                "label": "Korridorbreite",
                "description": "Korridorbreite in Karteneinheiten (Standard: 10 Zellen)."
              },
              "output_lines": {
                "label": "Linien ausgeben",
                "description": "Optionaler Pfad für die Korridor-Mittellinien."
              },
              "neighbor_option": {
                "label": "Nachbaroption",
                "description": "'spanning_tree' (Standard) behält nur die Korridore, die zum Verbinden aller Regionen nötig sind; 'all_pairs' erzeugt einen Korridor für jedes Regionspaar."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Analyse-Zellengröße, wenn kein Kostenraster angegeben ist (Standard: Regionsausdehnung / 200)."
              }
            }
          },
          "optimal_interpolation": {
            "name": "Optimale Interpolation",
            "description": "Ein Hintergrund-Rasterfeld mit Punktbeobachtungen über den Analyseschritt der optimalen Interpolation / Datenassimilation x_a = x_b + B Hᵀ (H B Hᵀ + R)⁻¹ (y − H x_b) korrigieren, mit einer Gauß'schen räumlichen Korrelation der gegebenen Korrelationslänge und Fehlervarianzen je Beobachtung/Hintergrund (wie ArcGIS Optimal Interpolation). Anders als IDW/Kriging/EBK, die allein aus Punkten interpolieren, mischt dies ein vorgegebenes gerastertes Feld mit Beobachtungen und kann ein Raster der Analysefehlervarianz ausgeben.",
            "params": {
              "background": {
                "label": "Hintergrund",
                "description": "Hintergrund-Rasterfeld (Prior), das korrigiert werden soll."
              },
              "observations": {
                "label": "Beobachtungen",
                "description": "Beobachtungs-Punktlayer."
              },
              "field": {
                "label": "Feld",
                "description": "Numerisches Feld des Beobachtungslayers mit dem beobachteten Wert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe des korrigierten (Analyse-)Rasters. Wenn weggelassen, im Speicher abgelegt."
              },
              "correlation_length": {
                "label": "Korrelationslänge",
                "description": "Räumliche Korrelationslänge L in KBS-Einheiten (Gauß). Standard: 5 % der längeren Seite des Hintergrunds."
              },
              "background_error_variance": {
                "label": "Hintergrund-Fehlervarianz",
                "description": "Hintergrund-Fehlervarianz σ_b² (Standard 1.0). Größer => den Beobachtungen mehr vertrauen."
              },
              "obs_error_variance": {
                "label": "Beobachtungs-Fehlervarianz",
                "description": "Beobachtungs-Fehlervarianz σ_o² (Standard 1.0), verwendet, wenn kein Fehlerfeld je Punkt angegeben ist. Größer => dem Hintergrund mehr vertrauen."
              },
              "error_field": {
                "label": "Fehlerfeld",
                "description": "Optionales Feld des Beobachtungslayers mit der Fehlervarianz jedes Punktes (überschreibt obs_error_variance, wo vorhanden und > 0)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes zu korrigierendes Hintergrundband (Standard 1)."
              },
              "max_obs": {
                "label": "Maximale Beobachtungen",
                "description": "Maximale Anzahl nächster Beobachtungen in der lokalen Lösung jeder Zelle (Standard 50, Bereich 1..=200)."
              },
              "analysis_error": {
                "label": "Analysefehler",
                "description": "Optionales Ausgaberaster der Analyse-Fehlervarianz σ_a² (≤ σ_b²)."
              }
            }
          },
          "optimal_path_as_line": {
            "name": "Optimaler Pfad als Linie",
            "description": "Verfolgt ein Kosten-Backlink-Raster von jedem Ziel zurück zu seiner Quelle und gibt die Routen geringster Kosten als Polylinien aus (ArcGIS Optimal Path As Line / Cost Path As Polyline). cost_pathway markiert die Route nur als Rasterzellen und cost_connectivity deckt nur den Fall eines Netzes aus N Standorten ab, sodass der gewöhnliche Pfad von Quelle zu Ziel keine Vektorform hatte.",
            "params": {
              "destination": {
                "label": "Ziel",
                "description": "Ziele, von denen aus verfolgt wird: ein Raster (jede Zelle ungleich null und nicht NoData) oder ein Punkt-/Multipunkt-Vektorlayer."
              },
              "backlink": {
                "label": "Backlink",
                "description": "Backlink-Richtungsraster aus cost_back_link (0 = Quelle, 1-8 = Richtung zur Quelle, 1 = Osten, gegen den Uhrzeigersinn)."
              },
              "accumulation": {
                "label": "Akkumulation",
                "description": "Optionales Raster der akkumulierten Kosten (out_distance von cost_back_link). Liefert die Gesamtkosten jedes Pfads und ist für path_type 'each_zone' und 'best_single' erforderlich."
              },
              "path_type": {
                "label": "Pfadtyp",
                "description": "Eines von 'each_cell' (Standard, ein Pfad je Zielzelle), 'each_zone' (ein Pfad je Zielzone, von ihrer günstigsten Zelle aus), 'best_single' (der einzelne günstigste Pfad)."
              },
              "zone_field": {
                "label": "Zonenfeld",
                "description": "Attribut mit der Zonen-ID für ein Vektorziel bei path_type 'each_zone'. Rasterziele verwenden den Zellenwert als Zone."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polylinienlayer. Wenn weggelassen, im Speicher abgelegt."
              }
            }
          },
          "optimized_hot_spot_analysis": {
            "name": "Optimierte Hotspot-Analyse",
            "description": "Vorfälle automatisch aggregieren, das Analysedistanzband automatisch wählen, Getis-Ord Gi* ausführen und eine FDR-korrigierte Hot-/Coldspot-Klasse ausgeben (wie ArcGIS Optimized Hot Spot Analysis) — der Workflow-Wrapper, der dem rohen gebündelten getis_ord_gi_star fehlt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Objektlayer (Vorfallpunkte oder Objekte mit einem Analysefeld)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktlayer mit Gi*-Ergebnissen. Wenn weggelassen, im Speicher abgelegt."
              },
              "analysis_field": {
                "label": "Analysefeld",
                "description": "Zu analysierendes numerisches Feld (gewichtet, keine Aggregation). Weglassen, um Vorfälle zu zählen."
              },
              "aggregation": {
                "label": "Aggregation",
                "description": "Vorfallaggregation ohne analysis_field: 'fishnet' (Gitterzählung; Standard) oder 'snap' (zusammenfallende Punkte zusammenführen)."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Aggregations-Zellen-/Fanggröße in KBS-Einheiten. Standard: längere Seite der Ausdehnung / 30."
              },
              "distance_band": {
                "label": "Distanzband",
                "description": "Analyse-Distanzband in KBS-Einheiten. Standard: automatisch anhand der maximalen Clusterintensität gewählt."
              }
            }
          },
          "optimized_outlier_analysis": {
            "name": "Optimierte Ausreißeranalyse",
            "description": "Vorfälle automatisch aggregieren, das Analysedistanzband automatisch wählen, Anselins lokales Moran's I ausführen und FDR-korrigierte Cluster-/Ausreißertypen (HH/LL/HL/LH) ausgeben — wie ArcGIS Optimized Outlier Analysis; der nicht-zeitliche Local-Moran-Wrapper, den das rohe gebündelte local_morans_i_lisa und das Raum-Zeit-Werkzeug local_outlier_analysis nicht bieten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Objektlayer (Vorfallpunkte oder Objekte mit einem Analysefeld)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktlayer mit Local-Moran-Ergebnissen. Wenn weggelassen, im Speicher abgelegt."
              },
              "analysis_field": {
                "label": "Analysefeld",
                "description": "Zu analysierendes numerisches Feld (gewichtet, keine Aggregation). Weglassen, um Vorfälle zu zählen."
              },
              "aggregation": {
                "label": "Aggregation",
                "description": "Vorfallaggregation ohne analysis_field: 'fishnet' (Gitterzählung; Standard) oder 'snap' (zusammenfallende Punkte zusammenführen)."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Aggregations-Zellen-/Fanggröße in KBS-Einheiten. Standard: längere Seite der Ausdehnung / 30."
              },
              "distance_band": {
                "label": "Distanzband",
                "description": "Analyse-Distanzband in KBS-Einheiten. Standard: automatisch anhand der maximalen Clusterintensität gewählt."
              },
              "fdr_alpha": {
                "label": "FDR-Alpha",
                "description": "False-Discovery-Rate-Niveau für die COType-Signifikanz (Standard 0.05)."
              }
            }
          },
          "ordinary_cokriging": {
            "name": "Ordinary-CoKriging-Interpolation",
            "description": "Führt multivariate räumliche Interpolation mit Hilfsvariablen durch, um die Vorhersagen der Primärvariable zu verbessern. Ideal, wenn Primärdaten spärlich, aber korrelierte Sekundärdaten reichlich vorhanden sind.",
            "params": {
              "primary_points": {
                "label": "Primäre Punkte",
                "description": "Vektorlayer mit Trainingspunkten der Primärvariable"
              },
              "primary_field": {
                "label": "Primärfeld",
                "description": "Feld mit den Werten der Primärvariable"
              },
              "auxiliary_inputs": {
                "label": "Hilfseingaben",
                "description": "Kommagetrennte Liste der Dateipfade der Hilfsvariablen"
              },
              "auxiliary_fields": {
                "label": "Hilfsfelder",
                "description": "Kommagetrennte Feldnamen der Hilfsvariablen (leer für Raster)"
              },
              "template_raster": {
                "label": "Vorlagenraster",
                "description": "Rastervorlage, die Ausgabegitter und KBS definiert"
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Kriging-Rasters"
              },
              "output_variance": {
                "label": "Varianz ausgeben",
                "description": "Optionaler Ausgabepfad des Kriging-Varianzrasters"
              },
              "neighborhood_size": {
                "label": "Nachbarschaftsgröße",
                "description": "Anzahl der nächsten Nachbarn für lokales Cokriging (Standard: alle)"
              }
            }
          },
          "pairwise_comparison_weights": {
            "name": "Gewichte aus Paarvergleich",
            "description": "Kriteriengewichte aus einer AHP-Paarvergleichsmatrix (Saaty-Skala 1-9) als normierten Haupteigenvektor ableiten, mit Konsistenzprüfung (lambda_max, Konsistenzindex, Konsistenzverhältnis) — wie ArcGIS Assign Weights By Pairwise Comparison.",
            "params": {
              "matrix": {
                "label": "Matrix",
                "description": "Die reziproke n x n-Vergleichsmatrix als zweidimensionales JSON-Array, z. B. [[1,3,5],[0.333,1,2],[0.2,0.5,1]]. Entweder dies oder `input` angeben."
              },
              "input": {
                "label": "Eingabe",
                "description": "CSV-Datei mit der Vergleichsmatrix (reine numerische Zeilen oder beschriftet mit Kopfzeile und führender Namensspalte). Entweder dies oder `matrix` angeben."
              },
              "criteria": {
                "label": "Kriterien",
                "description": "Kommagetrennte Kriteriennamen (müssen der Matrixreihenfolge entsprechen). Überschreibt CSV-Beschriftungen; Standard C1..Cn."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Tabelle — eine CSV (Erweiterung .csv) oder eine geometrielose Vektortabelle (criterion, weight, rank). Wenn weggelassen, im Speicher abgelegt."
              }
            }
          },
          "path_distance": {
            "name": "Pfaddistanz",
            "description": "Akkumulierte Distanz geringster Kosten, bei der jeder Schritt die echte 3D-Oberflächendistanz (aus einem DEM) mal einen neigungsabhängigen Vertikalfaktor (Tobler-Wanderfunktion, linear, binär) mal Reibung kostet, wie ArcGIS Path Distance.",
            "params": {
              "source": {
                "label": "Quelle",
                "description": "Quellraster; Zellen mit positiven Nicht-NoData-Werten sind Ursprünge (akkumulierte Kosten 0)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster der akkumulierten Kosten. Wenn weggelassen, im Speicher abgelegt."
              },
              "cost": {
                "label": "Kosten",
                "description": "Optionales Reibungs-/Durchquerungskostenraster (Standard gleichförmig 1)."
              },
              "surface": {
                "label": "Oberfläche",
                "description": "Optionales Höhenraster (DEM); ermöglicht 3D-Oberflächendistanz und neigungsbasierte Vertikalfaktoren."
              },
              "vertical_factor": {
                "label": "Vertikalfaktor",
                "description": "'tobler' (Standard), 'linear', 'sym_linear', 'inverse_linear' oder 'binary'."
              },
              "slope_factor": {
                "label": "Neigungsfaktor",
                "description": "Neigungsstrafkoeffizient für die linearen Faktoren (Standard 1)."
              },
              "zero_factor": {
                "label": "Nullfaktor",
                "description": "Minimale Untergrenze des (bergab gerichteten) Vertikalfaktors für linear/inverse_linear (Standard 0.1)."
              },
              "max_slope": {
                "label": "Maximale Neigung",
                "description": "Für 'binary': Neigungen steiler als diese Gradzahl sind unpassierbar (Standard 30)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band für alle Raster (Standard 1)."
              }
            }
          },
          "percentile_contours": {
            "name": "Perzentil-Höhenlinien",
            "description": "Verschachtelte Polygone ausgeben, die die extremsten Zellen einer Oberfläche umschließen, mit Schwellenwert nach Wertperzentil oder nach kumuliertem Massen-(Volumen-)Perzentil.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Raster einer kontinuierlichen Oberfläche (Dichte, Eignung, Höhe)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Polygon-Vektors (Treiber aus der Erweiterung). Wenn weggelassen, im Speicher abgelegt."
              },
              "percentiles": {
                "label": "Perzentile",
                "description": "Kommagetrennte Perzentile in [0,100] (z. B. \"50,90,95\"). Standard \"90\"."
              },
              "mode": {
                "label": "Modus",
                "description": "'value' (Standard): Zellen auf/über dem Wert des p-ten Perzentils. 'volume': höchste Zellen, die die obersten (100-p) % des kumulierten Werts tragen."
              },
              "ignore_negative": {
                "label": "Negative ignorieren",
                "description": "Negative Zellenwerte von Rangbildung und Ausgabe ausschließen. Standard falsch."
              },
              "smooth": {
                "label": "Glätten",
                "description": "Die Zellenkanten-Polygone mit Douglas-Peucker vereinfachen (Toleranz ~1,5 Zellen), um den Treppeneffekt abzumildern. Standard falsch."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das gelesen wird (Standard 1)."
              }
            }
          },
          "pivot_table": {
            "name": "Pivot-Tabelle",
            "description": "Eine Attributtabelle im Langformat ins Breitformat umformen: eine Ausgabezeile je eindeutiger Kombination der Identitätsfelder und eine Spalte je unterschiedlichem Wert des Pivotfelds, gefüllt aus dem Wertfeld. Wie ArcGIS Pivot Table.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer oder Attributtabelle in Langform."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Tabelle (Treiber aus der Erweiterung). Wenn weggelassen, im Speicher abgelegt."
              },
              "fields": {
                "label": "Felder",
                "description": "Komma-/semikolongetrennte Feldnamen, die eine Ausgabezeile identifizieren; werden unverändert übernommen."
              },
              "pivot_field": {
                "label": "Pivot-Feld",
                "description": "Feld, dessen eigene Werte zu neuen Spalten werden."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Feld, das die Zellenwerte liefert."
              },
              "aggregate": {
                "label": "Aggregieren",
                "description": "Angewendet, wenn eine Zeilen-/Spaltenzelle mehrere Quelldatensätze hat: 'first' (Standard), 'sum', 'mean', 'min', 'max', 'count'."
              }
            }
          },
          "pmtiles_extract": {
            "name": "PMTiles extrahieren",
            "description": "Einen Begrenzungsrahmen-/Zoom-Ausschnitt eines PMTiles-Archivs in ein neues Archiv extrahieren (z. B. eine Offline-Grundkarte aus einem Protomaps-Planet-Build).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der .pmtiles-Eingabedatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad der .pmtiles-Ausgabedatei."
              },
              "bbox": {
                "label": "Begrenzungsrahmen",
                "description": "WGS84-Begrenzungsrahmen als 'min_lon,min_lat,max_lon,max_lat'."
              },
              "min_zoom": {
                "label": "Minimaler Zoom",
                "description": "Niedrigste einzuschließende Zoomstufe (Standard 0, damit die Karte herausgezoomt nutzbar bleibt)."
              },
              "max_zoom": {
                "label": "Maximaler Zoom",
                "description": "Höchste einzuschließende Zoomstufe (Standard: maximale Zoomstufe des Quellarchivs)."
              },
              "max_tiles": {
                "label": "Maximale Kacheln",
                "description": "Abbrechen, wenn die Auswahl mehr Kacheln als diesen Wert anspricht (Standard 2000000)."
              },
              "url": {
                "label": "URL",
                "description": "HTTP(S)-PMTiles-URL. Entweder url oder input angeben; HTTP-Quellen verwenden Byte-Range-Anfragen (der Host muss Cross-Origin-Range-Lesezugriffe erlauben)."
              },
              "bbox_crs": {
                "label": "KBS des Begrenzungsrahmens",
                "description": "EPSG-Code der Begrenzungsrahmen-Koordinaten. Standard 4326 (WGS84 Lon/Lat); andere KBS werden nach 4326 umprojiziert."
              }
            }
          },
          "point_statistics": {
            "name": "Punktstatistik",
            "description": "Eine Gleitfensterstatistik eines Punktobjektattributs rastern: für jede Ausgabezelle sammelt eine Nachbarschaft (Kreis oder Rechteck) die Werte des gewählten numerischen Feldes der darin liegenden Punkte und reduziert sie auf mean/majority/maximum/median/minimum/minority/range/std/sum/variety. Wie ArcGIS Point Statistics; ergänzt die reinen Dichtewerkzeuge line_density/heat_map und das rein vektorbasierte neighborhood_summary_statistics.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punkt-Vektorlayer (Point / MultiPoint)."
              },
              "field": {
                "label": "Feld",
                "description": "Zusammenzufassendes numerisches Attributfeld."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Rasterpfad (Treiber aus der Erweiterung). Wenn nicht angegeben, wird es im Speicher abgelegt."
              },
              "statistic": {
                "label": "Statistik",
                "description": "Statistik je Nachbarschaft: mean (Standard), majority, maximum, median, minimum, minority, range, std, sum oder variety."
              },
              "neighborhood": {
                "label": "Nachbarschaft",
                "description": "Nachbarschaftsform: 'circle' (Standard, verwendet 'radius') oder 'rectangle' (ein Quadrat mit Seitenlänge 2*radius)."
              },
              "radius": {
                "label": "Radius",
                "description": "Nachbarschaftsradius / halbe Rechteckseite (Meter bei geografischem KBS, sonst KBS-Einheiten). Standard: kürzere Ausdehnungsseite / 20."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabe-Zellengröße (gleiche Einheiten wie der Radius). Standard: Radius / 5."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Den EPSG-Code des Eingabe-KBS überschreiben (z. B. wenn der Layer unbeschriftet ist). 4326 löst die metrische Projektion aus."
              }
            }
          },
          "points_to_line": {
            "name": "Punkte zu Linie",
            "description": "Polylinienobjekte aus Punkten aufbauen: eine Linie je unterschiedlichem line_field-Wert, Stützpunkte nach sort_field geordnet, mit optionalem Flag zum Schließen der Linie.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Punkt-Vektordatei (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad des Ausgabe-Linienvektors (Treiber aus der Erweiterung). Wenn nicht angegeben, wird er im Speicher gehalten."
              },
              "line_field": {
                "label": "Linienfeld",
                "description": "Attribut, dessen eigene Werte die Punkte in separate Linien aufteilen (eine Polylinie je Wert). Wenn weggelassen, bilden alle Punkte eine einzige Linie."
              },
              "sort_field": {
                "label": "Sortierfeld",
                "description": "Attribut, das die Stützpunktreihenfolge innerhalb jeder Linie festlegt. Numerische Werte werden numerisch sortiert, Text lexikografisch. Wenn weggelassen, wird die Reihenfolge der Eingabeobjekte verwendet."
              },
              "close_line": {
                "label": "Linie schließen",
                "description": "Den ersten Stützpunkt am Ende jeder Linie anhängen und sie so zu einem Ring schließen. Standard falsch."
              }
            }
          },
          "points_to_path": {
            "name": "Punkte zu Pfad",
            "description": "Punkte zu Polylinienobjekten verbinden, geordnet nach einem Feld und (optional) zu einem Pfad je Wert gruppiert, mit optionaler natürlicher Sortierung und Pfadschließung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Punkt-Vektordatei (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad des Ausgabe-Linienvektors (Treiber aus der Erweiterung). Wenn nicht angegeben, wird er im Speicher gehalten."
              },
              "order_field": {
                "label": "Reihenfolgefeld",
                "description": "Attribut, das die Verbindungsreihenfolge der Punkte innerhalb jedes Pfads festlegt. Numerische Werte werden numerisch sortiert, Text lexikografisch. Wenn weggelassen, wird die Reihenfolge der Eingabeobjekte verwendet."
              },
              "group_field": {
                "label": "Gruppierungsfeld",
                "description": "Attribut, das die Punkte in separate Pfade aufteilt (eine Linie je eigenem Wert). Wenn weggelassen, bilden alle Punkte einen einzigen Pfad."
              },
              "natural_sort": {
                "label": "Natürliche Sortierung",
                "description": "Textuelle Ordnungswerte natürlich sortieren, sodass 'a9' vor 'a10' kommt. Standard falsch."
              },
              "close_path": {
                "label": "Pfad schließen",
                "description": "Den ersten Stützpunkt am Ende jedes Pfads anhängen und ihn so zu einem Ring schließen. Standard falsch."
              }
            }
          },
          "polygon_neighbors": {
            "name": "Polygonnachbarn",
            "description": "Eine Polygon-Nachbarschaftstabelle (Kontiguität) erstellen: benachbarte Paare mit der Länge ihrer gemeinsamen Grenze und einer Anzahl von Punktberührungen, wie ArcGIS Polygon Neighbors.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad der Ausgabetabelle — eine CSV-Datei (Erweiterung .csv) oder eine geometrielose Vektortabelle. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "id_field": {
                "label": "ID-Feld",
                "description": "Feld, das jedes Polygon in der Tabelle identifiziert. Standard: der Objektindex."
              },
              "both_sides": {
                "label": "Beide Seiten",
                "description": "Jedes Nachbarpaar zweimal ausgeben (src→nbr und nbr→src). Standard falsch (einmal je Paar)."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Stützpunkte vor dem Abgleich der Grenzen auf ein Gitter dieser Größe (KBS-Einheiten) quantisieren. Standard 0 (exakte Koordinaten)."
              }
            }
          },
          "polygon_volume": {
            "name": "Polygonvolumen",
            "description": "Volumen und 3D-Oberfläche eines Oberflächenrasters je Polygon ober-/unterhalb der Referenzebenenhöhe jedes Objekts, wie ArcGIS Polygon Volume — das zonale Gegenstück zu surface_volume.",
            "params": {
              "surface": {
                "label": "Oberfläche",
                "description": "Eingabe-Höhenoberflächenraster."
              },
              "input": {
                "label": "Eingabe",
                "description": "Polygon-Vektorlayer (Zonen)."
              },
              "height_field": {
                "label": "Höhenfeld",
                "description": "Attributfeld mit der Referenzebenenhöhe jedes Polygons."
              },
              "direction": {
                "label": "Richtung",
                "description": "Zu integrierende Seite jeder Ebene: 'above' (Standard), 'below' oder 'both'."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes aus der Oberfläche zu lesendes Band (Standard 1)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonvektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "porous_puff": {
            "name": "Poröse Fahne",
            "description": "Analytische Advektion-Dispersion einer instantanen Schadstofffreisetzung durch Grundwasser (wie ArcGIS Porous Puff): das Puff-Zentrum von einem Freisetzungspunkt entlang eines Darcy-Geschwindigkeitsfeldes (Betrag+Richtung, wie von darcy_flow erzeugt) fortschreiben und dann die geschlossene 2D-Gauß-Puff-Konzentration in pfadausgerichteten Koordinaten auswerten, skaliert nach Porosität, Mächtigkeit, Retardation und Zerfall erster Ordnung.",
            "params": {
              "magnitude": {
                "label": "Betrag",
                "description": "Raster des Darcy-Geschwindigkeitsbetrags, wie von der 'output' von darcy_flow erzeugt. Zellengröße/Ausdehnung werden aus diesem Raster übernommen."
              },
              "direction": {
                "label": "Richtung",
                "description": "Darcy-Fließrichtungsraster (Azimut in Grad von Norden, im Uhrzeigersinn, gefälleabwärts), wie von der 'direction' von darcy_flow erzeugt. Muss mit 'magnitude' koregistriert sein."
              },
              "x": {
                "label": "X",
                "description": "X-Koordinate des Freisetzungspunkts (Karteneinheiten, gleiches KBS wie die Geschwindigkeitsraster)."
              },
              "y": {
                "label": "Y",
                "description": "Y-Koordinate des Freisetzungspunkts (Karteneinheiten)."
              },
              "mass": {
                "label": "Masse",
                "description": "Freigesetzte Schadstoffmasse (muss positiv sein)."
              },
              "porosity": {
                "label": "Porosität",
                "description": "Effektive Porosität: entweder eine numerische Konstante (0, 1] oder ein mit 'magnitude' koregistrierter Rasterpfad."
              },
              "thickness": {
                "label": "Mächtigkeit",
                "description": "Aquifermächtigkeit: entweder eine positive numerische Konstante oder ein mit 'magnitude' koregistrierter Rasterpfad."
              },
              "dispersivity_long": {
                "label": "Longitudinale Dispersivität",
                "description": "Longitudinale Dispersivität (Längeneinheiten; muss positiv sein)."
              },
              "dispersivity_trans": {
                "label": "Transversale Dispersivität",
                "description": "Transversale Dispersivität (Längeneinheiten; muss positiv sein)."
              },
              "retardation": {
                "label": "Retardation",
                "description": "Retardationsfaktor (Standard 1, muss >= 1 sein)."
              },
              "decay": {
                "label": "Zerfall",
                "description": "Zerfallskonstante erster Ordnung (Standard 0, muss >= 0 sein; gleiche Zeiteinheiten wie 'time')."
              },
              "time": {
                "label": "Zeit",
                "description": "Durch Komma getrennte Liste einer oder mehrerer positiver verstrichener Zeiten. Die letzte Zeit wird in 'output' geschrieben; alle Zeiten (einschließlich der letzten) werden in der Ausgabe 'time_series' berichtet."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Konzentrationsrasters für die letzte Zeit in 'time'. Wenn ausgelassen, im Speicher gehalten."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes aus den Betrags-/Richtungsrastern zu lesendes Band (Standard 1)."
              },
              "step": {
                "label": "Schritt",
                "description": "Schrittlänge des Puff-Zentrums in KBS-Einheiten (Standard: Zellengröße des Betragsrasters)."
              },
              "max_steps": {
                "label": "Maximale Schritte",
                "description": "Maximale Schritte je angeforderter Zeit (Standard 1000)."
              }
            }
          },
          "predict_using_trend_raster": {
            "name": "Mit Trendraster vorhersagen",
            "description": "Die von generate_trend_raster angepassten Steigungs-/Achsenabschnittsraster zu einem oder mehreren Zeitpunkten auswerten und vorhergesagte Oberflächen erzeugen, wie ArcGIS Predict Using Trend Raster.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Von generate_trend_raster geschriebenes Steigungsraster (Trend)."
              },
              "intercept": {
                "label": "Achsenabschnitt",
                "description": "Von generate_trend_raster geschriebenes Achsenabschnittsraster (seine 'intercept_output'), koregistriert mit dem Steigungsraster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters für die erste vorhergesagte Zeit. Wenn ausgelassen, werden die Ergebnisse im Speicher gehalten."
              },
              "times": {
                "label": "Zeiten",
                "description": "Durch Komma getrennte Zeiten, für die vorhergesagt wird, auf derselben Skala wie bei der Anpassung (z. B. '12,18,24'). Überschreibt start/end/interval."
              },
              "start": {
                "label": "Start",
                "description": "Erste Zeit eines erzeugten Bereichs (verwendet, wenn 'times' fehlt)."
              },
              "end": {
                "label": "Ende",
                "description": "Letzte Zeit eines erzeugten Bereichs (inklusive; verwendet, wenn 'times' fehlt)."
              },
              "interval": {
                "label": "Intervall",
                "description": "Schritt zwischen den erzeugten Zeiten (Standard 1; verwendet, wenn 'times' fehlt)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes aus jedem Koeffizientenraster zu lesendes Band (Standard 1)."
              }
            }
          },
          "presence_only_prediction": {
            "name": "Vorhersage nur aus Präsenzdaten",
            "description": "Arten-/Habitateignungsmodellierung im MaxEnt-Stil: ein L1-regularisiertes logistisches Modell anpassen, das Präsenzpunkte gegen eine geseedete Hintergrundstichprobe erklärender Raster kontrastiert (Basiserweiterung linear/quadratisch/Hinge), dann eine Oberfläche der Präsenzwahrscheinlichkeit plus einen Bericht zur Variablenwichtigkeit vorhersagen — wie ArcGIS Presence-only Prediction (MaxEnt).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer der Präsenzen (beobachtete Vorkommen)."
              },
              "explanatory": {
                "label": "Erklärend",
                "description": "Durch Komma getrennte Liste der erklärenden Rasterpfade (der Kovariatenstapel). An Präsenz- und Hintergrundorten abgetastet; das erste Raster definiert das Ausgabegitter."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Rasters der Präsenzwahrscheinlichkeit. Wenn ausgelassen, im Speicher gehalten."
              },
              "report": {
                "label": "Bericht",
                "description": "Optionaler Ausgabepfad für eine CSV-Tabelle der Koeffizienten / Variablenwichtigkeit."
              },
              "features": {
                "label": "Objekte",
                "description": "Durch Komma getrennte Merkmalsklassen der Basiserweiterung: beliebige aus 'linear', 'quadratic', 'hinge'. Standard 'linear,quadratic'."
              },
              "background": {
                "label": "Hintergrund",
                "description": "Anzahl der aus dem Rasterstapel gezogenen Hintergrundstichproben. Standard 1000 (begrenzt auf die Anzahl gültiger Zellen)."
              },
              "regularization": {
                "label": "Regularisierung",
                "description": "Stärke der L1-(Lasso-)Regularisierung auf den standardisierten Merkmalen. Größer = einfacheres Modell. Standard 0.01."
              },
              "hinge_knots": {
                "label": "Hinge-Knoten",
                "description": "Anzahl der inneren Knoten je Kovariate für Hinge-Merkmale (nur verwendet, wenn 'hinge' aktiviert ist). Standard 10."
              },
              "seed": {
                "label": "Seed",
                "description": "Zufalls-Seed für die deterministische Hintergrundstichprobe (Standard 1)."
              }
            }
          },
          "propagate_displacement": {
            "name": "Verschiebung propagieren",
            "description": "Die von resolve_road_conflicts (oder einem beliebigen Zweipunkt-Verschiebungsverbindungslayer) eingeführte Verschiebung auf nahe Objekte übertragen, indem die spärlichen Verbindungen zu einem glatten IDW-Feld interpoliert werden: starre Objekte (Gebäude, Flurstücke) erhalten eine einzige gemittelte Verschiebung, flexible Linien eine je Stützpunkt entlang der Bogenlänge geglättete Biegung, wie ArcGIS Propagate Displacement.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Anzupassender Eingabe-Vektorlayer (beliebiger Geometrietyp)."
              },
              "links": {
                "label": "Verbindungen",
                "description": "Verschiebungsverbindungen: ein Linienlayer mit 2 Stützpunkten je Verbindung, erster Stützpunkt = ursprüngliche Position, letzter Stützpunkt = verschobene Position (das Schema, das sowohl die 'links'-Ausgabe von resolve_road_conflicts als auch die 'links'-Eingabe von rubbersheet_features verwenden)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "adjustment_style": {
                "label": "Anpassungsstil",
                "description": "'auto' (Standard: starre Verschiebung für Punkte/Polygone, Biegung je Stützpunkt für Linien), 'preserve_orientation' (starre Verschiebung um das über den Grundriss gemittelte Feld) oder 'solid' (starre Verschiebung um das einmal am repräsentativen Punkt des Objekts abgetastete Feld)."
              },
              "search_distance": {
                "label": "Suchdistanz",
                "description": "Maximale Distanz (KBS-Einheiten), über die eine Verbindung einen Abtastpunkt beeinflussen darf; weiter entfernte Verbindungen werden ignoriert. Standard: unbegrenzt (jede Verbindung trägt überall bei)."
              }
            }
          },
          "pycnophylactic_interpolation": {
            "name": "Pyknophylaktische Interpolation",
            "description": "Toblers massenerhaltende Flächeninterpolation: zonenaggregierte Zählwerte in eine glatte Dichteoberfläche umwandeln, deren Summen je Zone exakt der Eingabe entsprechen (wie ArcGIS Areal Interpolation) — die glatte Alternative zur Annahme gleichmäßiger Dichte von apportion_polygon.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonlayer mit einem Zählfeld (extensive Variable)."
              },
              "count_field": {
                "label": "Anzahlfeld",
                "description": "Feld mit der Gesamtzahl jeder Zone (Bevölkerung usw.)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Dichteraster (Wert je Zelle; die Zonensummen entsprechen der Eingabe). Wenn ausgelassen, im Speicher gehalten."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße in KBS-Einheiten (Standard: Ausdehnung / 200)."
              },
              "iterations": {
                "label": "Iterationen",
                "description": "Maximale Glättungsiterationen (Standard 100)."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Abbruch, wenn die maximale Änderung je Zelle unter diesen Anteil der mittleren Dichte fällt (Standard 0.001)."
              },
              "non_negative": {
                "label": "Nicht negativ",
                "description": "Negative Werte auf 0 begrenzen und zur Massenerhaltung umverteilen (Standard wahr)."
              }
            }
          },
          "radiometric_terrain_flattening": {
            "name": "Radiometrische Geländeeinebnung",
            "description": "Entfernt das topografische Helligkeitssignal aus kalibrierter SAR-Rückstreuung, indem die Flat-Earth-Referenzfläche durch die DEM-abgeleitete lokal beleuchtete Fläche ersetzt wird, und markiert Layover und Radarschatten (ArcGIS Apply Radiometric Terrain Flattening). apply_radiometric_calibration aus Runde 17 normalisiert mit dem Ellipsoid-Einfallswinkel, sodass sein sigma0/gamma0 auf geneigtem Gelände der Topografie statt der Landbedeckung folgt — regelmäßig um mehr als 6 dB, was den Unterschied Wald/offener Boden übersteigt, den es messen soll.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Kalibriertes SAR-Rückstreuraster (standardmäßig Beta Nought; siehe 'input_calibration')."
              },
              "dem": {
                "label": "DEM",
                "description": "Digitales Höhenmodell, koregistriert mit dem Eingaberaster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster der geländekorrigierten Rückstreuung. Wenn ausgelassen, im Speicher gehalten."
              },
              "output_scattering_area": {
                "label": "Streufläche ausgeben",
                "description": "Ausgabe des Verhältnisses der tatsächlich beleuchteten Fläche zur Flat-Earth-Fläche. Wird immer erzeugt; im Speicher gehalten, wenn kein Pfad angegeben ist."
              },
              "output_geometry_mask": {
                "label": "Geometriemaske ausgeben",
                "description": "Ausgabemaske: 0 normal, 1 Layover, 2 Radarschatten. Wird immer erzeugt; im Speicher gehalten, wenn kein Pfad angegeben ist."
              },
              "incidence_angle": {
                "label": "Einfallswinkel",
                "description": "Ellipsoid-Einfallswinkel in Grad: eine Konstante oder der Pfad zu einem Raster je Zelle. Erforderlich."
              },
              "look_azimuth": {
                "label": "Blickazimut",
                "description": "Kompassazimut in Grad vom Ziel zum Sensor (Standard 270, d. h. ein rechtsblickender aufsteigender Überflug). Ein rechtsblickender absteigender Sentinel-1-Überflug liegt bei etwa 283."
              },
              "input_calibration": {
                "label": "Eingabekalibrierung",
                "description": "Was die Eingabe bereits ist: 'beta0' (Standard), 'sigma0_ellipsoid' oder 'gamma0_ellipsoid'. Die letzten beiden werden vor der Korrektur mit dem Ellipsoidwinkel in Beta Nought zurückgerechnet."
              },
              "calibration_type": {
                "label": "Kalibrierungstyp",
                "description": "Ausgabekonvention: 'gamma0' (Standard) oder 'sigma0'."
              },
              "input_units": {
                "label": "Eingabeeinheiten",
                "description": "'intensity' (Standard), 'dn', 'amplitude' oder 'db'."
              },
              "output_units": {
                "label": "Ausgabeeinheiten",
                "description": "'linear' (Standard) oder 'db'."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Multiplikator zur Umrechnung der DEM-Z-Einheiten in die XY-Einheiten des Rasters (Standard 1.0)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes zu korrigierendes Band des Eingaberasters (Standard 1)."
              }
            }
          },
          "raster_domain": {
            "name": "Rasterdomäne",
            "description": "Verfolgt die Grenze des Gültigkeitsbereichs eines Rasters als Polygone (oder geschlossene Polylinien) und bewahrt innere NoData-Löcher (ArcGIS Raster Domain). Das gebündelte layer_footprint_raster liefert die volle rechteckige Ausdehnung, die bei einer gedrehten Szene, einem zugeschnittenen Einzugsgebiet oder einer ausgefransten Mosaikkachel ein Vielfaches der tatsächlichen Abdeckung betragen kann; polygonize könnte es leisten, aber nur aus einer 0/1-Gültigkeitsmaske, die der Aufrufer zuerst erstellen muss, was die gesamte Aufgabe ausmacht.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster, dessen Gültigkeitsbereich gewünscht wird."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygon- oder Linienlayer. Wenn ausgelassen, im Speicher gehalten."
              },
              "geometry_type": {
                "label": "Geometrietyp",
                "description": "'polygon' (Standard) oder 'line' für die Grenze als geschlossene Polylinien."
              },
              "ignore_value": {
                "label": "Ignorierwert",
                "description": "Diesen Wert zusätzlich zum eigenen NoData des Rasters als ungültig behandeln (häufig 0 bei Bildern mit schwarzem Rand)."
              },
              "min_value": {
                "label": "Minimalwert",
                "description": "Werte unterhalb davon als ungültig behandeln."
              },
              "max_value": {
                "label": "Maximalwert",
                "description": "Werte oberhalb davon als ungültig behandeln."
              },
              "min_area": {
                "label": "Mindestfläche",
                "description": "Teile des Gültigkeitsbereichs verwerfen, die kleiner als diese Fläche in Karteneinheiten zum Quadrat sind, wodurch Speckle an einem ausgefransten Rand entfernt wird."
              },
              "fill_holes": {
                "label": "Löcher füllen",
                "description": "Innere Löcher verwerfen und den gefüllten Gültigkeitsbereich zurückgeben (Standard falsch)."
              },
              "all_bands": {
                "label": "Alle Bänder",
                "description": "Verlangen, dass eine Zelle in jedem Band gültig ist, nicht nur im gewählten (Standard falsch)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes zu prüfendes Band (Standard 1). Ignoriert, wenn 'all_bands' gesetzt ist."
              }
            }
          },
          "raster_normalize": {
            "name": "Raster normalisieren",
            "description": "Ein Rasterband per Min-Max-Normalisierung auf den Bereich [0, 1] skalieren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes zu normalisierendes Band (Standard 1)."
              }
            }
          },
          "raster_to_h3": {
            "name": "Raster zu H3-Zellen",
            "description": "Rasterbandwerte in Zellen des diskreten globalen H3-Gitters aggregieren (Mittelwert, Summe, Min, Max, Anzahl, Median).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei (muss geografisch Lon/Lat sein, EPSG:4326)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad; der Treiber wird aus der Erweiterung abgeleitet (.geojson, .fgb, .parquet, ...). Wenn nicht angegeben, wird der Layer im Speicher abgelegt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "H3-Auflösung 0 (gröbste) bis 15 (feinste); Standard 8 (Zellen von ~0,7 km²)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes zu aggregierendes Rasterband (Standard 1)."
              },
              "aggregate": {
                "label": "Aggregieren",
                "description": "Art der Kombination der Pixelwerte je Zelle: mean, sum, min, max, count oder median (Standard mean)."
              }
            }
          },
          "raster_to_tiles": {
            "name": "Raster zu XYZ-Kacheln",
            "description": "Ein Raster in eine XYZ-PNG-Kachelpyramide in Web Mercator (EPSG:3857) für Webkarten zerlegen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei. Muss ein Quell-KBS (EPSG oder WKT) tragen."
              },
              "output_dir": {
                "label": "Ausgabeverzeichnis",
                "description": "Ausgabeverzeichnis für den {z}/{x}/{y}.png-Kachelbaum (z. B. /work/tiles)."
              },
              "min_zoom": {
                "label": "Minimaler Zoom",
                "description": "Minimale Zoomstufe (Standard: eine einzelne native Zoomstufe passend zur Rasterauflösung)."
              },
              "max_zoom": {
                "label": "Maximaler Zoom",
                "description": "Maximale Zoomstufe (Standard: wie min_zoom)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes zu renderndes Band (Standard 1)."
              },
              "colormap": {
                "label": "Farbkarte",
                "description": "Farbtabelle: viridis (Standard), magma, turbo, terrain oder grayscale."
              },
              "method": {
                "label": "Methode",
                "description": "Resampling-Methode für Umprojektion und Abtastung: bilinear (Standard), nearest, cubic."
              },
              "min": {
                "label": "Minimum",
                "description": "Wert, der auf das untere Ende der Farbtabelle abgebildet wird (Standard: Bandminimum)."
              },
              "max": {
                "label": "Maximum",
                "description": "Wert, der auf das obere Ende der Farbtabelle abgebildet wird (Standard: Bandmaximum)."
              }
            }
          },
          "raster_to_weighted_points": {
            "name": "Raster zu gewichteten Punkten",
            "description": "Verteilt eine feste Anzahl von Punkten über ein Raster, sodass ihre Dichte proportional zum Zellwert ist, und platziert sie auf einem deterministischen Fibonacci-Gitter, einer Spirale, einem Kreis- oder Schwerpunktmuster (ArcGIS Raster To Weighted Points). Nichts in beiden Registrierungen gewichtet nach einer Oberfläche: random_sample und random_points_in_polygon sind gleichverteilt, create_spatially_balanced_points verteilt Punkte absichtlich gleichmäßig, und raster_to_vector_points gibt einen je Zelle ohne Ausdünnung oder Gewichtung aus. Die Zuteilung verwendet das Hare-Niemeyer-Verfahren und benötigt keinen Zufallsgenerator, sodass die Ergebnisse in WASM reproduzierbar sind.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Oberflächenraster; die Zellwerte sind die Gewichte."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktlayer. Wenn ausgelassen, im Speicher gehalten."
              },
              "max_number_of_points": {
                "label": "Maximale Anzahl der Punkte",
                "description": "Gesamtzahl der zu verteilenden Punkte (Standard 1000)."
              },
              "method": {
                "label": "Methode",
                "description": "Platzierung innerhalb der Zelle: 'fibonacci_lattice' (Standard), 'fibonacci_spiral', 'circular' oder 'centroid'."
              },
              "min_value": {
                "label": "Minimalwert",
                "description": "Zellen mit diesem Gewicht oder darunter erhalten keine Punkte (Standard 0). Negative Gewichte werden immer ausgeschlossen."
              },
              "max_points_per_cell": {
                "label": "Maximale Punkte pro Zelle",
                "description": "Obergrenze der Punkte, die eine einzelne Zelle erhalten darf, damit eine Hotspot-Zelle nicht das gesamte Budget aufnimmt."
              },
              "include_weight": {
                "label": "Gewichtung einschließen",
                "description": "Den Quellzellwert auf jeden Punkt schreiben (Standard wahr)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das die Gewichte liefert (Standard 1)."
              }
            }
          },
          "read_geoparquet": {
            "name": "GeoParquet lesen",
            "description": "Eine GeoParquet-Datei lesen und in ein anderes Vektorformat konvertieren (oder im Speicher halten).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-GeoParquet-Datei (z. B. /work/data.parquet)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Vektors; das Format wird aus der Erweiterung abgeleitet (.geojson, .fgb, .shp, .gpkg, ...). Wenn ausgelassen, wird der Layer im Speicher gehalten."
              }
            }
          },
          "reclassify_field": {
            "name": "Feld reklassifizieren",
            "description": "Ein numerisches Vektorattribut in Klassen einteilen (wie ArcGIS Reclassify Field): equal_interval, defined_interval, quantile, natural_breaks (Jenks), std_dev oder geometric_interval, mit Ausgabe eines ganzzahligen Klassenfelds plus eines optionalen Feldes für die Klassengrenzen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (oder Tabelle) mit dem zu klassifizierenden numerischen Feld."
              },
              "field": {
                "label": "Feld",
                "description": "Name des zu klassifizierenden numerischen Felds."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorlayer mit dem hinzugefügten Klassenfeld. Wenn ausgelassen, im Speicher gehalten."
              },
              "method": {
                "label": "Methode",
                "description": "Klassifikationsmethode: equal_interval, defined_interval, quantile, natural_breaks, std_dev oder geometric_interval (Standard natural_breaks)."
              },
              "classes": {
                "label": "Klassen",
                "description": "Anzahl der Klassen für equal_interval/quantile/natural_breaks/geometric_interval (Standard 5). Von defined_interval und std_dev ignoriert, deren Klassenanzahl sich aus den Daten ergibt."
              },
              "interval": {
                "label": "Intervall",
                "description": "Feste Klassenbreite für defined_interval (für diese Methode erforderlich)."
              },
              "std_dev_interval": {
                "label": "Standardabweichungsintervall",
                "description": "Intervallgröße für std_dev in Einheiten der Standardabweichung (Standard 1.0; z. B. 0.5 für Halb-Sigma-Bänder)."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Name des hinzuzufügenden ganzzahligen Klassenfelds (Standard 'class')."
              },
              "break_field": {
                "label": "Trennfeld",
                "description": "Wenn angegeben, zusätzlich ein Gleitkommafeld mit der oberen Klassengrenze hinzufügen, unter die jedes Objekt fällt."
              }
            }
          },
          "reconstruct_tracks": {
            "name": "Tracks rekonstruieren",
            "description": "Punkte mit Zeitstempel in Bewegungsspur-Polylinien umwandeln (nach ID gruppiert, nach Zeit sortiert, an Zeit-/Distanzlücken geteilt) mit Statistiken je Spur, und optional Verweilorte finden, an denen das bewegte Objekt pausierte — wie ArcGIS Reconstruct Tracks / Find Dwell Locations.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer mit zeitgestempelten Beobachtungen."
              },
              "track_field": {
                "label": "Track-Feld",
                "description": "Feld zur Identifikation jeder Spur/jedes bewegten Objekts (z. B. Fahrzeug- oder Tier-ID)."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Feld mit der Zeit jedes Punkts: numerische Sekunden oder ein ISO-8601-Zeitstempel."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienvektor der Spuren (Treiber aus der Erweiterung). Wenn ausgelassen, im Speicher gehalten."
              },
              "time_gap": {
                "label": "Zeitlücke",
                "description": "Ein neues Spursegment beginnen, wenn die Zeitlücke zwischen Punkten so viele Sekunden überschreitet. Standard: keine Zeitteilung."
              },
              "distance_gap": {
                "label": "Distanzlücke",
                "description": "Ein neues Spursegment beginnen, wenn die Distanz zwischen Punkten diesen Wert überschreitet (Meter bei geografischem KBS, sonst KBS-Einheiten). Standard: keine Distanzteilung."
              },
              "dwells": {
                "label": "Aufenthalte",
                "description": "Optionaler Ausgabepfad der Punkte für Verweilorte (wo das bewegte Objekt pausierte)."
              },
              "dwell_distance": {
                "label": "Aufenthaltsdistanz",
                "description": "Maximaler Radius eines Verweilens in den obigen Distanzeinheiten. Standard 50."
              },
              "dwell_min_duration": {
                "label": "Minimale Aufenthaltsdauer",
                "description": "Mindestzeit (Sekunden), die ein bewegtes Objekt innerhalb von dwell_distance bleiben muss, um als Verweilen zu zählen. Standard 300."
              }
            }
          },
          "reduce_point_density": {
            "name": "Punktdichte verringern",
            "description": "Dünnt einen Vektorpunktlayer aus, sodass keine zwei beibehaltenen Punkte näher als ein Mindestabstand liegen, oder behält einen Punkt je Gitterzelle (ArcGIS Reduce Point Density). lidar_thin ist nur für LAS und find_identical erfasst nur exakte Duplikate, sodass dichte Lotungs-, GPS- und Sensorlayer vor der Interpolation nicht dezimiert werden konnten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punkt- (oder Multipunkt-)Layer."
              },
              "method": {
                "label": "Methode",
                "description": "'spacing' (Standard): gieriges Ausdünnen nach Mindestabstand. 'bin': einen Punkt je Gitterzelle behalten."
              },
              "min_distance": {
                "label": "Minimale Distanz",
                "description": "Mindestabstand zwischen beibehaltenen Punkten in Layereinheiten. Erforderlich für Methode 'spacing'."
              },
              "bin_size": {
                "label": "Bin-Größe",
                "description": "Gitterzellengröße in Layereinheiten. Erforderlich für Methode 'bin'."
              },
              "sort_field": {
                "label": "Sortierfeld",
                "description": "Numerisches Attribut, das entscheidet, welcher Punkt einen Konflikt gewinnt. Ohne es entscheidet die Eingabereihenfolge."
              },
              "sort_order": {
                "label": "Sortierreihenfolge",
                "description": "'descending' (Standard, höchstes sort_field gewinnt) oder 'ascending'."
              },
              "keep_field": {
                "label": "Beizubehaltendes Feld",
                "description": "Attribut, das Punkte kennzeichnet, die immer beibehalten werden müssen (ungleich null / wahr / nicht leer). Für Gefahren wie Untiefenlotungen verwenden."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabelayer der beibehaltenen Punkte. Wenn ausgelassen, im Speicher gehalten."
              },
              "output_removed": {
                "label": "Entfernte ausgeben",
                "description": "Optionaler Layer, der die verworfenen Punkte zur Überprüfung erhält."
              }
            }
          },
          "regression_kriging": {
            "name": "Regressionskriging",
            "description": "Kriging mit externer Drift: regressiert Stichprobenwerte auf flächendeckende Kovariatenraster, passt ein Variogramm an die Residuen an und addiert das gekrigte Residuenfeld zur Regressionsoberfläche (ArcGIS EBK Regression Prediction). Jede ausgelieferte Kriging-Variante modelliert den Trend in den Koordinaten oder benötigt sekundäre Punktstichproben; keine akzeptiert Kovariatenraster, was die meiste angewandte Geostatistik tatsächlich braucht.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Stichproben-Punktlayer."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Vorherzusagendes numerisches Attribut."
              },
              "covariates": {
                "label": "Kovariaten",
                "description": "Durch Komma oder Semikolon getrennte Kovariaten-Rasterpfade, flächendeckend über das Vorhersagegitter. Das erste definiert das Ausgabegitter."
              },
              "variogram_model": {
                "label": "Variogrammmodell",
                "description": "Variogrammmodell der Residuen: 'spherical' (Standard), 'exponential' oder 'gaussian'."
              },
              "lag_count": {
                "label": "Lag-Anzahl",
                "description": "Anzahl der Lag-Klassen zur Anpassung des Residuenvariogramms (Standard 12)."
              },
              "max_neighbors": {
                "label": "Maximale Nachbarn",
                "description": "Nächste Stichproben im Kriging-System jeder Zelle (Standard 16)."
              },
              "bilinear": {
                "label": "Bilinear",
                "description": "Kovariaten an den Punktpositionen bilinear statt nach nächster Zelle abtasten (Standard falsch)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vorhersageraster. Falls weggelassen, im Speicher abgelegt."
              },
              "output_error": {
                "label": "Fehler ausgeben",
                "description": "Raster des Vorhersagestandardfehlers (Kriging-Standardfehler des Residuenfelds). Wird immer erzeugt."
              }
            }
          },
          "regularize_adjacent_building_footprint": {
            "name": "Angrenzende Gebäudegrundrisse regularisieren",
            "description": "Eine Gruppe benachbarter Gebäudegrundrisse auf eine gemeinsame Ausrichtung regularisieren, damit gemeinsame Wände parallel und kollinear bleiben (wie ArcGIS Regularize Adjacent Building Footprint) — das gruppenkonsistente Gegenstück zum gebäudeweisen regularize_building_footprints, das benachbarte Grundrisse aus der Ausrichtung driften lässt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonlayer der Gebäudegrundrisse."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Polygone. Wenn ausgelassen, im Speicher gehalten."
              },
              "group": {
                "label": "Gruppe",
                "description": "Optionales Feld zur Gruppierung der gemeinsam zu regularisierenden Grundrisse. Ohne es werden Gruppen nach Grenznachbarschaft gebildet."
              },
              "method": {
                "label": "Methode",
                "description": "'right_angles' (Standard) oder 'right_angles_and_diagonals'."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Minimale Wandlänge; kürzere Kanten werden als Rauschen entfernt (KBS-Einheiten). Standard 1.0."
              },
              "precision": {
                "label": "Genauigkeit",
                "description": "Gitterschritt zum Fangen der Wandversätze, damit nahe parallele Wände kollinear werden (KBS-Einheiten). Standard: tolerance."
              },
              "adjacency_distance": {
                "label": "Adjazenzdistanz",
                "description": "Wenn kein Feld 'group' angegeben ist, bilden Grundrisse, deren Stützpunkte sich innerhalb dieser Distanz befinden, eine Gruppe (KBS-Einheiten). Standard: 2 x tolerance."
              }
            }
          },
          "regularize_building_footprints": {
            "name": "Gebäudegrundrisse regularisieren",
            "description": "Verrauschte Gebäudegrundrisspolygone in regelmäßige Formen normalisieren (rechtwinklige, diagonale, beliebig gewinkelte oder kreisförmige Wände).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Polygonvektordatei, Format wird automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "method": {
                "label": "Methode",
                "description": "Regularisierungsmethode: 'right_angles' (Standard), 'right_angles_and_diagonals', 'any_angle' oder 'circle'."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Maximale Distanz (in KBS-Einheiten), um die der regularisierte Grundriss von der ursprünglichen Grenze abweichen darf. Standard 1.0."
              },
              "diagonal_penalty": {
                "label": "Diagonalstrafe",
                "description": "Für 'right_angles_and_diagonals': wie stark rechte Winkel gegenüber 45-Grad-Wänden bevorzugt werden (eine Wand wird nur dann diagonal, wenn ihre Winkelabweichung von einer Diagonalen, multipliziert mit diesem Faktor, kleiner ist als ihre Abweichung von einer Achse). Standard 1.5; größere Werte ergeben weniger Diagonalen."
              },
              "min_radius": {
                "label": "Minimaler Radius",
                "description": "Für 'circle': kleinster zulässiger angepasster Radius; kleinere Anpassungen behalten den ursprünglichen Grundriss. Standard 0.1."
              },
              "max_radius": {
                "label": "Maximaler Radius",
                "description": "Für 'circle': größter zulässiger angepasster Radius; größere Anpassungen behalten den ursprünglichen Grundriss. Unbegrenzt, wenn ausgelassen."
              }
            }
          },
          "remove_overlap_multiple": {
            "name": "Überlappung entfernen (mehrere)",
            "description": "Jede Überlappung innerhalb einer Menge von Polygonen genau einem Objekt zuweisen und so eine lücken- und überlappungsfreie Partition ihrer Vereinigung erzeugen (Mittellinien- oder Thiessen-Teilung), wie ArcGIS Remove Overlap (Multiple).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer (Objekte dürfen sich überlappen)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonvektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              },
              "method": {
                "label": "Methode",
                "description": "'center_line' (jeden Überlappungspunkt dem Objekt zuweisen, in dem er am tiefsten liegt, Standard) oder 'thiessen' (nächster Generatorschwerpunkt)."
              },
              "grid_resolution": {
                "label": "Gitterauflösung",
                "description": "Zellen über die längere Seite jeder Überlappungsregion bei der Teilung (Standard 40; höher = glattere Trennlinien, langsamer)."
              }
            }
          },
          "remove_thermal_noise": {
            "name": "Thermisches Rauschen entfernen",
            "description": "Subtrahiert das additive thermische Rauschniveau des Empfängers von der SAR-Rückstreuung und entfernt die Streifenbildung quer zum Streifen, die dunkle Oberflächen wie ruhiges Wasser, überflutetes Gelände und Radarschatten dominiert (ArcGIS Remove Thermal Noise). Nichts in beiden Registrierungen leistet dies: die gebündelten Filter lee/frost/kuan/refined-lee unterdrücken multiplikatives Speckle, eine andere Größe. Ohne diesen Schritt rastet ein Otsu-Wasserschwellenwert an einer Sub-Swath-Grenze statt an einer Küstenlinie ein, und Kreuzpolarisationsverhältnisse werden aus einem Zähler berechnet, der größtenteils Rauschen ist.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Kalibriertes SAR-Rückstreuraster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Entrauschtes Ausgaberaster. Wenn ausgelassen, im Speicher gehalten."
              },
              "output_snr": {
                "label": "SNR ausgeben",
                "description": "Ausgabe des Signal-Rausch-Verhältnisses in dB. Wird immer erzeugt; im Speicher gehalten, wenn kein Pfad angegeben ist."
              },
              "noise_raster": {
                "label": "Rauschraster",
                "description": "Raster der Rauschleistung je Zelle, koregistriert mit der Eingabe. Hat Vorrang vor den beiden anderen Formen."
              },
              "noise_profile": {
                "label": "Rauschprofil",
                "description": "Durch Komma getrennte Rauschleistungen quer zur Entfernungsrichtung, linear über die Spalten des Rasters interpoliert. Mindestens zwei Werte."
              },
              "noise_constant": {
                "label": "Rauschkonstante",
                "description": "Einzelnes rauschäquivalentes Sigma Nought, das auf jede Zelle angewendet wird."
              },
              "noise_units": {
                "label": "Rauscheinheiten",
                "description": "Einheiten der Rauschwerte: 'intensity' (Standard), 'dn', 'amplitude' oder 'db'."
              },
              "input_units": {
                "label": "Eingabeeinheiten",
                "description": "'intensity' (Standard), 'dn', 'amplitude' oder 'db'."
              },
              "output_units": {
                "label": "Ausgabeeinheiten",
                "description": "'linear' (Standard) oder 'db'."
              },
              "floor_fraction": {
                "label": "Untergrenzenanteil",
                "description": "Zellen, die auf oder unter null gedrückt werden, werden auf diesen Anteil der lokalen Rauschleistung begrenzt (Standard 0.01). Hält eine dB-Umrechnung endlich."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes zu entrauschendes Band (Standard 1)."
              }
            }
          },
          "render_raster_png": {
            "name": "Raster als PNG rendern",
            "description": "Ein einzelnes Rasterband über eine Farbtabelle in ein PNG-Bild rendern (NoData wird transparent).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der PNG-Datei (z. B. /work/preview.png)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes zu renderndes Band (Standard 1)."
              },
              "colormap": {
                "label": "Farbkarte",
                "description": "Farbtabelle: viridis (Standard), magma, turbo, terrain oder grayscale."
              },
              "min": {
                "label": "Minimum",
                "description": "Wert, der auf das untere Ende der Farbtabelle abgebildet wird (Standard: Bandminimum)."
              },
              "max": {
                "label": "Maximum",
                "description": "Wert, der auf das obere Ende der Farbtabelle abgebildet wird (Standard: Bandmaximum)."
              }
            }
          },
          "render_vector_png": {
            "name": "Vektor als PNG rendern",
            "description": "Einen Vektorlayer (Punkte/Linien/Polygone) in ein PNG-Kartenbild zeichnen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Vektordatei oder In-Memory-Handle."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der PNG-Datei (z. B. /work/map.png)."
              },
              "width": {
                "label": "Breite",
                "description": "Bildbreite in Pixeln (Standard 800)."
              },
              "height": {
                "label": "Höhe",
                "description": "Bildhöhe in Pixeln (Standard: aus dem Seitenverhältnis der Daten)."
              },
              "fill": {
                "label": "Füllen",
                "description": "Füllfarbe für Polygone/Punkte als #rrggbb oder #rrggbbaa (Standard halbtransparentes Blau)."
              },
              "stroke": {
                "label": "Strich",
                "description": "Umriss-/Linienfarbe als #rrggbb oder #rrggbbaa (Standard Dunkelblau)."
              },
              "stroke_width": {
                "label": "Strichbreite",
                "description": "Umriss-/Linienbreite in Pixeln (Standard 1)."
              },
              "background": {
                "label": "Hintergrund",
                "description": "Hintergrundfarbe als #rrggbb[aa] oder 'transparent' (Standard transparent)."
              }
            }
          },
          "repair_geometry": {
            "name": "Geometrie reparieren",
            "description": "Ungültige Polygongeometrie erkennen und reparieren — Selbstüberschneidungen (per Selbstvereinigung), Ringumlaufrichtung, doppelte Stützpunkte und Null-/Leerteile — oder mit check_only einen Problemcode je Objekt ausgeben. Wie ArcGIS Repair Geometry / Check Geometry.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Polygonvektordatei, Format automatisch erkannt (oder ein In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "check_only": {
                "label": "Nur prüfen",
                "description": "Wenn wahr, wird die Geometrie nicht verändert: die Eingabe wird mit den Spalten 'problem_code'/'problem_desc' ausgegeben (wie ArcGIS Check Geometry). Standard falsch."
              }
            }
          },
          "rescale_by_function": {
            "name": "Nach Funktion neu skalieren",
            "description": "Ein kontinuierliches Raster über eine Transferfunktion (linear, inverse_linear, power, exponential, logarithmic, logistic, gaussian, near, small, large, symmetric_linear) auf eine gemeinsame Eignungsskala umskalieren, wie ArcGIS Rescale By Function.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Kontinuierliches Eingaberaster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              },
              "function": {
                "label": "Funktion",
                "description": "Transferfunktion: linear (Standard), inverse_linear, power, exponential, logarithmic, logistic, gaussian, near, small, large, symmetric_linear."
              },
              "from_scale": {
                "label": "Von Maßstab",
                "description": "Unteres Ende der Ausgabeskala (Standard 0)."
              },
              "to_scale": {
                "label": "Zu Maßstab",
                "description": "Oberes Ende der Ausgabeskala (Standard 1)."
              },
              "param1": {
                "label": "Parameter 1",
                "description": "Erster Formparameter (Exponent für power; Steilheit für exponential/logarithmic/logistic/small/large; Zentrum für gaussian/near). Funktionsspezifischer Standard."
              },
              "param2": {
                "label": "Parameter 2",
                "description": "Zweiter Formparameter (Streuung für gaussian/near). Funktionsspezifischer Standard."
              },
              "low_threshold": {
                "label": "Unterer Schwellenwert",
                "description": "Optionale untere Abschneidegrenze: Werte darunter werden auf 'value_below' abgebildet."
              },
              "high_threshold": {
                "label": "Oberer Schwellenwert",
                "description": "Optionale obere Abschneidegrenze: Werte darüber werden auf 'value_above' abgebildet."
              },
              "value_below": {
                "label": "Wert unterhalb",
                "description": "Ausgabewert für Zellen unterhalb von 'low_threshold' (Standard = from_scale)."
              },
              "value_above": {
                "label": "Wert oberhalb",
                "description": "Ausgabewert für Zellen oberhalb von 'high_threshold' (Standard = to_scale)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes umzuskalierendes Band (Standard 1)."
              }
            }
          },
          "resolve_building_conflicts": {
            "name": "Gebäudekonflikte auflösen",
            "description": "Gebäudegrundrisse, die grafisch mit symbolisierten Straßenbarrieren (und untereinander) in Konflikt stehen, für kleinmaßstäbige Karten verschieben, verkleinern oder ausblenden und jeden mit einem Status kennzeichnen, wie ArcGIS Resolve Building Conflicts.",
            "params": {
              "buildings": {
                "label": "Gebäude",
                "description": "Eingabe-Gebäudepolygonlayer."
              },
              "barriers": {
                "label": "Barrieren",
                "description": "Barriere-Linienlayer (z. B. Straßen), den Gebäude freihalten müssen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Gebäudelayer mit einem Feld 'status'. Wenn ausgelassen, im Speicher gehalten."
              },
              "barrier_width": {
                "label": "Barrierenbreite",
                "description": "Symbolisierte Barrierebreite in Karteneinheiten (beidseitig um die Hälfte gepuffert). Standard 0."
              },
              "gap": {
                "label": "Lücke",
                "description": "Mindestabstand zwischen einem Gebäude und einer Barriere (Karteneinheiten). Standard 0."
              },
              "min_size": {
                "label": "Mindestgröße",
                "description": "Minimale Gebäudefläche (Karteneinheiten²), ab der ein konfliktbehaftetes Gebäude ausgeblendet statt verkleinert wird. Standard 0 (nie ausblenden)."
              },
              "hide": {
                "label": "Ausblenden",
                "description": "Ob ausgeblendete Gebäude aus der Ausgabe entfernt werden (Standard falsch: mit status='hidden' beibehalten)."
              }
            }
          },
          "resolve_road_conflicts": {
            "name": "Straßenkonflikte auflösen",
            "description": "Straßen verschieben, deren symbolisierte (gezeichnete) Darstellungen sich in einem Zielmaßstab überlappen oder drängen: Straßen niedrigerer Hierarchie werden mit endpunktfixierten, geglätteten Stützpunktverschiebungen von höherrangigen freigerückt, optional mit Ausgabe von Verschiebungsverbindungen, wie ArcGIS Resolve Road Conflicts / Propagate Displacement.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Straßenlinienlayer (LineString / MultiLineString)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabelayer der verschobenen Straßen mit den Feldern 'status' und 'shift'. Wenn ausgelassen, im Speicher gehalten."
              },
              "symbol_width": {
                "label": "Symbolbreite",
                "description": "Feste symbolisierte Breite für alle Straßen in Karteneinheiten (oder Seiten-mm, wenn 'scale' gesetzt ist). Verwendet, wenn 'symbol_width_field' fehlt."
              },
              "symbol_width_field": {
                "label": "Symbolbreitenfeld",
                "description": "Numerisches Feld mit der symbolisierten Breite jeder Straße (Karteneinheiten oder Seiten-mm, wenn 'scale' gesetzt ist). Fällt bei fehlendem Wert auf 'symbol_width' zurück."
              },
              "hierarchy_field": {
                "label": "Hierarchiefeld",
                "description": "Numerisches Feld zur Rangfolge der Straßenbedeutung (niedrigerer Wert = wichtiger, wird festgehalten). Fehlt es, teilen sich alle Straßen die Verschiebung gleichmäßig."
              },
              "scale": {
                "label": "Maßstab",
                "description": "Maßstabszahl der Zielkarte. Wenn gesetzt, sind die Symbolbreiten Seitenmillimeter, die in Bodeneinheiten umgerechnet werden (mm * scale / 1000). Standard: Breiten werden direkt als Karteneinheiten übernommen."
              },
              "gap": {
                "label": "Lücke",
                "description": "Zusätzlicher Freiraum zwischen Symbolstreifen in Karteneinheiten. Standard 0."
              },
              "max_iter": {
                "label": "Maximale Iterationen",
                "description": "Maximale Verschiebungsiterationen. Standard 50."
              },
              "pin_endpoints": {
                "label": "Endpunkte fixieren",
                "description": "Den ersten/letzten Stützpunkt jeder Straße fixieren, um Kreuzungen/Konnektivität zu bewahren (Standard wahr)."
              },
              "links": {
                "label": "Verbindungen",
                "description": "Optionaler Ausgabepfad für Verschiebungsverbindungen (Von→Nach-Linien), die von rubbersheet_features verarbeitet werden können."
              }
            }
          },
          "ripleys_k": {
            "name": "Ripleys K",
            "description": "Punktmusteranalyse über mehrere Distanzen (Ripleys K-/L-Funktion) mit Monte-Carlo-Hüllkurven für vollständige räumliche Zufälligkeit, um Clusterung oder Dispersion über einen Distanzbereich zu erkennen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer (andere Geometrien verwenden ihren Stützpunktmittel als repräsentativen Punkt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler CSV-Pfad für die K/L-Tabelle. Die Tabelle wird auch im Werkzeugergebnis zurückgegeben."
              },
              "distance_bands": {
                "label": "Distanzbänder",
                "description": "Anzahl der auszuwertenden Distanzbänder (Standard 10)."
              },
              "max_distance": {
                "label": "Maximale Distanz",
                "description": "Größte auszuwertende Distanz in KBS-Einheiten. Standard: ein Viertel der kürzeren Seite des Punkt-Begrenzungsrahmens."
              },
              "permutations": {
                "label": "Permutationen",
                "description": "Anzahl der CSR-Simulationen für die Signifikanzhüllkurve (Standard 99; 0 deaktiviert die Hüllkurve)."
              },
              "weight_field": {
                "label": "Gewichtungsfeld",
                "description": "Optionales numerisches Feld zur Gewichtung jedes Punkts."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed für den CSR-Zufallsgenerator (Standard 1), für reproduzierbare Hüllkurven."
              }
            }
          },
          "rubbersheet_features": {
            "name": "Objekte per Rubbersheeting anpassen",
            "description": "Einen Vektorlayer anhand von Verschiebungsverbindungen an ein Ziel anpassen: eine stückweise affine Delaunay-TIN-Transformation (oder IDW), die Passpunkte auf ihre Ziele legt und alles dazwischen glatt verformt — die Konflationstransformation, wie ArcGIS Rubbersheet Features.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Anzupassender Eingabe-Vektorlayer (beliebiger Geometrietyp)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "links": {
                "label": "Verbindungen",
                "description": "Optionaler Linienlayer der Verschiebungsverbindungen (jede Linie: erster Stützpunkt = von, letzter Stützpunkt = nach)."
              },
              "target": {
                "label": "Ziel",
                "description": "Optionaler Ziel-Vektorlayer; Verbindungen werden erzeugt, indem der repräsentative Punkt jedes Eingabeobjekts dem nächsten Ziel innerhalb von search_distance zugeordnet wird."
              },
              "search_distance": {
                "label": "Suchdistanz",
                "description": "Maximale Distanz für die Zuordnung von Eingabe zu Ziel beim Erzeugen von Verbindungen (KBS-Einheiten). Erforderlich mit 'target'."
              },
              "method": {
                "label": "Methode",
                "description": "'linear' (stückweise affin über Delaunay-TIN, Standard) oder 'idw' (inverse Distanzgewichtung)."
              },
              "power": {
                "label": "Potenz",
                "description": "IDW-Potenz für den Abfall außerhalb des TIN / für method=idw. Standard 2."
              }
            }
          },
          "sar_coherence": {
            "name": "SAR-Kohärenz",
            "description": "Berechnet den normierten interferometrischen Kohärenzbetrag (und optional die interferometrische Phase) zwischen zwei koregistrierten komplexen SAR-Aufnahmen über ein gleitendes Fenster (ArcGIS Compute Coherence / Generate Interferogram). Kohärenz misst Phasenstabilität statt Helligkeit und erkennt daher Veränderungen, die eine Intensitätsdifferenz nicht sieht — Einsturz, Überflutung unter Vegetation, Ernte, Eisbewegung — bei jedem Wetter. Kein Werkzeug in beiden Registrierungen nutzt die SAR-Phase. Die Eingaben sind zweibandige I/Q-Paare und müssen bereits koregistriert sein.",
            "params": {
              "reference": {
                "label": "Referenz",
                "description": "Komplexes SAR-Raster (zwei Bänder: I und Q) der ersten Aufnahme."
              },
              "secondary": {
                "label": "Sekundär",
                "description": "Koregistriertes komplexes SAR-Raster (zwei Bänder: I und Q) der zweiten Aufnahme."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Kohärenzrasters (Betrag, 0..1). Wenn ausgelassen, im Speicher gehalten."
              },
              "output_phase": {
                "label": "Phase ausgeben",
                "description": "Optionaler Ausgabepfad für das Raster der interferometrischen Phase in Radiant, gewickelt auf (-pi, pi]."
              },
              "window_size": {
                "label": "Fenstergröße",
                "description": "Schätzfenster als 'range,azimuth' in Zellen (Standard '5,5'). Der Schätzer ist zentriert, daher wird ein gerader Wert auf die nächste ungerade Größe AUFGERUNDET; das effektive Fenster wird als window_range/window_azimuth zurückgemeldet."
              },
              "bias_correction": {
                "label": "Bias-Korrektur",
                "description": "Die Aufwärtsverzerrung des Kohärenzschätzers bei kleinen Fenstergrößen korrigieren (Standard wahr)."
              }
            }
          },
          "semivariogram_sensitivity": {
            "name": "Semivariogramm-Sensitivität",
            "description": "Stört Nugget, partiellen Sill und Reichweite eines angepassten Variogramms, krigt an den Auswertungsorten neu und berichtet, wie weit sich Vorhersagen und Standardfehler verschieben — die übliche Belastbarkeitsprüfung eines Kriging-Modells (ArcGIS GA Semivariogram Sensitivity). Die gebündelte Kriging-Suite ist breit und kriging_cross_validation misst die Anpassung, aber nichts misst die Sensitivität, und beides ist unabhängig: ein gut kreuzvalidiertes Modell kann dennoch hochgradig empfindlich gegenüber den vom Analysten gewählten Parametern sein.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Punktlayer mit den gemessenen Werten."
              },
              "field": {
                "label": "Feld",
                "description": "Zu krigendes numerisches Feld."
              },
              "locations": {
                "label": "Standorte",
                "description": "Punktlayer der Vorhersageorte, an denen die Sensitivität ausgewertet wird."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Tabelle mit einer Zeile je gestörtem Modell. Wenn ausgelassen, im Speicher gehalten."
              },
              "model": {
                "label": "Modell",
                "description": "Variogrammmodell: 'exponential' (Standard), 'spherical' oder 'gaussian'."
              },
              "nugget_span_percent": {
                "label": "Nugget-Spanne (Prozent)",
                "description": "Halbe Störungsbreite für den Nugget in Prozent (Standard 10)."
              },
              "partial_sill_span_percent": {
                "label": "Partial-Sill-Spanne (Prozent)",
                "description": "Halbe Störungsbreite für den partiellen Sill in Prozent (Standard 10)."
              },
              "range_span_percent": {
                "label": "Range-Spanne (Prozent)",
                "description": "Halbe Störungsbreite für die Reichweite in Prozent (Standard 10)."
              },
              "nugget_steps": {
                "label": "Nugget-Schritte",
                "description": "Abtastungen über die Nugget-Spanne (Standard 3; 1 fixiert ihn auf den angepassten Wert)."
              },
              "partial_sill_steps": {
                "label": "Partial-Sill-Schritte",
                "description": "Abtastungen über die Spanne des partiellen Sills (Standard 3)."
              },
              "range_steps": {
                "label": "Range-Schritte",
                "description": "Abtastungen über die Reichweitenspanne (Standard 3)."
              },
              "lag_count": {
                "label": "Lag-Anzahl",
                "description": "Lag-Klassen des empirischen Variogramms für die Basisanpassung (Standard 12)."
              }
            }
          },
          "similarity_search": {
            "name": "Ähnlichkeitssuche",
            "description": "Kandidatenobjekte nach Attributähnlichkeit zu einem oder mehreren Referenzobjekten über z-standardisierte numerische Felder ordnen (euklidisch oder Kosinus), ähnlichste/unähnlichste/beide — wie ArcGIS Similarity Search.",
            "params": {
              "reference": {
                "label": "Referenz",
                "description": "Referenz-Vektorlayer (ein oder mehrere Objekte, die das abzugleichende Profil definieren)."
              },
              "candidates": {
                "label": "Kandidaten",
                "description": "Kandidaten-Vektorlayer, der nach Ähnlichkeit zur Referenz geordnet wird."
              },
              "fields": {
                "label": "Felder",
                "description": "Durch Komma getrennte(s) numerische(s) Vergleichsfeld(er) (müssen in beiden Layern vorhanden sein)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors (geordnete Kandidaten). Wenn ausgelassen, im Speicher gehalten."
              },
              "match_method": {
                "label": "Zuordnungsmethode",
                "description": "'euclidean' (z-standardisierte Distanz; Standard) oder 'cosine' (Winkelähnlichkeit)."
              },
              "most_or_least": {
                "label": "Meiste oder wenigste",
                "description": "Die 'most' ähnlichsten (Standard), die 'least' ähnlichsten oder 'both' Enden behalten."
              },
              "num_results": {
                "label": "Anzahl Ergebnisse",
                "description": "Anzahl der je Ende zu behaltenden Ergebnisse (0 = alle Kandidaten). Standard 10."
              }
            }
          },
          "simplify_3d_line": {
            "name": "3D-Linie vereinfachen",
            "description": "Die Stützpunktanzahl von 3D-Polylinien mit einer Douglas-Peucker-Teilung reduzieren, die die Abweichung in drei Dimensionen misst und das Vertikalprofil bewahrt, wie ArcGIS Simplify 3D Line.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polylinienlayer (3D-Stützpunkte; 2D-Stützpunkte werden als planarer Sonderfall behandelt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Maximale 3D-Abweichung in Karteneinheiten. Stützpunkte, die näher als dieser Wert an der Sehne liegen, werden entfernt."
              },
              "z_factor": {
                "label": "Z-Faktor",
                "description": "Auf Z vor dem Distanztest angewendeter Multiplikator, für Daten, deren Z-Einheit von XY abweicht (Standard 1)."
              }
            }
          },
          "simplify_building": {
            "name": "Gebäude vereinfachen",
            "description": "Stützpunkte von Gebäudegrundrissen reduzieren und dabei rechtwinklige Ecken schützen, mit einem Mindestflächen-Schwellenwert zum Verwerfen, wie ArcGIS Simplify Building.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Gebäudegrundrisspolygone."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Vereinfachungstoleranz in Karteneinheiten: die maximale Distanz, um die sich die Grenze bewegen darf."
              },
              "minimum_area": {
                "label": "Mindestfläche",
                "description": "Grundrisse unterhalb dieser Fläche werden verworfen (Standard 0, alle behalten)."
              },
              "keep_collapsed_points": {
                "label": "Kollabierte Punkte behalten",
                "description": "Einen Punkt am Schwerpunkt jedes durch minimum_area verworfenen Grundrisses ausgeben (Standard falsch)."
              },
              "corner_tolerance": {
                "label": "Eckentoleranz",
                "description": "Gradbereich, innerhalb dessen ein Innenwinkel als geschützter rechter Winkel zählt (Standard 20)."
              }
            }
          },
          "simplify_by_circular_arcs": {
            "name": "Nach Kreisbögen vereinfachen",
            "description": "Vereinfacht Linien und Polygone, indem Stützpunktfolgen durch gerade Segmente und echte Kreisbögen ersetzt werden, wodurch konstruierte Kurven bewahrt statt durch Sehnen angenähert werden (ArcGIS Simplify By Straight Lines And Circular Arcs; der Modus 'tangent' deckt Simplify By Tangent Segments ab). Jeder Vereinfacher in beiden Registrierungen entfernt nur Stützpunkte, was bei Wendehammern, Kreisverkehren und Tankgrundrissen die Wahl zwischen einer facettierten Kurve und einer inakzeptablen Stützpunktanzahl erzwingt. Kreise werden per algebraischer Methode der kleinsten Quadrate angepasst, aber anhand der echten orthogonalen Abweichung akzeptiert, sodass die Toleranzgarantie gilt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Linien- oder Polygonlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Maximal zulässige Abweichung eines angepassten Primitivs von den ursprünglichen Stützpunkten in KBS-Einheiten."
              },
              "mode": {
                "label": "Modus",
                "description": "'arcs' (Standard; passt gerade Segmente und Kreisbögen an) oder 'tangent' (nur gerade Segmente, das Verhalten von Simplify By Tangent Segments)."
              },
              "min_arc_angle": {
                "label": "Minimaler Bogenwinkel",
                "description": "Bögen, die weniger als so viele Grad überspannen, werden stattdessen als gerade Segmente ausgegeben (Standard 10)."
              },
              "max_radius": {
                "label": "Maximaler Radius",
                "description": "Bögen mit einem größeren Radius als diesem werden als gerade Segmente ausgegeben (Standard: 1e6)."
              },
              "densify_output": {
                "label": "Ausgabe verdichten",
                "description": "Angepasste Bögen beim Schreiben auf eine Sehnentoleranz neu verdichten (Standard wahr). Wenn falsch, werden nur die Bogenendpunkte ausgegeben, sodass die Geometrie allein die Kurve verliert — 'output_arcs' lesen, um sie wiederherzustellen."
              },
              "output_arcs": {
                "label": "Bögen ausgeben",
                "description": "Optionaler Pfad für die Tabelle der angepassten Bögen (Objekt-ID, Endpunkte, Mittelpunkt, Radius, vorzeichenbehafteter Öffnungswinkel in Grad). Wenn ausgelassen, im Speicher gehalten (wird dennoch zurückgegeben)."
              }
            }
          },
          "simplify_by_tangent_segments": {
            "name": "Nach Tangentensegmenten vereinfachen",
            "description": "Ersetzt verdichtete Kurvengeometrie durch die minimale Kette gerader Segmente innerhalb eines maximalen senkrechten Versatzes und verbindet aufeinanderfolgende Segmente an ihrem Schnittpunkt, sodass das Ergebnis tangential zum Original bleibt (ArcGIS Simplify By Tangent Segments). Das lineare Gegenstück zu simplify_by_circular_arcs: simplify_features (Douglas-Peucker) kann nur vorhandene Stützpunkte behalten und garantiert keine Tangentialität, was Knicke in konstruierter Geometrie hinterlässt, während smooth_line und smooth_natural_features Stützpunkte verschieben statt sie zu reduzieren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zu vereinfachende Linien- oder Polygonobjekte."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Vereinfachte Objekte mit angehängten Feldern für die Stützpunktanzahl. Wenn ausgelassen, im Speicher gehalten."
              },
              "max_offset": {
                "label": "Maximaler Versatz",
                "description": "Maximale senkrechte Abweichung vom Original in KBS-EINHEITEN. Bei EPSG:4326 sind das Grad, sodass Arbeiten im Meterbereich etwa 2e-5 benötigen, nicht 2.0. Die Grenze wird gegen jede angepasste Linie durchgesetzt, sodass die ausgegebene Kette sie nahe einer Verbindung, an der aufeinanderfolgende Segmente zusammentreffen, leicht überschreiten kann."
              },
              "anchor_points": {
                "label": "Ankerpunkte",
                "description": "Optionaler Punktlayer, dessen Positionen als Stützpunkte erhalten bleiben müssen (ArcGIS anchor_points). Folgen werden nie über einen Anker hinweg erweitert."
              },
              "anchor_tolerance": {
                "label": "Ankertoleranz",
                "description": "Distanz, innerhalb derer ein Eingabestützpunkt als zu einem Ankerpunkt passend gilt (KBS-Einheiten). Standard: max_offset."
              },
              "min_run": {
                "label": "Minimaler Lauf",
                "description": "Minimale Anzahl an Eingabestützpunkten, die eine Folge umfassen muss, bevor sie zu einem Segment zusammengefasst wird (Standard 3). Kürzere Folgen werden unverändert ausgegeben."
              },
              "preserve_endpoints": {
                "label": "Endpunkte erhalten",
                "description": "Den ersten und letzten Stützpunkt jedes Teils exakt beibehalten (Standard wahr)."
              }
            }
          },
          "simplify_shared_edges": {
            "name": "Gemeinsame Kanten vereinfachen",
            "description": "Eine Polygonabdeckung vereinfachen und dabei die zwischen benachbarten Polygonen geteilten Grenzen deckungsgleich halten (keine Lücken oder Splitter), wie ArcGIS Simplify Shared Edges.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Polygonvektordatei, Format wird automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Douglas-Peucker-Vereinfachungstoleranz: die maximale Distanz (in KBS-Einheiten), die ein vereinfachter Bogen vom Original abweichen darf. Standard 1.0."
              },
              "simplify_boundary": {
                "label": "Grenze vereinfachen",
                "description": "Auch Bögen auf der Außengrenze der Abdeckung vereinfachen (Kanten, die zu einem einzelnen Polygon gehören). Standard wahr; falsch setzen, um die Außengrenze unverändert zu lassen."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Stützpunkte vor dem Aufbau der Topologie auf ein Gitter dieser Größe (KBS-Einheiten) quantisieren, damit nahezu zusammenfallende gemeinsame Stützpunkte als einer behandelt werden. Standard 0 (Koordinaten exakt verwenden)."
              }
            }
          },
          "slice_raster": {
            "name": "Raster in Klassen schneiden",
            "description": "Ein kontinuierliches Raster in N ordinale Zonen klassifizieren (gleiches Intervall, gleiche Fläche, natürliche Klassengrenzen, geometrisches Intervall oder Standardabweichung).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der kontinuierlichen Eingabe-Rasterdatei."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Zonenrasters. Wenn ausgelassen, im Speicher gehalten."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes zu klassifizierendes Band (Standard 1)."
              },
              "number_zones": {
                "label": "Anzahl Zonen",
                "description": "Anzahl der Ausgabezonen (Standard 10). Bei std_dev ignoriert."
              },
              "slice_type": {
                "label": "Schnitttyp",
                "description": "Klassifikationsmethode: equal_interval, equal_area, natural_breaks, geometric_interval oder std_dev (Standard equal_interval)."
              },
              "base_output_zone": {
                "label": "Basis-Ausgabezone",
                "description": "Der niedrigsten Zone zugewiesene Zonen-ID (Standard 1)."
              },
              "class_interval_size": {
                "label": "Klassenintervallgröße",
                "description": "Intervallgröße der Standardabweichung in σ-Einheiten (Standard 1.0). Nur bei std_dev verwendet."
              }
            }
          },
          "smooth_natural_features": {
            "name": "Natürliche Objekte glätten",
            "description": "Verpixelte Polygone und gezackte Linien (Raster-zu-Vektor-Ausgaben) per Chaikin-Eckenschnitt zu natürlich wirkenden Kurven glätten, unter Erhalt der Polygonfläche.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Vektordatei mit Polygon- oder Linienobjekten, Format automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "segment_length": {
                "label": "Segmentlänge",
                "description": "Skala des zu entfernenden Treppenrauschens in KBS-Einheiten — idealerweise die Zellengröße des Quellrasters. Wird bei Auslassung automatisch aus der mittleren Kantenlänge des Layers erkannt."
              },
              "iterations": {
                "label": "Iterationen",
                "description": "Chaikin-Glättungsiterationen (1-8); mehr Iterationen ergeben eine glattere Ausgabe mit mehr Stützpunkten. Standard 3."
              },
              "preserve_area": {
                "label": "Fläche erhalten",
                "description": "Die ursprüngliche Fläche jedes Polygons nach der Glättung wiederherstellen (Eckenschnitt verkleinert konvexe Formen). Standard wahr."
              }
            }
          },
          "smooth_shared_edges": {
            "name": "Gemeinsame Kanten glätten",
            "description": "Eine Polygonabdeckung glätten und dabei die zwischen benachbarten Polygonen geteilten Grenzen deckungsgleich halten (keine Lücken oder Splitter), wie ArcGIS Smooth Shared Edges.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Polygonvektordatei, Format wird automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "algorithm": {
                "label": "Algorithmus",
                "description": "Glättungsalgorithmus: 'paek' (Gauß-Kernel, toleranzgesteuert; Standard) oder 'bezier' (Chaikin-Eckenschnitt, ignoriert die Toleranz)."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "PAEK-Glättungslänge in KBS-Einheiten: das Bogenlängenfenster, über das Stützpunkte gemittelt werden. Größere Werte ergeben glattere Kurven. Standard 1.0. Vom Algorithmus 'bezier' ignoriert."
              },
              "smooth_boundary": {
                "label": "Grenze glätten",
                "description": "Auch Bögen auf der Außengrenze der Abdeckung glätten (Kanten, die zu einem einzelnen Polygon gehören). Standard wahr; falsch setzen, um die Außengrenze unverändert zu lassen."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Stützpunkte vor dem Aufbau der Topologie auf ein Gitter dieser Größe (KBS-Einheiten) quantisieren, damit nahezu zusammenfallende gemeinsame Stützpunkte als einer behandelt werden. Standard 0 (Koordinaten exakt verwenden)."
              }
            }
          },
          "snap_tracks": {
            "name": "Tracks fangen",
            "description": "GPS-Spuren mit Zeitstempel per Viterbi-Dynamikprogramm auf ein Straßennetz abbilden (Emission = Fangdistanz, Übergang = Routenkontinuität), sodass zugeordnete Spuren einem plausiblen Pfad folgen, statt zwischen parallelen Straßen hin und her zu springen — wie ArcGIS Snap Tracks.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-GPS-Punktlayer mit Zeitstempel."
              },
              "network": {
                "label": "Netzwerk",
                "description": "Straßennetz-Linienlayer, auf den abgebildet wird."
              },
              "track_field": {
                "label": "Track-Feld",
                "description": "Feld, das jede Spur/jedes bewegte Objekt identifiziert."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Feld mit der Zeit jedes Punkts (numerische Sekunden oder ISO-8601)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabelayer der gefangenen Punkte (Treiber aus der Erweiterung). Wenn ausgelassen, im Speicher gehalten."
              },
              "search_distance": {
                "label": "Suchdistanz",
                "description": "Kandidatenradius: nur Netzkanten innerhalb dieser Distanz zu einem Punkt werden berücksichtigt. Erforderlich."
              },
              "max_candidates": {
                "label": "Max. Kandidaten",
                "description": "Maximale Anzahl beibehaltener Kandidatenkanten je Punkt (Standard 5)."
              }
            }
          },
          "solar_radiation": {
            "name": "Sonneneinstrahlung",
            "description": "Eingehende Sonnenstrahlung (Wh/m²) über ein DEM für einen Datumsbereich: direkt + diffus, unter Berücksichtigung von Neigung/Exposition, Horizontabschattung und Sonnenstand im Zeitverlauf — wie ArcGIS Raster Solar Radiation.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-Höhenraster (projiziert, Meter — Neigung und Horizont benötigen echte Distanzen)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster der Gesamtstrahlung (Wh/m²). Wenn ausgelassen, im Speicher gehalten."
              },
              "direct_output": {
                "label": "Direkte Ausgabe",
                "description": "Optionales Ausgaberaster für die Direktstrahlungskomponente (Wh/m²)."
              },
              "diffuse_output": {
                "label": "Diffuse Ausgabe",
                "description": "Optionales Ausgaberaster für die Diffusstrahlungskomponente (Wh/m²)."
              },
              "start_day": {
                "label": "Starttag",
                "description": "Erster Tag des Jahres (1-365) oder ein ISO-Datum (YYYY-MM-DD). Standard 1."
              },
              "end_day": {
                "label": "Endtag",
                "description": "Letzter Tag des Jahres (1-365) oder ein ISO-Datum. Standard 365."
              },
              "day_interval": {
                "label": "Tagesintervall",
                "description": "Alle so viele Tage über den Bereich abtasten (jede Abtastung steht für so viele Tage). Standard: Spanne/12 (etwa 12 Abtastungen)."
              },
              "time_step": {
                "label": "Zeitschritt",
                "description": "Stunden zwischen den Sonnenstandsabtastungen innerhalb jedes Tages. Standard 0.5."
              },
              "latitude": {
                "label": "Breitengrad",
                "description": "Geografische Breite in Grad. Standard: aus der DEM-Mitte abgeleitet für EPSG:4326 / 3857."
              },
              "transmittivity": {
                "label": "Transmissivität",
                "description": "Atmosphärische Transmissivität (0-1) für eine Luftmasseneinheit. Standard 0.6."
              },
              "diffuse_proportion": {
                "label": "Diffuser Anteil",
                "description": "Anteil der extraterrestrischen horizontalen Bestrahlungsstärke, der als diffuse Himmelsstrahlung behandelt wird (0-1). Standard 0.3."
              },
              "horizon_distance": {
                "label": "Horizontdistanz",
                "description": "Maximale Länge des Horizontstrahls in Zellen (begrenzt die Schattenberechnung). Standard 100."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes DEM-Band (Standard 1)."
              }
            }
          },
          "sort_features": {
            "name": "Objekte sortieren",
            "description": "Einen Vektorlayer nach Attributfeldern oder entlang einer raumfüllenden Hilbert-Kurve (räumliche Sortierung) neu ordnen, wie ArcGIS Sort — die Hilbert-Ordnung gruppiert räumlich nahe Datensätze, um GeoParquet-Pruning und PMTiles-Lokalität zu verbessern.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorlayer in der neuen Reihenfolge. Wenn ausgelassen, im Speicher gehalten."
              },
              "method": {
                "label": "Methode",
                "description": "'hilbert' (räumliche Kurvenordnung; Standard) oder 'attribute' (nach der Liste 'fields')."
              },
              "fields": {
                "label": "Felder",
                "description": "Attributmodus: durch Komma getrennte Felder mit optionaler Richtung, z. B. 'pop:desc,name:asc'."
              },
              "index_field": {
                "label": "Indexfeld",
                "description": "Optionaler Feldname zum Speichern der Hilbert-Kurvendistanz jedes Objekts."
              }
            }
          },
          "space_time_kernel_density": {
            "name": "Raum-Zeit-Kerndichte",
            "description": "Raum-Zeit-Kerndichte von Punkten mit Zeitstempel: ein Dichteband je Zeitscheibe (ein Multiband-Raster) aus einem separierbaren räumlichen (Epanechnikov/quartisch) x zeitlichen (dreieckig/Epanechnikov) Kernel, sodass jedes Band Punkte aggregiert, die in Raum und Zeit nahe sind, wie ArcGIS Space Time Kernel Density. Das zeitbewusste Gegenstück zur gebündelten 2D-heat_map.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer. Geografisch (EPSG:4326/ungekennzeichnetes Lon-Lat) verwendet Haversine-Meter; projiziert verwendet KBS-Einheiten. Nicht-Punktgeometrien verwenden ihren ersten/repräsentativen Stützpunkt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Multiband-Rasters (ein Band je Zeitscheibe; Treiber aus der Erweiterung). Wenn ausgelassen, im Speicher gehalten."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Feld mit der Zeit jedes Punkts: ein numerisches Feld (eigene Einheiten) oder eine ISO-8601-Datums-/Datum-Zeit-Zeichenkette."
              },
              "time_step": {
                "label": "Zeitschritt",
                "description": "Scheibenintervall: eine einfache Zahl (numerisches time_field) oder eine Dauer wie '1w', '7d', '12h', '1M'. Standard '1w'."
              },
              "temporal_bandwidth": {
                "label": "Zeitliche Bandbreite",
                "description": "Halbe Breite des zeitlichen Kernels, gleiche Einheiten/Dauersyntax wie time_step. Standard: gleich time_step."
              },
              "spatial_bandwidth": {
                "label": "Räumliche Bandbreite",
                "description": "Radius des räumlichen Kernels, in Metern bei geografischer Eingabe oder KBS-Einheiten bei projizierter. Standard: maximale Ausdehnung / 20."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße in KBS-Einheiten (Grad bei geografisch). Standard: maximale Ausdehnung / 200."
              },
              "weight_field": {
                "label": "Gewichtungsfeld",
                "description": "Optionales numerisches Feld zur Gewichtung jedes Punkts. Standard: jeder Punkt zählt als 1."
              },
              "spatial_kernel": {
                "label": "Räumlicher Kernel",
                "description": "Form des räumlichen Kernels: 'epanechnikov' (Standard) oder 'quartic'."
              },
              "temporal_kernel": {
                "label": "Zeitlicher Kernel",
                "description": "Form des zeitlichen Kernels: 'triangular' (Standard) oder 'epanechnikov'."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG zur Kennzeichnung des Ausgaberasters (Standard: aus dem Eingabelayer)."
              }
            }
          },
          "spatial_association_between_zones": {
            "name": "Räumliche Assoziation zwischen Zonen",
            "description": "Messen, wie stark zwei kategoriale Zonenraster über das V-Maß (Homogenität/Vollständigkeit) übereinstimmen, plus Assoziationswerte je Zone.",
            "params": {
              "zones1": {
                "label": "Zonen 1",
                "description": "Erstes kategoriales Zonenraster (z. B. Landbedeckung). Gleiches Gitter wie zones2."
              },
              "zones2": {
                "label": "Zonen 2",
                "description": "Zweites kategoriales Zonenraster (z. B. Ökoregionen) auf demselben Gitter wie zones1."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionale CSV-Tabelle je Klasse von Zone 1 (Klasse, Anzahl, Assoziation, dominante Klasse von Zone 2 und Anteil). Die Gesamtmaße werden immer im Ergebnis zurückgegeben."
              },
              "band1": {
                "label": "Band 1",
                "description": "1-basiertes zu lesendes Band von zones1 (Standard 1)."
              },
              "band2": {
                "label": "Band 2",
                "description": "1-basiertes zu lesendes Band von zones2 (Standard 1)."
              }
            }
          },
          "spatial_eigenvector_filtering": {
            "name": "Räumliche Eigenvektorfilterung (MESF)",
            "description": "Moran-Eigenvektoren (räumliche Filter) aus einer räumlichen Gewichtsmatrix erzeugen und die autokorrelierten Komponenten als Felder erklärender Variablen (MEV1, MEV2, …) anhängen, wie ArcGIS Decompose Spatial Structure / Create Spatial Component Explanatory Variables. Baut eine symmetrische Konnektivitätsmatrix (Kontiguität oder symmetrisiertes KNN), zentriert sie doppelt (M C M) und eigenzerlegt sie mit einem in reinem Rust implementierten zyklischen Jacobi-Löser; behält Eigenvektoren, deren Moran's I ≥ min_autocorrelation ist, absteigend geordnet und auf max_components begrenzt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (Punkte/Linien/Polygone; Kontiguitätsmethoden erfordern Polygone)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors — die Eingabeobjekte mit den beibehaltenen Eigenvektoren als MEV1, MEV2, … angehängt. Wenn ausgelassen, im Speicher gehalten."
              },
              "method": {
                "label": "Methode",
                "description": "Konzeptualisierung räumlicher Beziehungen: 'contiguity_edges' (Rook), 'contiguity_edges_corners' (Queen) oder 'knn' (symmetrisiert). Standard 'contiguity_edges_corners'."
              },
              "number_of_neighbors": {
                "label": "Anzahl der Nachbarn",
                "description": "Anzahl der nächsten Nachbarn k für method = knn. Standard 8."
              },
              "min_autocorrelation": {
                "label": "Min. Autokorrelation",
                "description": "Minimales Moran's I, das ein Eigenvektor haben muss, um beibehalten zu werden (positive räumliche Autokorrelation). Standard 0.25."
              },
              "max_components": {
                "label": "Max. Komponenten",
                "description": "Maximale Anzahl auszugebender Eigenvektoren, in absteigender Reihenfolge von Moran's I. Standard 15."
              }
            }
          },
          "spatial_outlier_detection": {
            "name": "Erkennung räumlicher Ausreißer",
            "description": "Bewertet Punkte anhand ihres Local Outlier Factor (LOF) – wie isoliert jeder Punkt relativ zur lokalen Dichte seiner k nächsten Nachbarn ist – und markiert die stärksten Ausreißer, wie ArcGIS Spatial Outlier Detection. Schließt die Lücke, die das binäre Rauschen-Label von DBSCAN hinterlässt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepunkte mit LOF-Wert und Ausreißerflag. Wenn ausgelassen, im Speicher gehalten."
              },
              "neighbors": {
                "label": "Nachbarn",
                "description": "Anzahl der nächsten Nachbarn k (Standard 20)."
              },
              "percent_outlier": {
                "label": "Ausreißeranteil (%)",
                "description": "Die obersten so viel Prozent der Punkte nach LOF als Ausreißer markieren (Standard 5). Ignoriert, wenn 'threshold' gesetzt ist."
              },
              "threshold": {
                "label": "Schwellenwert",
                "description": "Expliziter LOF-Grenzwert: Punkte mit LOF darüber sind Ausreißer (überschreibt percent_outlier)."
              }
            }
          },
          "spatially_constrained_multivariate_clustering": {
            "name": "Räumlich beschränktes multivariates Clustering",
            "description": "Unterteilt Objekte mit dem SKATER-Algorithmus in räumlich zusammenhängende, attributhomogene Regionen (minimaler Spannbaum über einen Nachbarschaftsgraphen, geschnitten zur Maximierung der Varianz zwischen den Clustern), mit optionalen Größen-/Ausgewogenheitsbeschränkungen. Jeder Cluster ist konstruktionsbedingt zusammenhängend, anders als bei multivariate_clustering. Wie ArcGIS Spatially Constrained Multivariate Clustering.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygon- (oder Punkt-)Objekte."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad für die Eingabeobjekte plus ein Feld CLUSTER_ID. Wenn ausgelassen, im Speicher gehalten."
              },
              "analysis_fields": {
                "label": "Analysefelder",
                "description": "Durch Komma/Semikolon getrennte numerische Feldnamen, nach denen geclustert wird."
              },
              "number_of_clusters": {
                "label": "Anzahl Cluster",
                "description": "Zielanzahl der Cluster (Standard 5)."
              },
              "neighborhood": {
                "label": "Nachbarschaft",
                "description": "'contiguity_edges' (Rook, Standard), 'contiguity_edges_corners' (Queen) oder 'knn'."
              },
              "number_of_neighbors": {
                "label": "Anzahl der Nachbarn",
                "description": "Nachbaranzahl für die Nachbarschaft 'knn' (Standard 8)."
              },
              "constraint": {
                "label": "Einschränkung",
                "description": "'none' (Standard), 'feature_count' oder 'attribute_value'."
              },
              "constraint_field": {
                "label": "Bedingungsfeld",
                "description": "Je Cluster summiertes Feld, wenn 'constraint' gleich 'attribute_value' ist."
              },
              "min_constraint": {
                "label": "Min. Bedingung",
                "description": "Minimale Objektanzahl oder Attributsumme je Cluster; Schnitte, die dagegen verstoßen, werden übersprungen."
              },
              "max_constraint": {
                "label": "Max. Bedingung",
                "description": "Maximale Objektanzahl oder Attributsumme je Cluster; Cluster darüber werden auch über 'number_of_clusters' hinaus weiter geteilt."
              },
              "scale_data": {
                "label": "Daten skalieren",
                "description": "Die Analysefelder vor dem Clustern z-standardisieren (Standard wahr)."
              },
              "output_table": {
                "label": "Ausgabetabelle",
                "description": "Optionaler Pfad für die Zusammenfassung je Cluster (Mittelwerte, R-Quadrat je Variable, Pseudo-F)."
              }
            }
          },
          "spectral_index": {
            "name": "Spektralindex",
            "description": "Berechnet einen Spektralindex (NDVI, NDWI, NDBI, NBR, EVI, SAVI) aus einem Multiband-Raster.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Multiband-Eingabe-Rasterdatei."
              },
              "index": {
                "label": "Index",
                "description": "Zu berechnender Index: ndvi, ndwi, ndbi, nbr, evi oder savi."
              },
              "red": {
                "label": "Rot",
                "description": "1-basierte Bandnummer des roten Bands."
              },
              "nir": {
                "label": "NIR",
                "description": "1-basierte Bandnummer des nahen Infrarotbands."
              },
              "green": {
                "label": "Grün",
                "description": "1-basierte Bandnummer des grünen Bands."
              },
              "blue": {
                "label": "Blau",
                "description": "1-basierte Bandnummer des blauen Bands."
              },
              "swir": {
                "label": "SWIR",
                "description": "1-basierte Bandnummer des kurzwelligen Infrarotbands."
              },
              "soil_factor": {
                "label": "Bodenfaktor",
                "description": "Bodenkorrekturfaktor L für SAVI (Standard 0.5)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              }
            }
          },
          "split_by_attributes": {
            "name": "Nach Attributen teilen",
            "description": "Teilt einen Vektor-Layer in eine Ausgabedatei pro eindeutigem Wert (oder Wertekombination) des bzw. der angegebenen Felder auf, wie ArcGIS Split By Attributes.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer."
              },
              "output_dir": {
                "label": "Ausgabeverzeichnis",
                "description": "Ausgabeverzeichnis; hier wird eine Datei je Gruppe geschrieben (bei Bedarf erstellt)."
              },
              "fields": {
                "label": "Felder",
                "description": "Durch Komma getrennte(r) Feldname(n), nach denen geteilt wird (ein Mehrfeldschlüssel verbindet die Werte mit '__')."
              },
              "format": {
                "label": "Format",
                "description": "Erweiterung des Ausgabeformats: geojson (Standard), fgb, parquet, shp."
              }
            }
          },
          "split_by_features": {
            "name": "Nach Objekten teilen",
            "description": "Schneidet einen Eingabe-Layer gegen jede Zone eines Polygon-Aufteilungslayers zu und schreibt eine Ausgabedatei pro eindeutigem Wert des Aufteilungsfelds. Zonen mit gleichem Wert werden zuerst zusammengeführt, leere Zonen werden übersprungen. Wie ArcGIS Split (Analysis).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zu teilende Objekte (Punkt, Linie oder Polygon)."
              },
              "split_features": {
                "label": "Trennobjekte",
                "description": "Polygonlayer, dessen Objekte die Teilungszonen definieren."
              },
              "split_field": {
                "label": "Trennfeld",
                "description": "Feld in 'split_features', das den Namen jeder Ausgabe liefert."
              },
              "output_dir": {
                "label": "Ausgabeverzeichnis",
                "description": "Verzeichnis, das eine Ausgabedatei je unterschiedlichem Teilungswert erhält."
              },
              "output_format": {
                "label": "Ausgabeformat",
                "description": "Erweiterung/Treiber der Ausgabedatei: 'geojson' (Standard), 'shp', 'gpkg', 'parquet', 'csv'."
              }
            }
          },
          "split_line_at_point": {
            "name": "Linie an Punkt teilen",
            "description": "Teilt Polylinienobjekte an den Positionen von Punktobjekten auf, die innerhalb eines Suchradius liegen, fügt an jedem gefangenen Punkt einen Knoten ein und gibt ein Objekt pro entstandenem Teilsegment aus (Attribute des übergeordneten Objekts bleiben erhalten) – wie ArcGIS Split Line At Point.",
            "params": {
              "input_lines": {
                "label": "Eingabelinien",
                "description": "Zu teilender Eingabe-Polylinien-Vektorlayer."
              },
              "point_features": {
                "label": "Punktobjekte",
                "description": "Punkt- (oder Multipunkt-)Vektorlayer, dessen Positionen die Teilungsknoten definieren."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Maximale Distanz in den KBS-Einheiten der Linien zwischen einem Punkt und einer Linie, damit der Punkt diese Linie teilt. Erforderlich, positiv."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienvektorpfad (Treiber aus der Dateierweiterung). Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              }
            }
          },
          "split_raster": {
            "name": "Raster teilen",
            "description": "Teilt ein Raster nach Kachelanzahl, fester Pixelgröße oder Polygonobjekten in eigenständige Kacheln auf, mit optionaler Pixelüberlappung – wie ArcGIS Split Raster. Jede Kachel behält KBS und Georeferenzierung bei.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster."
              },
              "output_dir": {
                "label": "Ausgabeverzeichnis",
                "description": "Ausgabeverzeichnis für die Kacheldateien (bei Bedarf erstellt)."
              },
              "base_name": {
                "label": "Basisname",
                "description": "Präfix der Ausgabedateinamen (Standard 'tile')."
              },
              "split_method": {
                "label": "Trennmethode",
                "description": "'count' (N×M-Gitter, Standard), 'size' (Kacheln mit fester Pixelgröße) oder 'polygons' (ein Zuschnitt je Objekt)."
              },
              "num_x": {
                "label": "Anzahl X",
                "description": "Anzahl der Kachelspalten für 'count' (Standard 2)."
              },
              "num_y": {
                "label": "Anzahl Y",
                "description": "Anzahl der Kachelzeilen für 'count' (Standard 2)."
              },
              "tile_size_x": {
                "label": "Kachelgröße X",
                "description": "Kachelbreite in Pixeln für 'size' (Standard 256)."
              },
              "tile_size_y": {
                "label": "Kachelgröße Y",
                "description": "Kachelhöhe in Pixeln für 'size' (Standard 256)."
              },
              "polygons": {
                "label": "Polygone",
                "description": "Polygon-Vektorlayer für den Modus 'polygons' (eine Kachel je Objekt)."
              },
              "overlap": {
                "label": "Überlappung",
                "description": "Pixelüberlappung, die jeder Kachel an allen Seiten hinzugefügt wird (Standard 0)."
              },
              "format": {
                "label": "Format",
                "description": "Erweiterung/Treiber der Ausgabedatei: 'tif' (Standard) oder 'png'."
              }
            }
          },
          "stack_profile": {
            "name": "Stapelprofil",
            "description": "Tastet mehrere Oberflächenraster entlang derselben Polylinie ab und gibt eine Tabelle im Langformat aus (LINE_ID, FIRST_DIST, FIRST_Z, SRC_ID, SRC_NAME), sodass die Oberflächen im Querschnitt auf einer gemeinsamen Distanzachse verglichen werden können. Wie ArcGIS Stack Profile.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zu profilierende Eingabe-Linienobjekte."
              },
              "surfaces": {
                "label": "Oberflächen",
                "description": "Durch Komma/Semikolon getrennte Liste der Oberflächenrasterpfade, in der angegebenen Reihenfolge abgetastet."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der Profiltabelle. Wenn ausgelassen, im Speicher gehalten."
              },
              "sample_distance": {
                "label": "Abtastdistanz",
                "description": "Stationsabstand in Karteneinheiten (Standard: die feinste Eingabezellengröße)."
              },
              "line_id_field": {
                "label": "Linien-ID-Feld",
                "description": "Optionales Feld, das LINE_ID liefert; Standard ist der Objektindex."
              },
              "method": {
                "label": "Methode",
                "description": "Oberflächenabtastung: 'bilinear' (Standard) oder 'nearest'."
              }
            }
          },
          "storage_capacity": {
            "name": "Speicherkapazität",
            "description": "Durchläuft Wasserspiegelhöhen über ein DEM und meldet für jede Stufe die überflutete Fläche und das Speichervolumen (Stufen-Flächen-Volumen-Kurve) pro Analysezone oder für das gesamte DEM, wie ArcGIS Storage Capacity.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Eingabe-DEM-Raster (Höhen)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der CSV (zone_id, level, elevation, area, volume)."
              },
              "zones": {
                "label": "Zonen",
                "description": "Optionaler Polygonlayer; eine Wasserstand-Fläche-Volumen-Kurve je Polygon. Wenn ausgelassen, ist das gesamte DEM eine Zone."
              },
              "zone_id_field": {
                "label": "Zonen-ID-Feld",
                "description": "Feld, das jede Zone in der Ausgabe benennt (Standard: der Objektindex)."
              },
              "num_levels": {
                "label": "Anzahl Stufen",
                "description": "Anzahl der Höhenschritte zwischen Minimum und Maximum jeder Zone (Standard 20). Ignoriert, wenn 'increment' angegeben ist."
              },
              "increment": {
                "label": "Inkrement",
                "description": "Fester Höhenschritt zwischen den Stufen (Karteneinheiten). Überschreibt 'num_levels'."
              },
              "min_elevation": {
                "label": "Min. Höhe",
                "description": "Optionale untere Höhengrenze des Durchlaufs (Standard: minimales Gelände jeder Zone)."
              },
              "max_elevation": {
                "label": "Max. Höhe",
                "description": "Optionale obere Höhengrenze des Durchlaufs (Standard: maximales Gelände jeder Zone)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes DEM-Band (Standard 1)."
              }
            }
          },
          "strip_map_index_features": {
            "name": "Streifenindexobjekte",
            "description": "Läuft jede Eingabelinie ab und gibt eine nummerierte Folge gedrehter, überlappender Seitenrechtecke aus, die an der lokalen Routenrichtung ausgerichtet sind, für Streifenkarten-Atlanten entlang einer Autobahn, eines Flusses, einer Pipeline oder eines Wanderwegs – wie ArcGIS Strip Map Index Features.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zu indizierender Eingabe-Linienvektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Polygonvektors der Indexseiten (Treiber aus der Erweiterung). Wenn ausgelassen, im Speicher gehalten."
              },
              "page_length": {
                "label": "Seitenlänge",
                "description": "Länge jeder Seite entlang der Route in KBS-Einheiten. Erforderlich."
              },
              "page_width": {
                "label": "Seitenbreite",
                "description": "Breite jeder Seite quer zur Route in KBS-Einheiten. Erforderlich."
              },
              "overlap": {
                "label": "Überlappung",
                "description": "Anteil [0, 1) von page_length, um den sich aufeinanderfolgende Seiten entlang der Route überlappen. Standard 0."
              },
              "orientation": {
                "label": "Orientierung",
                "description": "along_line (Standard): jede Seite auf ihre lokale Sehnenpeilung drehen. horizontal/vertical: Drehung an der nächsten Ost-West-/Nord-Süd-Achse ausrichten."
              },
              "start_page": {
                "label": "Startseite",
                "description": "Erste zu vergebende Seitennummer. Standard 1."
              }
            }
          },
          "subdivide_polygon": {
            "name": "Polygon unterteilen",
            "description": "Unterteilt jedes Polygon mit geraden parallelen Schnitten in einem vorgegebenen Winkel in flächengleiche Teile (eine feste Anzahl von Teilen oder jeweils eine Zielfläche), wie ArcGIS Subdivide Polygon.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Polygonvektorlayer (für echte Flächengleichheit ein projiziertes/flächentreues KBS verwenden)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonvektorpfad (Treiber aus der Dateiendung). Falls weggelassen, wird das Ergebnis im Speicher gehalten."
              },
              "method": {
                "label": "Methode",
                "description": "'equal_parts' (num_parts Streifen gleicher Fläche, Standard) oder 'equal_areas' (Streifen mit target_area, Rest im letzten)."
              },
              "num_parts": {
                "label": "Anzahl Teile",
                "description": "Anzahl der flächengleichen Teile (für method=equal_parts). Standard 2."
              },
              "target_area": {
                "label": "Zielfläche",
                "description": "Fläche jedes Teils in KBS-Einheiten (erforderlich für method=equal_areas)."
              },
              "angle": {
                "label": "Winkel",
                "description": "Schnittausrichtung in Grad (0 = vertikale Schnitte / horizontale Streifen). Standard 0."
              }
            }
          },
          "subset_features": {
            "name": "Objektteilmenge",
            "description": "Teilt einen Objekt-Layer zufällig in eine Trainingsteilmenge und ihr Komplement (Testteilmenge) auf, nach Prozentsatz oder absoluter Anzahl, mit einem deterministischen Zufallsgenerator mit Seed. Optional geschichtet nach einem Gruppenfeld. Wie ArcGIS Subset Features.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (beliebiger Geometrietyp)."
              },
              "output_training": {
                "label": "Trainingsausgabe",
                "description": "Ausgabepfad für die Trainingsteilmenge. Wenn ausgelassen, im Speicher gehalten."
              },
              "output_test": {
                "label": "Testausgabe",
                "description": "Optionaler Ausgabepfad für die komplementäre (Test-)Teilmenge. Wenn ausgelassen, wird die Testteilmenge im Speicher gehalten."
              },
              "size": {
                "label": "Größe",
                "description": "Größe der Trainingsteilmenge: ein Prozentsatz (0-100) oder eine absolute Objektanzahl, je nach 'size_method' (Standard 50)."
              },
              "size_method": {
                "label": "Größenmethode",
                "description": "'percentage' (Standard) oder 'absolute'."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed des Zufallsgenerators für eine reproduzierbare Aufteilung (Standard feste Konstante)."
              },
              "group_field": {
                "label": "Gruppierungsfeld",
                "description": "Optionales Feld zur Schichtung: jede Gruppe trägt ihren eigenen proportionalen Anteil zur Trainingsteilmenge bei."
              }
            }
          },
          "subset_multidimensional_raster": {
            "name": "Teilmenge eines multidimensionalen Rasters",
            "description": "Beschränkt einen multidimensionalen Rasterwürfel auf eine Teilmenge seiner Schichten, nach Dimensionskoordinatenbereich, expliziten Indizes oder einer Schrittweite (ArcGIS Subset Multidimensional Raster / Select By Dimension). Die Würfel-Werkzeuge aus Runde 18 verarbeiten alle einen gesamten Würfel, sodass ein Untersuchungsfenster bisher nicht analysiert werden konnte, ohne die Eingabe außerhalb des Katalogs neu zu erzeugen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Multidimensionales Raster oder eine durch Komma getrennte Liste koregistrierter Raster, deren Bänder zu einem Würfel verkettet werden."
              },
              "dimension_values": {
                "label": "Dimensionswerte",
                "description": "Optionale streng steigende Koordinaten je Schicht (Daten, Tiefen, Wellenlängen), eine je Schicht. Erforderlich für 'dimension_range'."
              },
              "dimension": {
                "label": "Dimension",
                "description": "Name der Dimension, nur für die Berichterstattung verwendet (Standard 'slice')."
              },
              "dimension_range": {
                "label": "Dimensionsbereich",
                "description": "Inklusiver Koordinatenbereich als 'min,max'. Erfordert 'dimension_values'. Schließt 'indices' aus."
              },
              "indices": {
                "label": "Indizes",
                "description": "Explizite 0-basierte Schichtindizes, z. B. '0,2,5'. Schließt 'dimension_range' aus."
              },
              "step": {
                "label": "Schritt",
                "description": "Nach den übrigen Filtern jede N-te Schicht behalten (Standard 1)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Würfelraster, ein Band je beibehaltener Schicht. Wenn ausgelassen, im Speicher gehalten."
              }
            }
          },
          "summarize_categorical_raster": {
            "name": "Kategoriales Raster zusammenfassen",
            "description": "Tabelliert Zellenanzahl, Fläche und Anteil jeder Klasse eines kategorialen Rasters, eine Zeile pro Schicht bei Multiband-/multidimensionalen Stapeln, optional beschränkt auf ein Untersuchungsgebiet (ArcGIS Summarize Categorical Raster). Das gebündelte raster_area schreibt Klassensummen in Rasterzellen statt in eine Tabelle zurück und ist auf ein Band beschränkt, sodass es die Klassenflächen-Zeitreihe pro Datum, die eine Landbedeckungsänderungsanalyse benötigt, nicht erzeugen kann. Für geographische Raster wird die Zellfläche pro Zeile integriert.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Kategoriales Eingaberaster (Einzel- oder Multiband)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad der Tabelle. Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              },
              "aoi": {
                "label": "Untersuchungsgebiet",
                "description": "Optionaler Polygonlayer, der die Zusammenfassung auf ein Untersuchungsgebiet beschränkt."
              },
              "aoi_id_field": {
                "label": "Untersuchungsgebiet-ID-Feld",
                "description": "Feld in 'aoi', das jedes Gebiet identifiziert; wenn angegeben, wird die Zusammenfassung je AOI-Objekt erzeugt."
              },
              "area_units": {
                "label": "Flächeneinheiten",
                "description": "Flächeneinheiten: map_units (Standard), hectares oder square_kilometers."
              },
              "include_nodata": {
                "label": "NoData einbeziehen",
                "description": "Wenn wahr, wird NoData als eigene Klassenzeile ausgegeben (Standard falsch)."
              },
              "bands": {
                "label": "Bänder",
                "description": "Durch Komma getrennte 1-basierte Bandliste zum Zusammenfassen (Standard: alle Bänder)."
              }
            }
          },
          "summarize_nearby": {
            "name": "Umgebung zusammenfassen",
            "description": "Puffert Eingabeobjekte mit einer oder mehreren geradlinigen Distanzen und fasst einen zweiten Layer innerhalb jedes Puffers zusammen: Anzahl der Objekte, verschnittene Fläche (Polygone), zugeschnittene Länge (Linien) sowie maßgewichtete Summe/Mittelwert numerischer Felder.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer, dessen Objekte gepuffert werden (Punkte, Linien oder Polygone), Format automatisch erkannt (oder In-Memory-Handle)."
              },
              "summary_features": {
                "label": "Zusammenfassungsobjekte",
                "description": "Vektorlayer, der innerhalb jedes Puffers zusammengefasst wird (Polygone nach verschnittener Fläche, Linien nach zugeschnittener Länge oder Punkte nach Anzahl)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "distances": {
                "label": "Distanzen",
                "description": "Durch Komma getrennte Liste der Pufferdistanzen in KBS-Einheiten, z. B. \"1000,2000,5000\". Aufsteigend sortiert; Duplikate und nicht-positive Werte werden verworfen."
              },
              "sum_fields": {
                "label": "Summenfelder",
                "description": "Optionale durch Komma getrennte numerische Felder des Zusammenfassungslayers zum Aggregieren. Jedes ergibt eine Spalte sum_<field> und mean_<field> (flächengewichtet bei Polygonen, längengewichtet bei Linien, einfach bei Punkten)."
              },
              "id_field": {
                "label": "ID-Feld",
                "description": "Optionales Feld im Eingabelayer, das jedes Quellobjekt in der Ausgabe identifiziert. Standard ist der Eingabeobjektindex."
              }
            }
          },
          "summarize_percent_change": {
            "name": "Prozentuale Änderung zusammenfassen",
            "description": "Zählt Vorfälle aus einem aktuellen und einem vorherigen Zeitraum innerhalb jedes Flächenobjekts und meldet Differenz der Anzahl, prozentuale Veränderung und eine Veränderungsklasse. Die prozentuale Veränderung ist null (Klasse 'new'), wenn die vorherige Anzahl null ist. Wie ArcGIS Summarize Percent Change.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Flächenobjekte (Reviere, Zählbezirke, Gitterzellen), in die zusammengefasst wird."
              },
              "current_features": {
                "label": "Aktuelle Objekte",
                "description": "Vorfallspunktobjekte des aktuellen Zeitraums."
              },
              "previous_features": {
                "label": "Vorherige Objekte",
                "description": "Vorfallspunktobjekte des vorherigen Zeitraums."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad für die Flächen mit Veränderungsfeldern. Wenn ausgelassen, im Speicher gehalten."
              },
              "search_radius": {
                "label": "Suchradius",
                "description": "Optionale Distanz in Karteneinheiten; Vorfälle innerhalb dieser Distanz zu einer Fläche zählen ebenfalls, nicht nur die darin liegenden. Beachten Sie, dass ein positiver Radius die Einzugsbereiche überlappen lässt, sodass ein Vorfall von mehr als einer Fläche gezählt werden kann (die ausgegebenen Gesamtsummen bleiben dedupliziert)."
              }
            }
          },
          "summarize_within": {
            "name": "Innerhalb zusammenfassen",
            "description": "Fasst die Attribute eines Layers innerhalb eines vorhandenen Polygon-Layers zusammen und gewichtet teilweise überlappende Objekte nach verschnittener Fläche oder Länge, wie ArcGIS Summarize Within.",
            "params": {
              "polygons": {
                "label": "Polygone",
                "description": "Polygonlayer, in den zusammengefasst wird. Seine Objekte und Attribute bleiben erhalten."
              },
              "input": {
                "label": "Eingabe",
                "description": "Zusammenzufassender Layer (Punkt, Linie oder Polygon)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Pfad der Ausgabepolygone. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              },
              "fields": {
                "label": "Felder",
                "description": "Durch Komma getrennte 'field:statistic'-Paare, z. B. 'pop:sum,income:mean'. Statistiken: sum, mean, min, max, stddev, count."
              },
              "keep_all": {
                "label": "Alle behalten",
                "description": "Polygone ohne schneidende Objekte beibehalten (Standard wahr). Wenn falsch, werden leere Polygone verworfen."
              },
              "shape_sum": {
                "label": "Formsumme",
                "description": "Die summierte Anzahl / Länge / Fläche der verschnittenen Eingabegeometrie anhängen (Standard wahr)."
              },
              "group_field": {
                "label": "Gruppierungsfeld",
                "description": "Optionales Feld im zusammengefassten Layer; gibt eine gruppierte Zusammenfassungszeile je unterschiedlichem Wert aus."
              }
            }
          },
          "summary_statistics": {
            "name": "Zusammenfassende Statistik",
            "description": "GROUP BY im SQL-Stil über ein oder mehrere Fallfelder: Für jede eindeutige Kombination der Fallfelder wird eine Liste von (Feld, Statistik)-Aggregaten berechnet (count/sum/mean/min/max/std/first/last) plus die Anzahl der Datensätze pro Gruppe. Die Ausgabe ist eine reine Attributtabelle. Ohne Fallfeld entsteht eine einzelne Gesamtsummenzeile (wie ArcGIS Summary Statistics; nur count reproduziert Frequency).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zu aggregierender Eingabe-Vektorlayer oder Attributtabelle."
              },
              "statistics": {
                "label": "Statistiken",
                "description": "Durch Semikolon/Komma getrennte Liste von 'field statistic'-Paaren (auch 'field:statistic' wird akzeptiert), z. B. 'population sum; population mean; elev max'. Statistiken: count, sum, mean, min, max, std, first, last."
              },
              "case_fields": {
                "label": "Fallfelder",
                "description": "Optionale(r) durch Komma/Semikolon getrennte(r) Fallfeldname(n) (GROUP BY). Wenn ausgelassen, wird eine einzige Zusammenfassungszeile über die gesamte Tabelle erzeugt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad der Tabelle (Treiber aus der Erweiterung; GeoParquet oder CSV). Wenn ausgelassen, wird die Tabelle im Speicher gehalten. Spalten: die Fallfelder, ein Datensatz 'count', dann eine Spalte '<field>_<statistic>' je angefordertem Paar."
              }
            }
          },
          "sun_shadow_volume": {
            "name": "Sonnenschattenvolumen",
            "description": "Extrudiert 3D-Körper entlang des Sonnenvektors bis zum Boden, um geschlossene Schattenvolumenkörper für ein gegebenes Datum und eine gegebene Uhrzeit zu erzeugen (ArcGIS Sun Shadow Volume). shadow_image, shadow_animation und time_in_daylight arbeiten alle auf einem Raster-DSM und geben Raster aus, und solar_radiation berechnet die Einstrahlung – keines erzeugt Schattengeometrie, sodass Fragen wie 'ist dieses Fenster verschattet' oder 'wie viel des Luftraums über diesem Grundstück liegt im Schatten' nicht beantwortet werden können. Die Ausgabe lässt sich mit inside_3d, intersect_3d und union_3d kombinieren.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "3D-Gebäudekörper oder extrudierte Grundrisse (Dreiecksnetz-MultiPolygone mit Z)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Geschlossene Schattenvolumenkörper. Wenn ausgelassen, im Speicher gehalten."
              },
              "datetime": {
                "label": "Datum/Uhrzeit",
                "description": "Lokales Datum/Uhrzeit des Sonnenstands als 'YYYY-MM-DDTHH:MM' oder 'YYYY-MM-DD HH:MM'. Wird als Parameter übernommen, nie von einer Uhr, damit die Ergebnisse reproduzierbar sind."
              },
              "latitude": {
                "label": "Breitengrad",
                "description": "Geografische Breite in Grad für die Sonnengeometrie. Erforderlich: ohne Projektions-Engine nicht ableitbar."
              },
              "utc_offset": {
                "label": "UTC-Versatz",
                "description": "Stunden Abweichung von UTC der angegebenen Ortszeit (Standard 0)."
              },
              "adjusted_for_dst": {
                "label": "Sommerzeit berücksichtigt",
                "description": "Die angegebene Zeit als sommerzeitbereinigt behandeln und vor der Sonnenberechnung eine Stunde abziehen (Standard falsch), entsprechend ArcGIS."
              },
              "ground_elevation": {
                "label": "Geländehöhe",
                "description": "Konstante Boden-Z, auf die der Schatten projiziert wird. Standard: das eigene minimale Z jedes Objekts."
              },
              "max_length": {
                "label": "Maximale Länge",
                "description": "Obergrenze der Sweep-Distanz in KBS-Einheiten, damit eine tief stehende Sonne kein kilometerlanges Prisma erzeugt. Standard: unbegrenzt."
              }
            }
          },
          "surface_difference": {
            "name": "Oberflächendifferenz",
            "description": "Grenzt als Polygone ab, wo eine Oberfläche über, unter oder auf gleicher Höhe mit einer anderen liegt, jeweils mit Klasse, Fläche, Volumen und Differenzstatistiken (ArcGIS Surface Difference). cut_fill misst dieselben Größen, gibt aber nur ein Regionslabel-Raster und eine CSV aus, sodass seine Regionen keine Geometrie zum Überlagern, Zuschneiden oder Verknüpfen haben; surface_volume und polygon_volume messen gegen eine Ebene oder innerhalb bereits vorhandener Polygone, statt sie zu ermitteln.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zu klassifizierendes Oberflächenraster."
              },
              "reference": {
                "label": "Referenz",
                "description": "Referenzoberfläche: Pfad eines koregistrierten Rasters oder eine konstante Höhe für den Vergleich mit einem ebenen Bezugsniveau."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonlayer der klassifizierten Regionen. Wenn ausgelassen, im Speicher gehalten."
              },
              "output_raster": {
                "label": "Ausgaberaster",
                "description": "Ausgaberaster der vorzeichenbehafteten Differenz (Eingabe minus Referenz). Wird immer erzeugt; im Speicher gehalten, wenn kein Pfad angegeben ist."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Differenzen innerhalb dieses Werts um null gelten als deckungsgleich (Standard 0.0)."
              },
              "min_area": {
                "label": "Mindestfläche",
                "description": "Regionen verwerfen, die kleiner als diese Fläche in Karteneinheiten zum Quadrat sind."
              },
              "include_coincident": {
                "label": "Deckungsgleiche einbeziehen",
                "description": "Auch Polygone für die unveränderte Klasse ausgeben (Standard falsch). Standardmäßig aus, weil es in den meisten Szenen ein einziges riesiges Hintergrundpolygon ist."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band der Eingabeoberfläche (Standard 1)."
              },
              "reference_band": {
                "label": "Referenzband",
                "description": "1-basiertes Band der Referenzoberfläche (Standard 1)."
              }
            }
          },
          "surface_parameters": {
            "name": "Oberflächenparameter",
            "description": "Neigung, Exposition oder Krümmung (mean/profile/tangential/plan/gaussian/casorati/contour_geodesic_torsion) aus einem DEM über eine lokale quadratische/biquadratische Kleinste-Quadrate-Flächenanpassung über eine gewählte Nachbarschaftsdistanz, wie ArcGIS Surface Parameters – das skalenadaptive Gegenstück zu den gebündelten festen 3×3-Geländewerkzeugen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Höhenraster (DEM)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des Rasters. Wenn ausgelassen, im Speicher gehalten."
              },
              "parameter": {
                "label": "Parameter",
                "description": "Zu berechnender Parameter: slope (Standard), aspect, mean_curvature, profile_curvature, tangential_curvature, plan_curvature, gaussian_curvature, casorati_curvature, contour_geodesic_torsion."
              },
              "fit": {
                "label": "Anpassung",
                "description": "Oberflächenmodell: 'quadratic' (6 Terme, Standard) oder 'biquadratic' (9 Terme)."
              },
              "neighborhood_distance": {
                "label": "Nachbarschaftsdistanz",
                "description": "Nachbarschaftsradius in Karteneinheiten (Standard = eine Zellengröße, d. h. ein 3×3-Fenster)."
              },
              "neighborhood_type": {
                "label": "Nachbarschaftstyp",
                "description": "'fixed' (Standard) verwendet überall den vollen Radius; 'adaptive' verkleinert das Fenster neben Datenlücken/Rändern auf 1 Zelle."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das gelesen wird (Standard 1)."
              }
            }
          },
          "surface_volume": {
            "name": "Oberflächenvolumen",
            "description": "Integriert eine Rasteroberfläche gegen eine horizontale Bezugsebene und meldet 2D-Fläche, 3D-Oberfläche und Volumen für den Teil oberhalb und/oder unterhalb der Ebene (wie ArcGIS Surface Volume). Für Erdbau-Abtrag/Auftrag und Speicherkapazitätsanalysen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Höhenoberflächenraster."
              },
              "reference_plane": {
                "label": "Referenzebene",
                "description": "Höhe der Referenzebene, gegen die integriert wird (Standard 0)."
              },
              "direction": {
                "label": "Richtung",
                "description": "Zu integrierende Seite der Ebene: 'above', 'below' oder 'both' (Standard 'above')."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das gelesen wird (Standard 1)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad der CSV für die Ergebnistabelle. Wenn ausgelassen, werden die Ergebnisse nur im Laufergebnis zurückgegeben."
              }
            }
          },
          "table_to_geometry": {
            "name": "Tabelle zu Geometrie",
            "description": "Erzeugt Linien- oder Ellipsenobjekte aus Tabellenfeldern: Start-/End-Koordinatenpaare (XY To Line), Ursprung + Richtung + Distanz (Bearing Distance To Line) oder Mittelpunkt + Haupt-/Nebenachse + Azimut (Table To Ellipse) – mit planarer, geodätischer und Loxodromen-Konstruktion.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Attributtabelle oder Punkt-Vektorlayer."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "mode": {
                "label": "Modus",
                "description": "'xy_to_line', 'bearing_distance' oder 'ellipse'."
              },
              "line_type": {
                "label": "Linientyp",
                "description": "'geodesic' (Standard, kürzester Weg auf dem WGS84-Ellipsoid), 'rhumb' (konstante Peilung) oder 'planar' (gerade kartesische Segmente in den Einheiten der Eingabe)."
              },
              "vertex_spacing": {
                "label": "Stützpunktabstand",
                "description": "Verdichtungsabstand für gekrümmte (geodätische/Loxodrom-)Linien und Abtastabstand des Ellipsenumrisses, in Metern bei geodesic/rhumb oder KBS-Einheiten bei planar. Standard: eine feste Segmentanzahl."
              },
              "polygon_output": {
                "label": "Polygonausgabe",
                "description": "Nur mode=ellipse: ein gefülltes Polygon statt eines geschlossenen Linienumrisses ausgeben. Standard falsch."
              },
              "start_x": {
                "label": "Start X",
                "description": "mode=xy_to_line: Feld mit dem Start-X / Längengrad."
              },
              "start_y": {
                "label": "Start Y",
                "description": "mode=xy_to_line: Feld mit dem Start-Y / Breitengrad."
              },
              "end_x": {
                "label": "Ende X",
                "description": "mode=xy_to_line: Feld mit dem End-X / Längengrad."
              },
              "end_y": {
                "label": "Ende Y",
                "description": "mode=xy_to_line: Feld mit dem End-Y / Breitengrad."
              },
              "x": {
                "label": "X",
                "description": "mode=bearing_distance/ellipse: Feld mit dem Ursprungs-/Mittelpunkt-X / Längengrad."
              },
              "y": {
                "label": "Y",
                "description": "mode=bearing_distance/ellipse: Feld mit dem Ursprungs-/Mittelpunkt-Y / Breitengrad."
              },
              "bearing": {
                "label": "Richtung",
                "description": "mode=bearing_distance: Feld mit der Peilung in Grad im Uhrzeigersinn von Norden."
              },
              "distance": {
                "label": "Distanz",
                "description": "mode=bearing_distance: Feld mit der Wegdistanz (Meter bei geodesic/rhumb, KBS-Einheiten bei planar)."
              },
              "major": {
                "label": "Hauptachse",
                "description": "mode=ellipse: Feld mit der Länge der großen Halbachse (Meter bei geodesic/rhumb, KBS-Einheiten bei planar)."
              },
              "minor": {
                "label": "Nebenachse",
                "description": "mode=ellipse: Feld mit der Länge der kleinen Halbachse (gleiche Einheiten wie major)."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "mode=ellipse: Feld mit der Richtung der Hauptachse in Grad im Uhrzeigersinn von Norden."
              }
            }
          },
          "tabulate_intersection": {
            "name": "Verschneidung tabellieren",
            "description": "Zonale Zusammenfassung Vektor-auf-Vektor: Verteilt einen Klassen-Layer (Polygone nach Fläche, Linien nach verschnittener Länge oder Punkte nach Anzahl) auf Zonenpolygone und meldet verschnittenes Maß, Prozentanteil der Zone und maßgewichtete Summenfelder.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zonen-Polygonlayer, Format automatisch erkannt (oder In-Memory-Handle)."
              },
              "class_features": {
                "label": "Klassenobjekte",
                "description": "Klassen-Vektorlayer, der auf die Zonen aufgeteilt wird (Polygone nach Fläche, Linien nach verschnittener Länge oder Punkte nach Anzahl zusammengefasst)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "class_field": {
                "label": "Klassenfeld",
                "description": "Optionales kategoriales Feld im Klassenlayer; die Ergebnisse werden nach Zone x diesem Wert gruppiert. Auslassen, um alle Klassenobjekte als eine Klasse zu behandeln."
              },
              "sum_fields": {
                "label": "Summenfelder",
                "description": "Optionale durch Komma getrennte numerische Felder im Klassenlayer, die auf jede Zone aufgeteilt werden (flächengewichtet bei Polygonen, längengewichtet bei Linien, summiert bei Punkten)."
              },
              "zone_field": {
                "label": "Zonenfeld",
                "description": "Optionales Feld, das jede Zone in der Ausgabe identifiziert. Standard ist der Zonenobjektindex."
              }
            }
          },
          "thin_road_network": {
            "name": "Straßennetz ausdünnen",
            "description": "Generalisiert ein Straßennetz für die Darstellung in kleinen Maßstäben: Blendet kurze Straßen niedriger Hierarchie aus und bewahrt dabei die Konnektivität; jede Straße wird als sichtbar/ausgedünnt markiert (nicht destruktiv), wie ArcGIS Thin Road Network.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Straßenvektorlayer (Linien), Format wird automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "min_length": {
                "label": "Minimale Länge",
                "description": "Straßen kürzer als dieser Wert (KBS-Einheiten) sind Kandidaten zum Ausdünnen. Längere Straßen werden immer beibehalten."
              },
              "hierarchy_field": {
                "label": "Hierarchiefeld",
                "description": "Optionales numerisches Straßenklassenfeld; niedrigerer Wert = wichtiger (länger beibehalten). Kandidaten werden beginnend mit der höchsten Klassennummer ausgedünnt."
              },
              "visibility_field": {
                "label": "Sichtbarkeitsfeld",
                "description": "Name des Ausgabefelds für das Sichtbarkeitsflag (1 = beibehalten, 0 = ausgedünnt). Standard 'visible'."
              },
              "keep_only": {
                "label": "Nur behalten",
                "description": "Wenn wahr, werden nur die sichtbaren Straßen ausgegeben, statt alle zu markieren. Standard falsch (nicht-destruktiv)."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Distanz, innerhalb derer Straßenendpunkte als derselbe Knoten behandelt werden. Standard 1e-6."
              }
            }
          },
          "tile_grid_polygons": {
            "name": "Kachelgitterpolygone",
            "description": "Gibt Webkarten-Kachelgrenzen als Polygone für eine Zoomstufe (oder einen Bereich) und eine Ausdehnung aus, jeweils mit z/x/y und Quadkey (ArcGIS Map Server Cache Tiling Scheme To Polygons, Create Vector Tile Index, Generate Tile Cache Tiling Scheme). Die gebündelten Rechteck-/Hexagongitter-Werkzeuge erzeugen beliebige Gitter im Eingabe-KBS und können nicht mit dem WebMercator-Quadtree übereinstimmen, den die PMTiles- und raster_to_tiles-Werkzeuge verwenden.",
            "params": {
              "zoom": {
                "label": "Zoom",
                "description": "Zoomstufe. Mit 'max_zoom' verwenden, um eine Pyramide von Stufen auszugeben."
              },
              "max_zoom": {
                "label": "Maximaler Zoom",
                "description": "Optionale höchste Zoomstufe; wenn angegeben, wird jede Stufe von 'zoom' bis 'max_zoom' ausgegeben."
              },
              "extent": {
                "label": "Ausdehnung",
                "description": "Optionaler Raster- oder Vektorlayer, dessen Grenzen das Gitter zuschneiden. Ohne ihn die ganze Welt in dieser Zoomstufe (vorbehaltlich 'max_tiles')."
              },
              "bbox": {
                "label": "Begrenzungsrahmen",
                "description": "Optionale explizite Ausdehnung als 'min_lon,min_lat,max_lon,max_lat' in Grad. Hat Vorrang vor 'extent'."
              },
              "scheme": {
                "label": "Schema",
                "description": "'xyz' (Standard, Google/OSM, y zählt von Norden abwärts) oder 'tms' (y zählt von Süden aufwärts)."
              },
              "output_crs": {
                "label": "Ausgabe-KBS",
                "description": "'EPSG:3857' (Standard, quadratische Kacheln) oder 'EPSG:4326' (Lon/Lat-Vierecke)."
              },
              "max_tiles": {
                "label": "Maximale Kacheln",
                "description": "Harte Obergrenze der Kachelanzahl (Standard 1000000); eine Überschreitung ist ein Fehler, der die berechnete Anzahl nennt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Polygonlayer. Wenn ausgelassen, im Speicher gehalten."
              }
            }
          },
          "time_series_clustering": {
            "name": "Zeitreihen-Clustering",
            "description": "Gruppiert die Zellen eines H3-Raum-Zeit-Würfels nach der Ähnlichkeit ihrer Zeitreihen (Wert, z-normalisiertes Profil oder Korrelation) mit deterministischem k-Medoids, sodass Orte mit ähnlicher Entwicklung zusammengefasst werden, wie ArcGIS Time Series Clustering.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktlayer in EPSG:4326 (Lon/Lat) mit einem Zeitstempelfeld."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Zeitstempelfeld (numerisch oder ISO-8601-Datum/-Datum-Uhrzeit)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-H3-Polygonlayer mit cluster_id/is_medoid. Wenn ausgelassen, im Speicher gehalten."
              },
              "num_clusters": {
                "label": "Anzahl Cluster",
                "description": "Anzahl der Cluster k (Standard 4)."
              },
              "characteristic": {
                "label": "Merkmal",
                "description": "Zeitreihendistanz: 'value' (roh), 'profile' (z-normalisiert, Standard) oder 'correlation' (1 − r)."
              },
              "time_step": {
                "label": "Zeitschritt",
                "description": "Breite eines Zeitschritts: eine einfache Zahl (numerisches time_field) oder eine Dauer wie '1w', '7d', '12h'. Standard '1w'."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Optionales numerisches Feld, das pro Bin summiert wird. Standard: Anzahl der Punkte pro Bin."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "H3-Auflösung 0 (gröbste) bis 15 (feinste); Standard 7 (~5 km² Zellen)."
              },
              "seed": {
                "label": "Seed",
                "description": "Zufalls-Seed für eine reproduzierbare Medoid-Initialisierung (Standard 1)."
              }
            }
          },
          "time_series_cross_correlation": {
            "name": "Kreuzkorrelation von Zeitreihen",
            "description": "Zellenweise verzögerte Kreuzkorrelation zwischen zwei ausgerichteten Raum-Zeit-Rasterstapeln (wie ArcGIS Time Series Cross Correlation / Multidimensional Raster Correlation): Für jede Zelle optional Trend/Saisonalität entfernen, dann Reihe A gegen Reihe B über min_lag..=max_lag korrelieren und den besten Lag mit seiner Pearson-Korrelation melden, plus optional die Lag-0-Korrelation und einen Pseudo-p-Wert mit effektiver Stichprobengröße nach Pyper-Peterman. Das zweivariable, lag-bewusste Gegenstück zu den Einzelreihen-Würfelwerkzeugen generate_trend_raster / change_point_detection – nichts Gebündeltes setzt zwei Variablen über die Zeit in Beziehung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Stapel A: ein Multiband-Raster (ein Band je Zeitschritt) ODER eine durch Komma getrennte Liste koregistrierter Einzelband-Rasterpfade in zeitlicher Reihenfolge."
              },
              "secondary": {
                "label": "Sekundär",
                "description": "Stapel B: gleiche Form und Länge wie 'input' (Multiband-Raster oder durch Komma getrennte Liste von Einzelbandrastern)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster des besten Lags (ganzzahliger Lag, der |Korrelation| maximiert). Wenn ausgelassen, im Speicher gehalten."
              },
              "corr_output": {
                "label": "Korrelationsausgabe",
                "description": "Optionales Ausgaberaster der (vorzeichenbehafteten) Pearson-Korrelation beim besten Lag."
              },
              "corr0_output": {
                "label": "Korr0-Ausgabe",
                "description": "Optionales Ausgaberaster der Korrelation bei Lag 0 (gleichzeitig)."
              },
              "pvalue_output": {
                "label": "P-Wert-Ausgabe",
                "description": "Optionales Ausgaberaster eines pseudo-zweiseitigen p-Werts beim besten Lag (effektive Stichprobengröße nach Pyper-Peterman + Fisher-z)."
              },
              "min_lag": {
                "label": "Min. Verzögerung",
                "description": "Minimaler Lag in Zeitschritten (Standard -6). A[t] wird mit B[t+lag] gepaart."
              },
              "max_lag": {
                "label": "Maximaler Lag",
                "description": "Maximaler Lag in Zeitschritten (Standard 6). Muss >= min_lag sein."
              },
              "detrend": {
                "label": "Trend entfernen",
                "description": "Wenn wahr, wird vor der Korrelation je Reihe ein linearer OLS-Trend subtrahiert (Standard falsch)."
              },
              "deseasonalize": {
                "label": "Saisonalität entfernen",
                "description": "Wenn wahr, wird vor der Korrelation je Reihe ein additiver Saisonzyklus der Periode 'season_length' subtrahiert (Standard falsch)."
              },
              "season_length": {
                "label": "Saisonlänge",
                "description": "Saisonale Periode (Zeitschritte), die verwendet wird, wenn 'deseasonalize' wahr ist (Standard 12)."
              },
              "min_valid": {
                "label": "Minimale gültige",
                "description": "Minimale Anzahl gültiger überlappender Paare, die für die Korrelation bei einem Lag erforderlich ist (Standard 5)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das gelesen wird, wenn ein Stapel als durch Komma getrennte Einzelbandliste angegeben ist (Standard 1). Bei Multiband-Stapeln ignoriert."
              }
            }
          },
          "time_series_forecast": {
            "name": "Zeitreihenprognose",
            "description": "Standortweise Prognose auf einem H3-Raum-Zeit-Würfel (wie ArcGIS Exponential Smoothing / Curve Fit Forecast): Prognostiziert die Zeitreihe jeder Zelle mittels exponentieller Glättung nach Holt oder polynomialer Kurvenanpassung, wählt pro Zelle das Modell mit dem niedrigsten Hold-out-RMSE und liefert Prognosen für den nächsten/letzten Schritt sowie eine 90-%-Konfidenzhalbbreite. Die zeitliche Prognose, die das gebündelte räumliche trend_surface nicht leisten kann.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktlayer zeitgestempelter Ereignisse (Länge/Breite)."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Feld mit der Zeit jedes Punkts: eine Zahl oder ein ISO-8601-Zeitstempel."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-H3-Polygonlayer mit Prognoseattributen. Wenn ausgelassen, im Speicher gehalten."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Numerisches Feld, das pro Bin aggregiert wird (Standard: Punktanzahl)."
              },
              "steps": {
                "label": "Schritte",
                "description": "Anzahl der vorauszusagenden Zeitschritte (Standard 3)."
              },
              "model": {
                "label": "Modell",
                "description": "'auto' (niedrigster Hold-out-RMSE; Standard), 'exp_smoothing', 'linear' oder 'parabolic'."
              },
              "holdout": {
                "label": "Holdout",
                "description": "Zurückgehaltene Zeitschritte zur Validierung/Auswahl des Modells (Standard 3)."
              },
              "time_step": {
                "label": "Zeitschritt",
                "description": "Breite eines Zeitschritts in den Einheiten von time_field (Standard 1)."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "H3-Auflösung 0..15 (Standard 7)."
              }
            }
          },
          "time_series_smoothing": {
            "name": "Zeitreihenglättung",
            "description": "Glättet eine In-Sample-Zeitreihe pro Standort (wie ArcGIS Time Series Smoothing): Gruppiert Objekte nach id_field, ordnet jede Gruppe nach time_field und hängt einen geglätteten Wert über einen rückwärts-/zentriert-/vorwärtsgerichteten gleitenden Mittelwert oder einen lokal-linearen Durchlauf mit adaptiver Bandbreite (LOESS) an. Geometrie und alle ursprünglichen Attribute bleiben erhalten. Ergänzt time_series_forecast, das vorausprojiziert statt die beobachtete Reihe zu glätten.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Objektlayer mit Beobachtungen mit Zeitstempel."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Numerisches Feld, dessen Reihe geglättet wird."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Feld zur Ordnung jeder Reihe: eine Zahl oder ein ISO-8601-Zeitstempel."
              },
              "id_field": {
                "label": "ID-Feld",
                "description": "Feld zur Identifikation jedes Standorts/jeder Reihe. Wenn ausgelassen, bilden alle Objekte eine Reihe."
              },
              "method": {
                "label": "Methode",
                "description": "'moving_average' (Standard) oder 'local_linear' (LOESS mit adaptiver Bandbreite)."
              },
              "window": {
                "label": "Fenster",
                "description": "moving_average: Anzahl der Punkte im Mittelungsfenster (Standard 3)."
              },
              "bandwidth": {
                "label": "Bandbreite",
                "description": "local_linear: Anzahl der zeitlich nächsten Punkte je lokaler Anpassung (Standard 5)."
              },
              "alignment": {
                "label": "Ausrichtung",
                "description": "Fensterplatzierung bei moving_average: 'backward', 'centered' (Standard) oder 'forward'."
              },
              "output_field": {
                "label": "Ausgabefeld",
                "description": "Name des angehängten geglätteten Felds (Standard 'smoothed')."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Pfad des Ausgabelayers. Wenn ausgelassen, im Speicher gehalten."
              }
            }
          },
          "topo_to_raster": {
            "name": "Topo zu Raster",
            "description": "Interpoliert ein hydrologisch korrektes DEM aus Höhenlinien, Höhenpunkten und optionalen Gewässerlinien mittels Minimum-Krümmungs-Relaxation (Thin-Plate) mit Entwässerungserzwingung – wie ArcGIS Topo To Raster (ANUDEM). Anders als die gebündelten IDW-/TIN-/Spline-Interpolatoren terrassiert es Höhenlinien nicht und entfernt falsche geschlossene Senken.",
            "params": {
              "contours": {
                "label": "Höhenlinien",
                "description": "Eingabe-Höhenlinien-Vektorlayer (Höhe aus elevation_field gelesen). Mindestens eines von contours/points ist erforderlich."
              },
              "points": {
                "label": "Punkte",
                "description": "Eingabe-Punktvektorlayer der Höhenpunkte (Höhe aus elevation_field gelesen)."
              },
              "streams": {
                "label": "Gewässer",
                "description": "Optionaler Gewässerlinien-Vektorlayer für das Drainage Enforcement (vor der Senkenentfernung in die Oberfläche eingebrannt)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad des DEM-Rasters (Treiber aus der Erweiterung). Wenn ausgelassen, im Speicher gehalten."
              },
              "elevation_field": {
                "label": "Höhenfeld",
                "description": "Name des numerischen Höhenfelds im Höhenlinien- und Punktlayer. Standard: automatische Erkennung (HEIGHT/ELEV/ELEVATION/Z, sonst das erste numerische Feld)."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße in KBS-Einheiten. Standard: so bemessen, dass die längere Gitterachse ~400 Zellen hat."
              },
              "tension": {
                "label": "Spannung",
                "description": "Oberflächensteifigkeit in [0,1]: 0 = reine Thin-Plate (am glattesten), 1 = gespannte Membran. Standard 0.35."
              },
              "iterations": {
                "label": "Iterationen",
                "description": "Maximale SOR-Iterationen (Standard 2000). Die Iteration endet vorzeitig, sobald die maximale Zelländerung unter die Toleranz fällt."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Konvergenztoleranz: Abbruch, wenn die größte Zelländerung einer Iteration darunter liegt (Höheneinheiten des KBS). Standard 0.01."
              },
              "enforce_drainage": {
                "label": "Entwässerung erzwingen",
                "description": "Störende innere Senken nach der Interpolation entfernen, damit das DEM zu seinen Rändern entwässert (Standard wahr)."
              },
              "stream_burn": {
                "label": "Gewässer einbrennen",
                "description": "Tiefe (Höheneinheiten), um die Gewässerzellen vor der Senkenentfernung abgesenkt werden, um den Abfluss entlang zu leiten. Standard 0 (auto = 1 % des Reliefs, wenn Gewässer angegeben sind)."
              }
            }
          },
          "trace_proximity_events": {
            "name": "Näheereignisse verfolgen",
            "description": "Findet Intervalle, in denen sich zwei bewegte Tracks für mindestens eine Mindestdauer innerhalb einer Distanz zueinander befanden (Näherungsereignisse), und verfolgt optional transitive nachgelagerte Kontakte ausgehend von Startentitäten, wie ArcGIS Trace Proximity Events.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Punktlayer mit Zeitstempel (projiziertes KBS verwenden; Distanzen sind in Karteneinheiten)."
              },
              "track_field": {
                "label": "Track-Feld",
                "description": "Feld zur Identifikation jedes bewegten Objekts / jeder Spur."
              },
              "time_field": {
                "label": "Zeitfeld",
                "description": "Zeitstempelfeld (numerische Sekunden oder ISO-8601)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Linienlayer der Näherungsereignisse. Wenn ausgelassen, im Speicher gehalten."
              },
              "search_distance": {
                "label": "Suchdistanz",
                "description": "Maximaler Abstand, bei dem zwei Spuren als 'in Nähe' gelten (Karteneinheiten)."
              },
              "min_duration": {
                "label": "Min. Dauer",
                "description": "Mindestzeit in Nähe, um als Ereignis zu zählen: Sekunden oder eine Dauer wie '5m', '1h' (Standard 0)."
              },
              "entities": {
                "label": "Entitäten",
                "description": "Optionale durch Komma getrennte Start-Spur-IDs, von denen aus nachgelagerte Kontakte verfolgt werden (Kontaktverfolgung)."
              },
              "depth": {
                "label": "Tiefe",
                "description": "Maximale Verfolgungsgenerationen ab den Startpunkten (Standard unbegrenzt)."
              }
            }
          },
          "transform_features": {
            "name": "Objekte transformieren",
            "description": "Wendet eine affine Transformation (Verschiebung, Drehung um einen Ankerpunkt, achsenweise Skalierung, Spiegelung) auf jede Geometrie eines Vektor-Layers an.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Vektordatei, Format wird automatisch erkannt (oder In-Memory-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "dx": {
                "label": "Dx",
                "description": "Auf X nach Skalierung/Spiegelung/Drehung angewendete Verschiebung in KBS-Einheiten. Standard 0."
              },
              "dy": {
                "label": "Dy",
                "description": "Auf Y nach Skalierung/Spiegelung/Drehung angewendete Verschiebung in KBS-Einheiten. Standard 0."
              },
              "angle": {
                "label": "Winkel",
                "description": "Drehung gegen den Uhrzeigersinn um den Anker in Grad. Standard 0."
              },
              "scale_x": {
                "label": "Skalierung X",
                "description": "Skalierungsfaktor um den Anker entlang X. Standard 1."
              },
              "scale_y": {
                "label": "Skalierung Y",
                "description": "Skalierungsfaktor um den Anker entlang Y. Standard 1."
              },
              "mirror_axis": {
                "label": "Spiegelachse",
                "description": "Spiegelung durch den Anker: NONE (Standard), X (Y an der horizontalen Achse spiegeln) oder Y (X an der vertikalen Achse spiegeln)."
              },
              "anchor": {
                "label": "Anker",
                "description": "Drehpunkt für Skalierung/Spiegelung/Drehung: CENTROID (Mittelpunkt des Begrenzungsrahmens, Standard), ORIGIN (0,0) oder XY (anchor_x/anchor_y verwenden)."
              },
              "anchor_x": {
                "label": "Anker X",
                "description": "X-Koordinate des Ankers; erforderlich bei anchor=XY."
              },
              "anchor_y": {
                "label": "Anker Y",
                "description": "Y-Koordinate des Ankers; erforderlich bei anchor=XY."
              }
            }
          },
          "transform_fields": {
            "name": "Felder transformieren",
            "description": "Standardisiert, transformiert und kodiert Attributfelder (wie ArcGIS Standardize/Transform/Encode Field): z-Score, Min-Max, robust, log/log1p/sqrt/boxcox/invers, Klassierung nach gleichen Intervallen/Quantilen/Standardabweichung sowie One-Hot-Kodierung.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer (oder Tabelle) mit den zu transformierenden Feldern."
              },
              "fields": {
                "label": "Felder",
                "description": "Durch Komma getrennte Feldnamen zum Transformieren; dieselbe Transformation wird auf jedes angewendet."
              },
              "transform": {
                "label": "Transformation",
                "description": "Anzuwendende Transformation: zscore, minmax, robust, log, log1p, sqrt, boxcox, inverse, bin, onehot."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorlayer mit den hinzugefügten transformierten Feldern. Wenn ausgelassen, im Speicher gehalten."
              },
              "bins": {
                "label": "Klassen (Bins)",
                "description": "Anzahl der Klassen für 'bin' (Standard 5)."
              },
              "bin_method": {
                "label": "Klassenmethode",
                "description": "Klassifikationsmethode für 'bin': equal_interval (Standard), quantile oder std_dev."
              },
              "boxcox_lambda": {
                "label": "Box-Cox-Lambda",
                "description": "Festes Lambda für 'boxcox'; wenn ausgelassen, per Maximum-Likelihood angepasst (Goldener-Schnitt-Suche)."
              },
              "suffix": {
                "label": "Suffix",
                "description": "Suffix des Ausgabefeldnamens (Standard abhängig von der Transformation, z. B. '_z' für zscore)."
              },
              "drop_input": {
                "label": "Eingabe verwerfen",
                "description": "Wenn wahr, werden die Originalfelder nach der Transformation aus der Ausgabe entfernt (Standard falsch)."
              }
            }
          },
          "transform_route_events": {
            "name": "Routenereignisse transformieren",
            "description": "Referenziert Punktereignisse, die gegen ein Quell-Routensystem gemessen wurden, auf ein Ziel-Routensystem um: Ermittelt die XY-Position jedes Ereignisses aus Quellroute und Messwert und verlagert es dann innerhalb einer Cluster-Toleranz auf die nächstgelegene Zielroute, wobei Ziel-Routen-ID und Messwert ausgegeben werden – wie ArcGIS Transform Route Events.",
            "params": {
              "source_events": {
                "label": "Quellereignisse",
                "description": "Eingabe-Punktereignislayer. Jedes Objekt trägt eine Routenkennung (route_id_field) und einen Messwert (measure_field)."
              },
              "source_routes": {
                "label": "Quellrouten",
                "description": "Quell-Routensystem: Linienlayer, dessen Objekte über route_id_field verschlüsselt sind. Messwerte sind die Distanz ab dem ersten Stützpunkt jeder Route."
              },
              "target_routes": {
                "label": "Zielrouten",
                "description": "Ziel-Routensystem: Linienlayer, auf den die Ereignisse verlagert werden. Routenkennungen stammen aus target_id_field."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Punktvektors (Treiber aus der Erweiterung). Wenn ausgelassen, wird das Ergebnis im Speicher gehalten."
              },
              "route_id_field": {
                "label": "Routen-ID-Feld",
                "description": "Feld mit der Routenkennung in source_events und source_routes (Standard 'route_id'). Fehlendes Feld -> der Objektindex der Quellroute wird verwendet."
              },
              "measure_field": {
                "label": "Messwertfeld",
                "description": "Numerisches Feld in source_events mit dem Messwert des Quellsystems (Standard 'measure')."
              },
              "target_id_field": {
                "label": "Ziel-ID-Feld",
                "description": "Feld mit der Routenkennung in target_routes (Standard: wie route_id_field). Fehlendes Feld -> der Objektindex der Zielroute wird verwendet."
              },
              "cluster_tolerance": {
                "label": "Cluster-Toleranz",
                "description": "Maximale XY-Distanz (KBS-Einheiten) vom wiederhergestellten Ereignisort zu einer Zielroute, damit das Ereignis übertragen wird. 0 oder ausgelassen bedeutet keine Grenze (immer an die nächste Zielroute fangen)."
              }
            }
          },
          "transpose_fields": {
            "name": "Felder transponieren",
            "description": "Formt eine breite Attributtabelle ins Langformat um: Jede aufgeführte Wertespalte wird zu einer eigenen Zeile, gekennzeichnet mit der Spalte, aus der sie stammt (ArcGIS Transpose Fields). pivot_table arbeitet nur von lang nach breit, sodass Tabellen mit einer Spalte pro Periode nicht an die Zeitreihenwerkzeuge übergeben werden konnten, die eine Zeile pro Beobachtung benötigen.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Vektorlayer oder Tabelle."
              },
              "transpose_fields": {
                "label": "Felder transponieren",
                "description": "Durch Komma oder Semikolon getrennte Wertspalten zum Entpivotieren."
              },
              "value_field": {
                "label": "Wertfeld",
                "description": "Name der Ausgabespalte mit dem Zellwert (Standard 'VALUE')."
              },
              "transposed_field": {
                "label": "Transponiertes Feld",
                "description": "Name der Ausgabespalte mit dem Namen der Quellspalte (Standard 'FIELD')."
              },
              "field_labels": {
                "label": "Feldbeschriftungen",
                "description": "Optionale Beschriftungen, die statt der rohen Spaltennamen in 'transposed_field' geschrieben werden, z. B. '2000,2010,2020'. Muss dieselbe Länge wie 'transpose_fields' haben."
              },
              "retain_fields": {
                "label": "Felder beibehalten",
                "description": "In jede Ausgabezeile kopierte Attribute. Standard sind alle nicht transponierten Felder."
              },
              "drop_nulls": {
                "label": "Nullwerte verwerfen",
                "description": "Ausgabezeilen überspringen, deren Wert null ist (Standard falsch)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabelayer. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              }
            }
          },
          "trim_line": {
            "name": "Linie stutzen",
            "description": "Löscht kurze freihängende Liniensegmente (Überschüsse und Sporne), die kürzer als eine Längentoleranz sind, und behält echte Schnittpunkte und lange Linien bei.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Linienvektordatei, Format automatisch erkannt (oder Speicher-Handle)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabe-Vektorpfad (Treiber anhand der Erweiterung). Wenn nicht angegeben, wird im Speicher abgelegt."
              },
              "dangle_length": {
                "label": "Überhanglänge",
                "description": "Längentoleranz in KBS-Einheiten. Ein loses Segment, das kürzer ist, wird gekürzt; längere lose Enden bleiben erhalten. Muss positiv sein."
              },
              "keep_short": {
                "label": "Kurze behalten",
                "description": "Wenn wahr (Standard), bleiben kurze Segmente erhalten, die an beiden Enden unverbunden sind (isoliert); wenn falsch, werden auch sie gelöscht. Segmente, die an genau einem Ende lose sind, werden bei Kürze immer gekürzt."
              },
              "snap_tolerance": {
                "label": "Fangtoleranz",
                "description": "Endpunkte innerhalb dieses Abstands (KBS-Einheiten) werden als derselbe Knoten behandelt. Standard 1e-6."
              }
            }
          },
          "union_3d": {
            "name": "3D-Vereinigung",
            "description": "Berechnet das kombinierte Volumen überlappender geschlossener 3D-Körper ohne Doppelzählung ihrer Schnittmengen sowie paarweise Überlappungsvolumen (ArcGIS Union 3D). Keine der beiden Registries bietet ein 3D-Overlay, sodass das Summieren von buffer_3d-Kapseln oder minimum_bounding_volume-Hüllen heute jede Überlappung doppelt zählt; polygon_volume und surface_volume messen nur gegen eine Bezugsebene. Die Volumen der einzelnen Körper sind exakt (Summation vorzeichenbehafteter Tetraeder); die Vereinigung wird über die Voxelbelegung bei einer gemeldeten Auflösung geschätzt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Geschlossene 3D-Körperobjekte (Dreiecksnetz-MultiPolygone mit Z, wie sie buffer_3d und minimum_bounding_volume ausgeben)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad der Tabelle der Volumen je Gruppe. Wenn ausgelassen, im Speicher gehalten."
              },
              "group_field": {
                "label": "Gruppierungsfeld",
                "description": "Optionales Feld; Körper werden innerhalb jedes Gruppenwerts statt über den gesamten Layer vereinigt."
              },
              "output_overlap_table": {
                "label": "Überlappungstabelle ausgeben",
                "description": "Optionaler Pfad für die Überlappungsvolumen je Paar. Wenn ausgelassen, im Speicher gehalten (wird dennoch zurückgegeben)."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Voxel-Abtastungen je Achse zur Schätzung des Vereinigungsvolumens, 4 bis 512 (Standard 96). Höher ist genauer und langsamer."
              }
            }
          },
          "unwrap_phase": {
            "name": "Phase entfalten",
            "description": "Wandelt gewickelte interferometrische Phase in (-pi, pi] mittels gewichteter kleinster Quadrate, gelöst mit vorkonditioniertem konjugiertem Gradienten, in ein kontinuierliches absolutes Feld um, mit optionaler Kohärenzgewichtung und Maskierung (ArcGIS Unwrap Phase). Nichts in einer der beiden Registries entwickelt Phase ab – raster_calculator kann die globale Lösung nicht ausdrücken und die gebündelten Speckle-Filter glätten statt abzuwickeln –, sodass die Phasenausgabe von sar_coherence und flatten_interferogram derzeit keinen kontinuierlichen Endpunkt haben.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Raster der gewickelten Phase in Radiant oder ein zweibandiges I/Q-Interferogramm."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Raster der abgewickelten kontinuierlichen Phase. Wenn ausgelassen, im Speicher gehalten."
              },
              "method": {
                "label": "Methode",
                "description": "'least_squares_pcg' (Standard), entsprechend der von ArcGIS unterstützten Methode."
              },
              "coherence": {
                "label": "Kohärenz",
                "description": "Optionales koregistriertes Kohärenzraster als Lösungsgewichte je Kante, sodass Pixel mit geringer Kohärenz die Lösung weniger beeinflussen."
              },
              "coherence_threshold": {
                "label": "Kohärenzschwellenwert",
                "description": "Pixel ausmaskieren, deren Kohärenz darunter liegt (Standard 0.3). Ignoriert, wenn kein Kohärenzraster angegeben ist. Eine Maskierung, die die gültigen Pixel in unverbundene Komponenten teilt, lässt jede Komponente außer der des Referenzpixels mit einer eigenen beliebigen additiven Konstante zurück."
              },
              "max_iterations": {
                "label": "Maximale Iterationen",
                "description": "Obergrenze der PCG-Iterationen (Standard 500)."
              },
              "tolerance": {
                "label": "Toleranz",
                "description": "Relatives Residuum, bei dem die Lösung endet (Standard 1e-8)."
              },
              "reference_row": {
                "label": "Referenzzeile",
                "description": "Zeile des auf null fixierten Pixels, das die additive Konstante der Lösung festlegt. Standard: das erste gültige Pixel."
              },
              "reference_col": {
                "label": "Referenzspalte",
                "description": "Spalte des fixierten Pixels. Standard: das erste gültige Pixel."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band, das die Phase enthält. Bei einem einbandigen Phasenraster oder einem zweibandigen I/Q-Interferogramm (das dann automatisch erkannt wird) weglassen; angeben, um reelle Phase aus einem bestimmten Band eines Multiband-Stapels zu lesen. Ein Raster mit mehr als zwei Bändern ERFORDERT diesen Parameter, da drei oder mehr Bänder kein I/Q-Paar sind und Raten eine plausible, aber falsche Phase liefern würde."
              }
            }
          },
          "validate_flow_direction": {
            "name": "Fließrichtung validieren",
            "description": "Meldet die Zellen, die ein Fließrichtungsraster unbrauchbar machen – Codes, die keine D8-Richtungen sind, Innenzellen ohne Auslass, Abfluss in NoData, Abfluss über den Rand hinaus und Zellen auf einem kreisförmigen Fließweg – als Punkt-Layer der Probleme (ArcGIS Validate Flow Direction). Die gebündelte Hydrologie-Suite verwendet überall Fließrichtungsraster (d8_flow_accumulation, watershed, basins, trace_downslope_flowpaths), aber nichts validiert eines, sodass ein durch Resampling, Reklassifizierung oder Zuschneiden beschädigtes Raster ein plausibles falsches Ergebnis statt eines Fehlers liefert und eine Routing-Schleife hängen bleiben kann.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Zu prüfendes Fließrichtungsraster."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Punktlayer, ein Punkt je Problemzelle. Wenn ausgelassen, im Speicher gehalten."
              },
              "flow_direction_type": {
                "label": "Fließrichtungstyp",
                "description": "'d8' (Standard) für einzelne Zweierpotenz-Codes oder 'mfd', wobei ein Wert die Summe mehrerer Richtungen sein kann."
              },
              "report_edge_outflow": {
                "label": "Randabfluss melden",
                "description": "Zellen melden, deren Abfluss das Raster verlässt (Standard falsch). Normal an einer echten Grenze, ein echter Defekt in einem zugeschnittenen Inneren."
              },
              "check_circular": {
                "label": "Kreisprüfung",
                "description": "Kreisförmige Fließwege erkennen (Standard wahr)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes Band mit den Richtungen (Standard 1)."
              }
            }
          },
          "vector_convert": {
            "name": "Vektor konvertieren",
            "description": "Konvertiert einen Vektordatensatz in ein anderes Format (die Ausgabe-Dateierweiterung bestimmt den Treiber).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Vektordatei (Format automatisch erkannt) oder In-Memory-Handle."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad des Vektors; der Treiber wird aus der Erweiterung abgeleitet (.geojson, .fgb, .shp, .gpkg, .parquet, ...). Wenn ausgelassen, wird der Layer im Speicher gehalten."
              }
            }
          },
          "vector_to_h3": {
            "name": "Vektor zu H3-Zellen",
            "description": "Fasst einen Vektor-Layer in Zellen des diskreten globalen H3-Gitters zusammen und zählt die Objekte pro Zelle.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Vektordatei (muss geografisch Lon/Lat sein, EPSG:4326) oder In-Memory-Handle."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Vektorpfad; der Treiber wird aus der Erweiterung abgeleitet (.geojson, .fgb, .parquet, ...). Wenn nicht angegeben, wird der Layer im Speicher abgelegt."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "H3-Auflösung 0 (gröbste) bis 15 (feinste); Standard 8 (Zellen von ~0,7 km²)."
              }
            }
          },
          "vector_to_pmtiles": {
            "name": "Vektor zu PMTiles",
            "description": "Packt einen Vektor-Layer in ein einzelnes PMTiles-Archiv (Mapbox-Vector-Tile-Pyramide).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Vektordatei (GeoJSON, Shapefile, GeoPackage, FlatGeobuf, GeoParquet, ...)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der PMTiles-Datei (z. B. /work/roads.pmtiles)."
              },
              "min_zoom": {
                "label": "Minimaler Zoom",
                "description": "Minimale Zoomstufe (Standard 0)."
              },
              "max_zoom": {
                "label": "Maximaler Zoom",
                "description": "Maximale Zoomstufe (Standard 14, Maximum 18)."
              },
              "layer_name": {
                "label": "Layername",
                "description": "Name des Layers innerhalb der Kacheln, beim Stylen verwendet (Standard: Name des Eingabelayers)."
              },
              "simplify": {
                "label": "Vereinfachen",
                "description": "Geometrien je Zoomstufe vereinfachen (Standard wahr)."
              },
              "drop_rate": {
                "label": "Abbruchrate",
                "description": "Rate, mit der Objekte bei niedrigen Zoomstufen weggelassen werden, wie in tippecanoe (Standard: kein Weglassen)."
              }
            }
          },
          "voxel_isosurface": {
            "name": "Voxel-Isofläche",
            "description": "Extrahiert eine triangulierte Isofläche bei einem oder mehreren Schwellenwerten aus einem 3D-Voxelfeld mittels Marching Tetrahedra (ArcGIS Export Voxel Isosurface). Die gesamte Konturierungs-Suite in beiden Registries ist 2D – Linien aus einer Ebene; dies ist das volumetrische Gegenstück, das die Ausgabe von idw_3d oder eines multidimensionalen Rasters in renderbare Geometrie umwandelt. Gibt die von buffer_3d und minimum_bounding_volume verwendete Dreiecksnetz-Konvention aus, sodass die Ergebnisse direkt in inside_3d eingespeist werden können.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Voxelfeld als Multiband-Raster: Band k ist die Z-Schicht bei z_min + k * z_spacing."
              },
              "values": {
                "label": "Werte",
                "description": "Schwellenwert(e): eine Zahl, ein JSON-Array von Zahlen oder eine durch Komma getrennte Zeichenkette. Eine Oberfläche je Wert."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad für die Dreiecksnetzoberflächen. Wenn ausgelassen, im Speicher gehalten."
              },
              "z_min": {
                "label": "Z-Minimum",
                "description": "Z-Koordinate der ersten Schicht (Standard 0)."
              },
              "z_spacing": {
                "label": "Z-Abstand",
                "description": "Vertikaler Abstand zwischen den Schichten (Standard 1)."
              },
              "close_boundaries": {
                "label": "Grenzen schließen",
                "description": "Oberflächen dort verschließen, wo sie auf den Volumenrand treffen, sodass das Ergebnis einen geschlossenen Körper begrenzt (Standard wahr). Umgesetzt durch Marching einer zusätzlichen Schale unterhalb des Isowerts, sodass der Deckel mit der Oberfläche verschweißt ist; er liegt zwischen der Randebene und einer Zelle darüber hinaus. Dies versiegelt nur die ÄUSSEREN Flächen: Zellen, die inneres NoData berühren, werden übersprungen, sodass eine NoData-Tasche, die die extrahierte Oberfläche schneidet, weiterhin einen offenen Rand hinterlässt (eine vollständig innerhalb oder außerhalb der Kontur liegende trifft das Netz nie)."
              },
              "smooth": {
                "label": "Glätten",
                "description": "Auf das extrahierte Netz angewendete Laplace-Glättungsiterationen (Standard 0)."
              }
            }
          },
          "warp_raster": {
            "name": "Raster verzerren",
            "description": "Georeferenziert ein Raster anhand von Passpunkten (wie ArcGIS Warp): Passt ein Polynom 1./2./3. Ordnung aus Paaren Quellpixel → Weltkoordinate (GCP) an und resampelt in ein neues georeferenziertes Gitter (nächster Nachbar/bilinear), wobei Residuen pro GCP und der RMS-Fehler gemeldet werden. Die Raster-Hälfte der Konflation, deren Vektor-Hälfte rubbersheet_features bereits abdeckt.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingaberaster (sein Pixelgitter ist der Quellkoordinatenraum)."
              },
              "gcps": {
                "label": "Passpunkte",
                "description": "Passpunkte als 'col,row,x,y'-Quadrupel, getrennt durch ';' (>= 3 für Ordnung 1, 6 für Ordnung 2, 10 für Ordnung 3)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Georeferenziertes Ausgaberaster. Wenn ausgelassen, im Speicher gehalten."
              },
              "transform": {
                "label": "Transformation",
                "description": "Polynomordnung: 'poly1' (affin; Standard), 'poly2' oder 'poly3'."
              },
              "resampling": {
                "label": "Resampling",
                "description": "'nearest' (Standard) oder 'bilinear'."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße in Welteinheiten (Standard: Eingabebreite auf die Zielausdehnung abgebildet)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG-Code zur Kennzeichnung des Ausgabe-KBS (optional)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes zu entzerrendes Band (Standard 1)."
              }
            }
          },
          "weighted_voronoi": {
            "name": "Gewichtetes Voronoi",
            "description": "Gewichtetes Voronoi-Zuordnungsraster (Markt-/Dominanzgebiete): Weist jede Zelle dem Standort mit der kleinsten gewichteten Distanz zu – multiplikativ (d/w, Apollonius), additiv (d-w) oder Potenz (d²-w²) – wie ArcGIS Generate Weighted Voronoi. Die Variante mit ungleichen Standorten des gebündelten ungewichteten voronoi_diagram.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Eingabe-Punktlayer der Standorte."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabe-Zuordnungsraster (1-basierter Standortindex je Zelle). Wenn ausgelassen, im Speicher gehalten."
              },
              "weight_field": {
                "label": "Gewichtungsfeld",
                "description": "Numerisches Feld mit dem Gewicht/der Attraktivität jedes Standorts (Standard: alle Standorte Gewicht 1)."
              },
              "weight_type": {
                "label": "Gewichtungstyp",
                "description": "'multiplicative' (d/w; Standard), 'additive' (d-w) oder 'power' (d²-w²)."
              },
              "cell_size": {
                "label": "Zellengröße",
                "description": "Ausgabezellengröße in KBS-Einheiten (Standard: Ausdehnung / 400)."
              },
              "margin": {
                "label": "Rand",
                "description": "Anteil der Standortausdehnung, um den das Raster erweitert wird (Standard 0.1)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG zur Kennzeichnung der Ausgabe (Standard: aus dem Eingabelayer)."
              }
            }
          },
          "write_geoparquet": {
            "name": "GeoParquet schreiben",
            "description": "Konvertiert einen Vektordatensatz (GeoJSON, Shapefile, FlatGeobuf, GeoPackage, ...) nach GeoParquet, standardmäßig Hilbert-sortiert und ZSTD-komprimiert.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Vektordatei (Format automatisch erkannt) oder In-Memory-Handle."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der GeoParquet-Datei (z. B. /work/data.parquet)."
              },
              "compression": {
                "label": "Kompression",
                "description": "Spaltenkompression: zstd (Standard), snappy, gzip oder uncompressed."
              },
              "hilbert_sort": {
                "label": "Hilbert-Sortierung",
                "description": "Objekte entlang einer Hilbert-Kurve für räumliche Lokalität sortieren (Standard wahr)."
              }
            }
          },
          "write_pmtiles": {
            "name": "Raster zu PMTiles",
            "description": "Rendert ein Raster in ein einzelnes PMTiles-Archiv (Web-Mercator-PNG-Kachelpyramide).",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Pfad der Eingabe-Rasterdatei. Muss ein Quell-KBS (EPSG oder WKT) tragen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der PMTiles-Datei (z. B. /work/dem.pmtiles)."
              },
              "min_zoom": {
                "label": "Minimaler Zoom",
                "description": "Minimale Zoomstufe (Standard: eine einzelne native Zoomstufe passend zur Rasterauflösung)."
              },
              "max_zoom": {
                "label": "Maximaler Zoom",
                "description": "Maximale Zoomstufe (Standard: wie min_zoom)."
              },
              "band": {
                "label": "Band",
                "description": "1-basiertes zu renderndes Band (Standard 1)."
              },
              "colormap": {
                "label": "Farbkarte",
                "description": "Farbtabelle: viridis (Standard), magma, turbo, terrain oder grayscale."
              },
              "method": {
                "label": "Methode",
                "description": "Resampling-Methode: bilinear (Standard), nearest, cubic."
              },
              "min": {
                "label": "Minimum",
                "description": "Wert, der auf das untere Ende der Farbtabelle abgebildet wird (Standard: Bandminimum)."
              },
              "max": {
                "label": "Maximum",
                "description": "Wert, der auf das obere Ende der Farbtabelle abgebildet wird (Standard: Bandmaximum)."
              }
            }
          },
          "zonal_characterization": {
            "name": "Zonale Charakterisierung",
            "description": "Berechnet in einem Durchlauf Statistiken für mehrere Werteraster über ein Zonenraster, mit einer Statistik pro Raster und beliebigen Perzentilen, wie ArcGIS Zonal Characterization.",
            "params": {
              "zones": {
                "label": "Zonen",
                "description": "Zonenraster; jeder unterschiedliche Wert definiert eine Zone."
              },
              "rasters": {
                "label": "Raster",
                "description": "Durch Komma getrennte Einträge 'path:statistic[:name]', z. B. 'dem.tif:mean,ndvi.tif:median'. Werteraster verwenden Band 1. Statistiken: mean, sum, min, max, range, stddev, median, majority, minority, variety, count, percentile."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Optionaler Ausgabepfad der Statistiktabelle. Wenn ausgelassen, im Speicher gehalten."
              },
              "percentile": {
                "label": "Perzentil",
                "description": "Perzentil (0-100) für jedes Raster, dessen Statistik 'percentile' ist (Standard 50)."
              },
              "zone_band": {
                "label": "Zonenband",
                "description": "1-basiertes aus dem Zonenraster zu lesendes Band (Standard 1)."
              },
              "ignore_nodata": {
                "label": "NoData ignorieren",
                "description": "NoData-Zellen in den Werterastern überspringen (Standard wahr). Wenn falsch, macht jedes NoData in einer Zone die Statistik dieser Zone null."
              }
            }
          },
          "zonal_fill": {
            "name": "Zonale Füllung",
            "description": "Füllt jede Zone eines kategorialen Rasters mit dem Minimalwert eines Gewichtsrasters entlang der Zonengrenze (wie ArcGIS Zonal Fill) – ein Baustein für eingeschränkte Oberflächen, der in der gebündelten Suite fehlt (fill ist fließbasiert, zonal_statistics fasst nur zusammen).",
            "params": {
              "zones": {
                "label": "Zonen",
                "description": "Kategoriales Zonenraster (jeder unterschiedliche ganzzahlige Wert ist eine Zone)."
              },
              "weight": {
                "label": "Gewichtung",
                "description": "Koregistriertes Gewichtsraster, dessen Randminimum jede Zone füllt."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster. Wenn nicht angegeben, wird das Ergebnis im Speicher abgelegt."
              }
            }
          },
          "zonal_geometry": {
            "name": "Zonale Geometrie",
            "description": "Zonenweise geometrische Maße aus einem kategorialen Zonenraster (wie ArcGIS Zonal Geometry): Fläche, Umfang, Dicke, Schwerpunkt sowie Haupt-/Nebenachse und Orientierung der Standardabweichungsellipse – das Zonenform-Gegenstück, das die gebündelten wertbasierten zonal_statistics und zonal_histogram nicht bieten.",
            "params": {
              "zones": {
                "label": "Zonen",
                "description": "Kategoriales Zonenraster (jeder unterschiedliche ganzzahlige Wert ist eine Zone)."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgaberaster (Rastermodus) oder CSV-Pfad (as_table-Modus). Wenn ausgelassen, im Speicher gehalten / nur im Ergebnis zurückgegeben."
              },
              "measure": {
                "label": "Messwert",
                "description": "Maß im Rastermodus: 'area' (Standard), 'perimeter', 'thickness', 'centroid_x', 'centroid_y', 'major_axis', 'minor_axis' oder 'orientation'."
              },
              "as_table": {
                "label": "Als Tabelle",
                "description": "Wenn wahr, wird eine Zeile je Zone mit allen Maßen statt eines Rasters je Zelle ausgegeben (Standard falsch)."
              }
            }
          },
          "zonal_histogram": {
            "name": "Zonales Histogramm",
            "description": "Tabelliert die Verteilung der Zellen eines Werterasters innerhalb jeder Zone: Klassenanzahlen (kategorial) oder klassierte Häufigkeiten (kontinuierlich), als Kreuztabelle Zonen x Klassen.",
            "params": {
              "zones": {
                "label": "Zonen",
                "description": "Pfad der Zonenrasterdatei (ganzzahlige/kategoriale Zonen-IDs)."
              },
              "value": {
                "label": "Wert",
                "description": "Pfad der Werterasterdatei; muss das Gitter von 'zones' teilen."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der CSV: eine Zeile je Zone, eine Spalte je Klasse/Bin."
              },
              "mode": {
                "label": "Modus",
                "description": "'classes' (Standard) behandelt jeden gerundeten Wert als eigene Klasse, für ganzzahlige/kategoriale Werteraster. 'bins' teilt kontinuierliche Werte in gleich breite Klassen ein."
              },
              "bins": {
                "label": "Klassen (Bins)",
                "description": "Anzahl gleich breiter Klassen für den Modus 'bins'. Standard 10."
              },
              "percent": {
                "label": "Prozent",
                "description": "Den Prozentanteil jeder Klasse an den gültigen Zellen der Zone statt roher Zellenanzahlen ausgeben. Standard falsch."
              },
              "zone_band": {
                "label": "Zonenband",
                "description": "1-basiertes aus 'zones' zu lesendes Band. Standard 1."
              },
              "value_band": {
                "label": "Werteband",
                "description": "1-basiertes aus 'value' zu lesendes Band. Standard 1."
              },
              "long_output": {
                "label": "Langformat-Ausgabe",
                "description": "Optionaler CSV-Pfad für die Langformat-Variante (zone,class,count,percent)."
              }
            }
          },
          "extract_cog_subset": {
            "name": "COG-Teilmenge extrahieren",
            "description": "Extrahiert einen Begrenzungsrahmen-Ausschnitt aus einem lokalen oder per HTTP erreichbaren Cloud Optimized GeoTIFF.",
            "params": {
              "input": {
                "label": "Eingabe",
                "description": "Lokale COG-Datei. Entweder input oder url angeben."
              },
              "url": {
                "label": "URL",
                "description": "HTTP(S)-COG-URL. Entweder url oder input angeben; HTTP-Quellen verwenden Byte-Range-Anfragen."
              },
              "bbox": {
                "label": "Begrenzungsrahmen",
                "description": "Begrenzungsrahmen als minX,minY,maxX,maxY in bbox_crs."
              },
              "bbox_crs": {
                "label": "KBS des Begrenzungsrahmens",
                "description": "EPSG-Code der Begrenzungsrahmen-Koordinaten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der COG-Datei."
              },
              "level": {
                "label": "Ebene",
                "description": "Zu lesende COG-Übersichtsstufe; 0 ist volle Auflösung."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Zielpixelgröße der Ausgabe. Verwendet die Einheiten von output_crs, wenn output_crs gesetzt ist; andernfalls die Einheiten von bbox_crs. Wählt die nächstliegende COG-Übersicht, wenn level ausgelassen wird."
              },
              "output_crs": {
                "label": "Ausgabe-KBS",
                "description": "Optionaler EPSG-Code der Ausgabe. Wenn gesetzt, wird der Ausschnitt in dieses KBS umprojiziert. Für Quell-KBS, die nicht als EPSG-Metadaten geschrieben werden können, Standard bbox_crs."
              },
              "nodata": {
                "label": "NoData",
                "description": "Optionaler NoData-Wert der Ausgabe. Wird als Füllwert der Umprojektion verwendet und als NoData-Metadaten der Ausgabe geschrieben."
              }
            }
          },
          "extract_wms_subset": {
            "name": "WMS-Teilmenge extrahieren",
            "description": "Fordert einen Begrenzungsrahmen-Ausschnitt von einem WMS-GetMap-Endpunkt an und schreibt ihn als Deflate-COG.",
            "params": {
              "url": {
                "label": "URL",
                "description": "URL des WMS-Endpunkts."
              },
              "layers": {
                "label": "Layer",
                "description": "WMS-Layername(n), durch Komma getrennt."
              },
              "styles": {
                "label": "Stile",
                "description": "WMS-Stilname(n), durch Komma getrennt. Standard ist leer."
              },
              "bbox": {
                "label": "Begrenzungsrahmen",
                "description": "Begrenzungsrahmen als minX,minY,maxX,maxY in bbox_crs."
              },
              "bbox_crs": {
                "label": "KBS des Begrenzungsrahmens",
                "description": "EPSG-Code der Begrenzungsrahmen-Koordinaten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der COG-Datei."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Zielpixelgröße der Ausgabe in Einheiten von output_crs, wenn output_crs gesetzt ist; andernfalls Einheiten von bbox_crs."
              },
              "width": {
                "label": "Breite",
                "description": "Breite der Ausgabeanfrage in Pixeln. Wird verwendet, wenn resolution ausgelassen wird."
              },
              "height": {
                "label": "Höhe",
                "description": "Höhe der Ausgabeanfrage in Pixeln. Wird verwendet, wenn resolution ausgelassen wird."
              },
              "output_crs": {
                "label": "Ausgabe-KBS",
                "description": "Optionaler EPSG-Code für Ausgabe/Anfrage. Standard bbox_crs."
              },
              "format": {
                "label": "Format",
                "description": "WMS-Bildformat. Standard image/geotiff."
              },
              "version": {
                "label": "Version",
                "description": "WMS-Version. Standard 1.1.1."
              },
              "nodata": {
                "label": "NoData",
                "description": "Optionaler NoData-Wert der Ausgabe."
              }
            }
          },
          "extract_xyz_tile_subset": {
            "name": "XYZ-Kachel-Teilmenge extrahieren",
            "description": "Ruft XYZ-Rasterkacheln für einen Begrenzungsrahmen ab, mosaikiert sie und schreibt ein Deflate-RGB-COG.",
            "params": {
              "url": {
                "label": "URL",
                "description": "XYZ-Kachel-URL-Vorlage, z. B. https://.../{z}/{x}/{y}.png."
              },
              "zoom": {
                "label": "Zoom",
                "description": "XYZ-Zoomstufe."
              },
              "bbox": {
                "label": "Begrenzungsrahmen",
                "description": "Begrenzungsrahmen als minX,minY,maxX,maxY in bbox_crs."
              },
              "bbox_crs": {
                "label": "KBS des Begrenzungsrahmens",
                "description": "EPSG-Code der Begrenzungsrahmen-Koordinaten."
              },
              "output": {
                "label": "Ausgabe",
                "description": "Ausgabepfad der COG-Datei."
              },
              "resolution": {
                "label": "Auflösung",
                "description": "Zielpixelgröße der Ausgabe in Einheiten von output_crs. Standard ist die native Kachelauflösung."
              },
              "width": {
                "label": "Breite",
                "description": "Ausgabebreite in Pixeln. Wird verwendet, wenn resolution ausgelassen wird."
              },
              "height": {
                "label": "Höhe",
                "description": "Ausgabehöhe in Pixeln. Wird verwendet, wenn resolution ausgelassen wird."
              },
              "output_crs": {
                "label": "Ausgabe-KBS",
                "description": "Optionaler EPSG-Code der Ausgabe. Standard bbox_crs."
              },
              "tile_size": {
                "label": "Kachelgröße",
                "description": "Kachelgröße in Pixeln. Standard 256."
              },
              "subdomains": {
                "label": "Subdomains",
                "description": "Optionale Subdomain-Buchstaben für {s}, z. B. abc."
              },
              "nodata": {
                "label": "NoData",
                "description": "Optionaler NoData-Wert der Ausgabe für fehlende/transparente Pixel."
              }
            }
          }
        }
      },
      "whitebox": {
        "categories": {
          "conversion": "Konvertierung",
          "conversionGeometryTopology": "Konvertierung - Geometrie und Topologie",
          "conversionRasterVectorConversion": "Konvertierung - Raster-/Vektorkonvertierung",
          "conversionVectorTableIO": "Konvertierung - Vektor- und Tabellen-E/A",
          "hydrology": "Hydrologie",
          "hydrologyDepressionsStorage": "Hydrologie - Senken und Speicherung",
          "hydrologyFlowRouting": "Hydrologie - Abflussrouting",
          "hydrologyHydrologicIndices": "Hydrologie - Hydrologische Indizes",
          "hydrologyStreamsLongitudinalAnalysis": "Hydrologie - Gewässer - Längsschnittanalyse",
          "hydrologyStreamsNetworkExtraction": "Hydrologie - Gewässer - Netzwerkextraktion",
          "hydrologyStreamsOrderingMetrics": "Hydrologie - Gewässer - Ordnungskennzahlen",
          "hydrologyWatershedsBasins": "Hydrologie - Einzugsgebiete",
          "lidarAnalysisMetrics": "LiDAR - Analysekennzahlen",
          "lidarFilteringClassification": "LiDAR - Filterung und Klassifikation",
          "lidarIOManagement": "LiDAR - E/A und Verwaltung",
          "lidarInterpolationGridding": "LiDAR - Interpolation und Rasterung",
          "projectionAndGeoreferencing": "Projektion und Georeferenzierung",
          "raster": "Raster",
          "rasterDistanceCost": "Raster - Distanz und Kosten",
          "rasterLocalNeighborhood": "Raster - Lokale Nachbarschaft",
          "rasterOverlayMath": "Raster - Overlay-Rechenoperationen",
          "rasterReclassifyMask": "Raster - Reklassifizieren und Maskieren",
          "rasterSpatialStatistics": "Raster - Räumliche Statistik",
          "remoteSensingChangeDetection": "Fernerkundung - Veränderungserkennung",
          "remoteSensingClassification": "Fernerkundung - Klassifikation",
          "remoteSensingEdgeFeatureDetection": "Fernerkundung - Kanten- und Merkmalserkennung",
          "remoteSensingEnhancementContrast": "Fernerkundung - Verbesserung und Kontrast",
          "remoteSensingFilters": "Fernerkundung - Filter",
          "remoteSensingObia": "Fernerkundung - OBIA",
          "remoteSensingRadiometricCorrection": "Fernerkundung - Radiometrische Korrektur",
          "remoteSensingSar": "Fernerkundung - SAR",
          "remoteSensingSpectralAnalytics": "Fernerkundung - Spektralanalytik",
          "remoteSensingThermalEmissivity": "Fernerkundung - Thermik und Emissionsgrad",
          "terrain": "Gelände",
          "terrainDerivatives": "Gelände - Ableitungen",
          "terrainLandformIndices": "Gelände - Landformindizes",
          "terrainMultiscaleSignatures": "Gelände - Multiskalen-Signaturen",
          "terrainRoughnessTexture": "Gelände - Rauheit und Textur",
          "terrainVisibility": "Gelände - Sichtbarkeit",
          "terrainWorkflowProducts": "Gelände - Workflow-Produkte",
          "vector": "Vektor",
          "vectorAttributeAnalysis": "Vektor - Attributanalyse",
          "vectorGeometryProcessing": "Vektor - Geometrieverarbeitung",
          "vectorLinearReferencing": "Vektor - Lineare Referenzierung",
          "vectorNetworkAnalysis": "Vektor - Netzwerkanalyse",
          "vectorOnlineData": "Vektor - Online-Daten",
          "vectorOverlayAnalysis": "Vektor - Overlay-Analyse",
          "vectorSamplingGridding": "Vektor - Stichproben und Rasterung",
          "vectorShapeMetrics": "Vektor - Formkennzahlen",
          "vectorSpatialStatistics": "Vektor - Räumliche Statistik"
        },
        "menuTool": {
          "calculate_transit_service_frequency": "Bedienungshäufigkeit des Nahverkehrs berechnen",
          "excel_to_table": "Excel zu Tabelle",
          "extract_scanned_features": "Gescannte Objekte extrahieren",
          "features_to_gpx": "Objekte zu GPX",
          "features_to_gtfs": "Objekte zu GTFS",
          "gpx_to_features": "GPX zu Objekten",
          "gtfs_to_features": "GTFS zu Objekten",
          "h3_to_vector": "H3-Zellen zu Polygonen",
          "h3_polyfill": "H3-Polyfill",
          "kml_to_features": "KML zu Objekten",
          "pmtiles_extract": "PMTiles extrahieren",
          "raster_to_h3": "Raster zu H3-Zellen",
          "write_pmtiles": "Raster zu PMTiles",
          "raster_to_tiles": "Raster zu XYZ-Kacheln",
          "read_geoparquet": "GeoParquet lesen",
          "vector_convert": "Vektor konvertieren",
          "vector_to_h3": "Vektor zu H3-Zellen",
          "vector_to_pmtiles": "Vektor zu PMTiles",
          "write_geoparquet": "GeoParquet schreiben",
          "fix_dangling_arcs": "Hängende Bögen korrigieren",
          "lines_to_polygons": "Linien zu Polygonen",
          "multipart_to_singlepart": "Mehrteilig zu einteilig",
          "polygons_to_lines": "Polygone zu Linien",
          "remove_polygon_holes": "Polygonlöcher entfernen",
          "singlepart_to_multipart": "Einteilig zu mehrteilig",
          "topology_rule_autofix": "Topologieregeln automatisch korrigieren",
          "topology_rule_validate": "Topologieregeln validieren",
          "topology_validation_report": "Bericht zur Topologievalidierung",
          "convert_nodata_to_zero": "NoData in Null umwandeln",
          "modify_nodata_value": "NoData-Wert ändern",
          "new_raster_from_base_raster": "Neues Raster aus Basisraster",
          "new_raster_from_base_vector": "Neues Raster aus Basisvektor",
          "raster_to_vector_lines": "Raster zu Vektorlinien",
          "raster_to_vector_points": "Raster zu Vektorpunkten",
          "raster_to_vector_polygons": "Raster zu Vektorpolygonen",
          "remove_raster_polygon_holes": "Löcher in Rasterpolygonen entfernen",
          "set_nodata_value": "NoData-Wert festlegen",
          "vector_lines_to_raster": "Vektorlinien zu Raster",
          "vector_points_to_raster": "Vektorpunkte zu Raster",
          "vector_polygons_to_raster": "Vektorpolygone zu Raster",
          "add_point_coordinates_to_table": "Punktkoordinaten zur Tabelle hinzufügen",
          "clean_vector": "Vektordaten bereinigen",
          "csv_points_to_vector": "CSV-Punkte zu Vektor",
          "export_table_to_csv": "Tabelle als CSV exportieren",
          "join_tables": "Tabellen verknüpfen",
          "merge_table_with_csv": "Tabelle mit CSV zusammenführen",
          "merge_vectors": "Vektordaten zusammenführen",
          "reinitialize_attribute_table": "Attributtabelle zurücksetzen",
          "vector_summary_statistics": "Zusammenfassende Vektorstatistik",
          "delineate_depressions": "Senken abgrenzen",
          "delineate_mounts": "Kuppen abgrenzen",
          "enforce_river_monotonicity": "Flussmonotonie erzwingen",
          "extract_sinks": "Senken extrahieren",
          "fill_spill_merge": "Fill-Spill-Merge",
          "topo_to_raster": "Topo zu Raster",
          "breach_depressions_least_cost": "Senken kostenminimal durchbrechen",
          "breach_single_cell_pits": "Einzelzellen-Senken durchbrechen",
          "burn_streams": "Gewässer einbrennen",
          "burn_streams_at_roads": "Gewässer an Straßen einbrennen",
          "depth_in_sink": "Tiefe in der Senke",
          "fill_burn": "Füllen und einbrennen",
          "fill_depressions": "Senken füllen",
          "fill_depressions_planchon_and_darboux": "Senken füllen (Planchon und Darboux)",
          "fill_depressions_wang_and_liu": "Senken füllen (Wang und Liu)",
          "fill_pits": "Löcher füllen",
          "flatten_lakes": "Seen einebnen",
          "impoundment_size_index": "Stauraumgrößenindex",
          "insert_dams": "Dämme einfügen",
          "raise_walls": "Wände anheben",
          "sink": "Senke",
          "stochastic_depression_analysis": "Stochastische Senkenanalyse",
          "topological_breach_burn": "Topologisches Durchbrechen und Einbrennen",
          "upslope_depression_storage": "Speicher in oberliegenden Senken",
          "average_flowpath_slope": "Mittleres Gefälle des Fließwegs",
          "average_upslope_flowpath_length": "Mittlere Länge des oberliegenden Fließwegs",
          "d8_flow_accum": "D8-Abflussakkumulation",
          "d8_mass_flux": "D8-Massenfluss",
          "d8_pointer": "D8-Zeiger",
          "dinf_flow_accum": "D-Infinity-Abflussakkumulation",
          "dinf_mass_flux": "D-Infinity-Massenfluss",
          "dinf_pointer": "D-Infinity-Zeiger",
          "downslope_flowpath_length": "Länge des unterliegenden Fließwegs",
          "fd8_flow_accum": "FD8-Abflussakkumulation",
          "fd8_pointer": "FD8-Zeiger",
          "flow_accum_full_workflow": "Vollständiger Workflow zur Abflussakkumulation",
          "flow_length_diff": "Differenz der Fließlänge",
          "max_upslope_flowpath_length": "Maximale Länge des oberliegenden Fließwegs",
          "max_upslope_value": "Maximaler oberliegender Wert",
          "mdinf_flow_accum": "MD-Infinity-Abflussakkumulation",
          "minimal_dispersion_flow_algorithm": "Fließalgorithmus minimaler Dispersion",
          "num_inflowing_neighbours": "Anzahl einströmender Nachbarn",
          "qin_flow_accumulation": "Qin-Abflussakkumulation",
          "quinn_flow_accumulation": "Quinn-Abflussakkumulation",
          "rho8_flow_accum": "Rho8-Abflussakkumulation",
          "rho8_pointer": "Rho8-Zeiger",
          "trace_downslope_flowpaths": "Unterliegende Fließwege verfolgen",
          "depth_to_water": "Tiefe bis zum Wasser",
          "distance_to_outlet": "Distanz zum Auslass",
          "downslope_distance_to_stream": "Unterliegende Distanz zum Gewässer",
          "downslope_index": "Downslope-Index",
          "edge_contamination": "Randkontamination",
          "elev_relative_to_watershed_min_max": "Höhe relativ zu Min/Max des Einzugsgebiets",
          "elevation_above_stream": "Höhe über dem Gewässer",
          "elevation_above_stream_euclidean": "Höhe über dem Gewässer (euklidisch)",
          "find_noflow_cells": "Zellen ohne Abfluss finden",
          "find_parallel_flow": "Parallelen Abfluss finden",
          "hydrologic_connectivity": "Hydrologische Konnektivität",
          "relative_stream_power_index": "Index der relativen Fließkraft",
          "sediment_transport_index": "Sedimenttransportindex",
          "wetness_index": "Feuchteindex",
          "farthest_channel_head": "Entferntester Gerinneursprung",
          "find_main_stem": "Hauptgerinne finden",
          "length_of_upstream_channels": "Länge der oberliegenden Gerinne",
          "long_profile": "Längsprofil",
          "long_profile_from_points": "Längsprofil aus Punkten",
          "extract_streams": "Gewässer extrahieren",
          "extract_valleys": "Täler extrahieren",
          "prune_vector_streams": "Vektorgewässer beschneiden",
          "raster_streams_to_vector": "Rastergewässer zu Vektor",
          "rasterize_streams": "Gewässer rastern",
          "remove_short_streams": "Kurze Gewässerabschnitte entfernen",
          "repair_stream_vector_topology": "Vektortopologie der Gewässer reparieren",
          "river_centerlines": "Flussmittellinien",
          "hack_stream_order": "Hack-Gewässerordnung",
          "horton_ratios": "Horton-Verhältnisse",
          "horton_stream_order": "Horton-Gewässerordnung",
          "shreve_stream_magnitude": "Shreve-Gewässermagnitude",
          "strahler_order_basins": "Einzugsgebiete nach Strahler-Ordnung",
          "strahler_stream_order": "Strahler-Gewässerordnung",
          "stream_link_class": "Klasse des Gewässerabschnitts",
          "stream_link_identifier": "Kennung des Gewässerabschnitts",
          "stream_link_length": "Länge des Gewässerabschnitts",
          "stream_link_slope": "Gefälle des Gewässerabschnitts",
          "stream_slope_continuous": "Kontinuierliches Gewässergefälle",
          "topological_stream_order": "Topologische Gewässerordnung",
          "tributary_identifier": "Nebenflusskennung",
          "vector_stream_network_analysis": "Analyse des vektoriellen Gewässernetzes",
          "basins": "Einzugsgebiete",
          "flood_order": "Überflutungsordnung",
          "hillslopes": "Hänge",
          "isobasins": "Isobasins",
          "jenson_snap_pour_points": "Auslasspunkte fangen (Jenson)",
          "longest_flowpath": "Längster Fließweg",
          "max_branch_length": "Maximale Astlänge",
          "snap_pour_points": "Auslasspunkte fangen",
          "subbasins": "Teileinzugsgebiete",
          "unnest_basins": "Einzugsgebiete entschachteln",
          "watershed": "Einzugsgebiet",
          "watershed_from_raster_pour_points": "Einzugsgebiet aus Raster-Auslasspunkten",
          "assign_projection_lidar": "Projektion für LiDAR zuweisen",
          "colourize_based_on_class": "Nach Klasse einfärben",
          "colourize_based_on_point_returns": "Nach Punktrückstreuungen einfärben",
          "find_flightline_edge_points": "Randpunkte der Fluglinie finden",
          "individual_tree_detection": "Einzelbaumerkennung",
          "lidar_eigenvalue_features": "LiDAR-Eigenwertmerkmale",
          "lidar_histogram": "LiDAR-Histogramm",
          "lidar_info": "LiDAR-Info",
          "lidar_kappa": "LiDAR-Kappa",
          "lidar_point_density": "LiDAR-Punktdichte",
          "lidar_point_return_analysis": "LiDAR-Analyse der Punktrückstreuungen",
          "lidar_point_stats": "LiDAR-Punktstatistik",
          "lidar_ransac_planes": "LiDAR-RANSAC-Ebenen",
          "lidar_rooftop_analysis": "LiDAR-Dachanalyse",
          "normal_vectors": "Normalenvektoren",
          "classify_buildings_in_lidar": "Gebäude im LiDAR klassifizieren",
          "classify_lidar": "LiDAR klassifizieren",
          "classify_overlap_points": "Überlappungspunkte klassifizieren",
          "clip_lidar_to_polygon": "LiDAR auf Polygon zuschneiden",
          "erase_polygon_from_lidar": "Polygon aus LiDAR löschen",
          "filter_lidar": "LiDAR filtern",
          "filter_lidar_by_percentile": "LiDAR nach Perzentil filtern",
          "filter_lidar_by_reference_surface": "LiDAR nach Referenzfläche filtern",
          "filter_lidar_classes": "LiDAR-Klassen filtern",
          "filter_lidar_noise": "LiDAR-Rauschen filtern",
          "filter_lidar_scan_angles": "LiDAR-Scanwinkel filtern",
          "height_above_ground": "Höhe über Grund",
          "improved_ground_point_filter": "Verbesserter Bodenpunktfilter",
          "individual_tree_segmentation": "Einzelbaumsegmentierung",
          "lidar_classify_subset": "LiDAR-Teilmenge klassifizieren",
          "lidar_elevation_slice": "LiDAR-Höhenschnitt",
          "lidar_remove_outliers": "LiDAR-Ausreißer entfernen",
          "lidar_segmentation": "LiDAR-Segmentierung",
          "lidar_segmentation_based_filter": "Segmentierungsbasierter LiDAR-Filter",
          "modify_lidar": "LiDAR ändern",
          "normalize_lidar": "LiDAR normalisieren",
          "remove_duplicates": "Duplikate entfernen",
          "ascii_to_las": "ASCII zu LAS",
          "las_to_ascii": "LAS zu ASCII",
          "las_to_shapefile": "LAS zu Shapefile",
          "lidar_colourize": "LiDAR einfärben",
          "lidar_join": "LiDAR zusammenführen",
          "lidar_shift": "LiDAR verschieben",
          "lidar_tile": "LiDAR kacheln",
          "lidar_tophat_transform": "LiDAR-Top-Hat-Transformation",
          "recover_flightline_info": "Fluglinieninformationen wiederherstellen",
          "select_tiles_by_polygon": "Kacheln nach Polygon auswählen",
          "sort_lidar": "LiDAR sortieren",
          "split_lidar": "LiDAR aufteilen",
          "flightline_overlap": "Fluglinienüberlappung",
          "lidar_block_maximum": "LiDAR-Blockmaximum",
          "lidar_block_minimum": "LiDAR-Blockminimum",
          "lidar_construct_vector_tin": "LiDAR-Vektor-TIN aufbauen",
          "lidar_contour": "LiDAR-Höhenlinien",
          "lidar_digital_surface_model": "LiDAR-Oberflächenmodell",
          "lidar_hex_bin": "LiDAR-Hexagon-Binning",
          "lidar_hillshade": "LiDAR-Schummerung",
          "lidar_idw_interpolation": "LiDAR-IDW-Interpolation",
          "lidar_nearest_neighbour_gridding": "LiDAR-Rasterung nach nächstem Nachbarn",
          "lidar_radial_basis_function_interpolation": "LiDAR-Interpolation mit radialen Basisfunktionen",
          "lidar_sibson_interpolation": "LiDAR-Sibson-Interpolation",
          "lidar_thin": "LiDAR ausdünnen",
          "lidar_thin_high_density": "Hochdichtes LiDAR ausdünnen",
          "lidar_tile_footprint": "LiDAR-Kachelumriss",
          "lidar_tin_gridding": "LiDAR-TIN-Rasterung",
          "build_network_topology": "Netzwerktopologie aufbauen",
          "closest_facility_network": "Nächstgelegene Einrichtung im Netzwerk",
          "generate_network_nodes": "Netzwerkknoten erzeugen",
          "k_shortest_paths_network": "K kürzeste Wege im Netzwerk",
          "location_allocation_network": "Standort-Zuordnung im Netzwerk",
          "map_matching_v1": "Map Matching v1",
          "multimodal_od_cost_matrix": "Multimodale OD-Kostenmatrix",
          "multimodal_routes_from_od": "Multimodale Routen aus OD",
          "multimodal_shortest_path": "Multimodaler kürzester Weg",
          "network_accessibility_metrics": "Erreichbarkeitskennzahlen des Netzwerks",
          "network_centrality_metrics": "Zentralitätskennzahlen des Netzwerks",
          "network_connected_components": "Zusammenhangskomponenten des Netzwerks",
          "network_node_degree": "Knotengrad im Netzwerk",
          "network_od_cost_matrix": "OD-Kostenmatrix des Netzwerks",
          "network_routes_from_od": "Netzwerkrouten aus OD",
          "network_service_area": "Einzugsbereich im Netzwerk",
          "network_topology_audit": "Prüfung der Netzwerktopologie",
          "od_sensitivity_analysis": "OD-Sensitivitätsanalyse",
          "shortest_path_network": "Kürzester Weg im Netzwerk",
          "snap_points_to_network": "Punkte auf das Netzwerk fangen",
          "split_lines_at_intersections": "Linien an Kreuzungen teilen",
          "transfer_attributes": "Attribute übertragen",
          "travelling_salesman_problem": "Problem des Handlungsreisenden",
          "vehicle_routing_cvrp": "Tourenplanung CVRP",
          "vehicle_routing_pickup_delivery": "Tourenplanung mit Abholung und Zustellung",
          "vehicle_routing_vrptw": "Tourenplanung VRPTW",
          "georeference_raster_from_control_points": "Raster über Passpunkte georeferenzieren",
          "orthorectification": "Orthorektifizierung",
          "reproject_lidar": "LiDAR umprojizieren",
          "reproject_vector": "Vektor umprojizieren",
          "aggregate_multidimensional_raster": "Multidimensionales Raster aggregieren",
          "analyze_changes_ccdc": "Änderungen mit CCDC analysieren",
          "apply_radiometric_calibration": "Radiometrische Kalibrierung anwenden",
          "assign_projection_raster": "Projektion für Raster zuweisen",
          "band_collection_statistics": "Statistik der Bandsammlung",
          "block_statistics": "Blockstatistik",
          "boundary_clean": "Grenzbereinigung",
          "cell_position_statistics": "Statistik der Zellenposition",
          "cell_statistics": "Zellenstatistik",
          "classification_accuracy_assessment": "Bewertung der Klassifikationsgenauigkeit",
          "combine": "Kombinieren",
          "composite_bands": "Bänder kombinieren",
          "compute_sar_indices": "SAR-Indizes berechnen",
          "contour_with_barriers": "Höhenlinien mit Barrieren",
          "convert_sar_units": "SAR-Einheiten umwandeln",
          "coregister_rasters": "Raster koregistrieren",
          "corridor": "Korridor",
          "cost_back_link": "Kosten-Rückverweis",
          "cut_fill": "Auftrag und Abtrag",
          "darcy_flow": "Darcy-Strömung",
          "dem_filter": "DGM-Filter",
          "detect_image_anomalies": "Bildanomalien erkennen",
          "diffusion_interpolation_with_barriers": "Diffusionsinterpolation mit Barrieren",
          "dimensional_moving_statistics": "Dimensionale gleitende Statistik",
          "empirical_bayesian_kriging": "Empirisches Bayes-Kriging",
          "euclidean_direction": "Euklidische Richtung",
          "expand_shrink": "Erweitern / verkleinern",
          "extract_cog_subset": "COG-Teilmenge extrahieren",
          "extract_ocean_winds": "Ozeanwinde extrahieren",
          "extract_spectra_from_image": "Spektren aus dem Bild extrahieren",
          "extract_wms_subset": "WMS-Teilmenge extrahieren",
          "extract_xyz_tile_subset": "XYZ-Kachel-Teilmenge extrahieren",
          "find_argument_statistics": "Argumentstatistik finden",
          "flatten_interferogram": "Interferogramm einebnen",
          "focal_flow": "Fokaler Fluss",
          "focal_statistics": "Fokale Statistik",
          "frequency_comparison": "Häufigkeitsvergleich",
          "fuzzy_overlay": "Fuzzy-Overlay",
          "gaussian_geostatistical_simulations": "Gaußsche geostatistische Simulationen",
          "multidimensional_anomaly": "Multidimensionale Anomalie erzeugen",
          "generate_trend_raster": "Trendraster erzeugen",
          "goldstein_phase_filter": "Goldstein-Phasenfilter",
          "idw_3d": "IDW 3D",
          "interpolate_from_spatiotemporal_points": "Aus raumzeitlichen Punkten interpolieren",
          "interpolate_with_barriers": "Mit Barrieren interpolieren",
          "kernel_density_ratio": "Kerndichteverhältnis",
          "kernel_interpolation_with_barriers": "Kerninterpolation mit Barrieren",
          "landtrendr": "LandTrendr",
          "las_height_metrics": "LAS-Höhenkennzahlen",
          "line_density": "Liniendichte",
          "line_statistics": "Linienstatistik",
          "local_polynomial_interpolation": "Lokale Polynominterpolation",
          "locate_regions": "Regionen lokalisieren",
          "matched_filter_target_detection": "Zielerkennung mit angepasstem Filter (CEM/ACE)",
          "maximum_likelihood_classification": "Maximum-Likelihood-Klassifikation",
          "merge_multidimensional_rasters": "Multidimensionale Raster zusammenführen",
          "multicriteria_overlay": "Multikriterien-Overlay",
          "multidimensional_principal_components": "Multidimensionale Hauptkomponenten",
          "multidimensional_raster_correlation": "Korrelation multidimensionaler Raster",
          "multilook": "Multilook",
          "multitemporal_coherence": "Multitemporale Kohärenz",
          "observer_points": "Beobachterpunkte",
          "optimal_interpolation": "Optimale Interpolation",
          "path_distance": "Pfaddistanz",
          "percentile_contours": "Perzentil-Höhenlinien",
          "point_statistics": "Punktstatistik",
          "porous_puff": "Poröse Fahne",
          "predict_using_trend_raster": "Mit Trendraster vorhersagen",
          "presence_only_prediction": "Vorhersage nur aus Präsenzdaten",
          "pycnophylactic_interpolation": "Pyknophylaktische Interpolation",
          "radiometric_terrain_flattening": "Radiometrische Geländeeinebnung",
          "raster_normalize": "Raster normalisieren",
          "regression_kriging": "Regressionskriging",
          "remove_thermal_noise": "Thermisches Rauschen entfernen",
          "render_raster_png": "Raster als PNG rendern",
          "reproject_raster": "Raster umprojizieren",
          "rescale_by_function": "Nach Funktion neu skalieren",
          "sar_coherence": "SAR-Kohärenz",
          "slice_raster": "Raster in Klassen schneiden",
          "solar_radiation": "Sonneneinstrahlung",
          "space_time_kernel_density": "Raum-Zeit-Kerndichte",
          "spatial_association_between_zones": "Räumliche Assoziation zwischen Zonen",
          "spectral_index": "Spektralindex",
          "split_raster": "Raster teilen",
          "storage_capacity": "Speicherkapazität",
          "subset_multidimensional_raster": "Teilmenge eines multidimensionalen Rasters",
          "summarize_categorical_raster": "Kategoriales Raster zusammenfassen",
          "surface_parameters": "Oberflächenparameter",
          "surface_volume": "Oberflächenvolumen",
          "time_series_cross_correlation": "Kreuzkorrelation von Zeitreihen",
          "unwrap_phase": "Phase entfalten",
          "warp_raster": "Raster verzerren",
          "weighted_voronoi": "Gewichtetes Voronoi",
          "zonal_characterization": "Zonale Charakterisierung",
          "zonal_fill": "Zonale Füllung",
          "zonal_geometry": "Zonale Geometrie",
          "zonal_histogram": "Zonales Histogramm",
          "abs": "Betrag",
          "aggregate_raster": "Raster aggregieren",
          "anova": "ANOVA",
          "arccos": "Arkuskosinus",
          "arcosh": "Areakosinus hyperbolicus",
          "arcsin": "Arkussinus",
          "arctan": "Arkustangens",
          "arsinh": "Areasinus hyperbolicus",
          "artanh": "Areatangens hyperbolicus",
          "atan2": "Atan2",
          "block_maximum": "Blockmaximum",
          "block_minimum": "Blockminimum",
          "boundary_shape_complexity": "Formkomplexität der Grenze",
          "ceil": "Aufrunden",
          "centroid_raster": "Rasterschwerpunkt",
          "clip_raster_to_polygon": "Raster auf Polygon zuschneiden",
          "clump": "Verklumpen",
          "cos": "Kosinus",
          "cosh": "Kosinus hyperbolicus",
          "create_plane": "Ebene erstellen",
          "crispness_index": "Schärfeindex",
          "cross_tabulation": "Kreuztabellierung",
          "cumulative_distribution": "Kumulative Verteilung",
          "dbscan": "DBSCAN",
          "decrement": "Dekrement",
          "edge_proportion": "Randanteil",
          "equal_to": "Gleich",
          "erase_polygon_from_raster": "Polygon aus Raster löschen",
          "exp": "Exponentialfunktion",
          "exp2": "Exponentialfunktion zur Basis 2",
          "fft_random_field": "FFT-Zufallsfeld",
          "filter_raster_features_by_area": "Rasterobjekte nach Fläche filtern",
          "find_patch_edge_cells": "Randzellen der Fläche finden",
          "floor": "Abrunden",
          "greater_than": "Größer als",
          "greater_than_or_equal_to": "GrößerOderGleich",
          "heat_map": "Heatmap",
          "idw_interpolation": "IDW-Interpolation",
          "image_autocorrelation": "Bildautokorrelation",
          "image_correlation": "Bildkorrelation",
          "image_regression": "Bildregression",
          "increment": "Inkrement",
          "inplace_add": "Addition an Ort und Stelle",
          "inplace_divide": "Division an Ort und Stelle",
          "inplace_multiply": "Multiplikation an Ort und Stelle",
          "inplace_subtract": "Subtraktion an Ort und Stelle",
          "integer_division": "Ganzzahldivision",
          "inverse_pca": "Inverse PCA",
          "is_nodata": "Ist NoData",
          "kappa_index": "Kappa-Index",
          "ks_normality_test": "KS-Normalitätstest",
          "less_than": "Kleiner als",
          "less_than_or_equal_to": "KleinerOderGleich",
          "list_unique_values_raster": "Eindeutige Werte auflisten (Raster)",
          "ln": "Natürlicher Logarithmus",
          "log10": "Logarithmus zur Basis 10",
          "log2": "Logarithmus zur Basis 2",
          "map_features": "Objekte abbilden",
          "max": "Maximum",
          "min": "Minimum",
          "modified_shepard_interpolation": "Modifizierte Shepard-Interpolation",
          "narrowness_index": "Schmalheitsindex",
          "negate": "Negieren",
          "nibble": "Nibble",
          "not_equal_to": "Ungleich",
          "ordinary_cokriging": "Ordinary-CoKriging-Interpolation",
          "paired_sample_t_test": "t-Test für verbundene Stichproben",
          "phi_coefficient": "Phi-Koeffizient",
          "principal_component_analysis": "Hauptkomponentenanalyse",
          "print_geotiff_tags": "GeoTIFF-Tags ausgeben",
          "quantiles": "Quantile",
          "radial_basis_function_interpolation": "Interpolation mit radialen Basisfunktionen",
          "radius_of_gyration": "Trägheitsradius",
          "random_field": "Zufallsfeld",
          "random_forest_classification_fit": "Random-Forest-Klassifikation anpassen",
          "random_forest_classification_predict": "Random-Forest-Klassifikation vorhersagen",
          "random_forest_regression_fit": "Random-Forest-Regression anpassen",
          "random_forest_regression_predict": "Random-Forest-Regression vorhersagen",
          "random_sample": "Zufallsstichprobe",
          "raster_area": "Rasterfläche",
          "raster_calculator": "Rasterrechner",
          "raster_cell_assignment": "Rasterzellenzuweisung",
          "raster_histogram": "Rasterhistogramm",
          "raster_perimeter": "Rasterumfang",
          "raster_summary_stats": "Zusammenfassende Rasterstatistik",
          "reciprocal": "Kehrwert",
          "rescale_value_range": "Wertebereich neu skalieren",
          "root_mean_square_error": "Wurzel des mittleren quadratischen Fehlers",
          "round": "Runden",
          "shape_complexity_index_raster": "Formkomplexitätsindex (Raster)",
          "sieve": "Sieben",
          "sin": "Sinus",
          "sinh": "Sinus hyperbolicus",
          "sqrt": "Quadratwurzel",
          "square": "Quadrat",
          "tan": "Tangens",
          "tanh": "Tangens hyperbolicus",
          "tin_interpolation": "TIN-Interpolation",
          "to_degrees": "In Grad",
          "to_radians": "In Bogenmaß",
          "trend_surface": "Trendfläche",
          "trend_surface_vector_points": "Trendfläche aus Vektorpunkten",
          "truncate": "Abschneiden",
          "turning_bands_simulation": "Turning-Bands-Simulation",
          "two_sample_ks_test": "KS-Test für zwei Stichproben",
          "wilcoxon_signed_rank_test": "Wilcoxon-Vorzeichen-Rang-Test",
          "z_scores": "Z-Werte",
          "zonal_statistics": "Zonale Statistik",
          "buffer_raster": "Raster-Puffer",
          "cost_allocation": "Kostenzuordnung",
          "cost_distance": "Kostendistanz",
          "cost_pathway": "Kostenpfad",
          "euclidean_allocation": "Euklidische Zuordnung",
          "euclidean_distance": "Euklidische Distanz",
          "image_correlation_neighbourhood_analysis": "Nachbarschaftsanalyse der Bildkorrelation",
          "natural_neighbour_interpolation": "Natural-Neighbour-Interpolation",
          "nearest_neighbour_interpolation": "Nächster-Nachbar-Interpolation",
          "add": "Addieren",
          "average_overlay": "Overlay-Mittelwert",
          "bool_and": "Logisches UND",
          "bool_not": "Logisches NICHT",
          "bool_or": "Logisches ODER",
          "bool_xor": "Logisches XODER",
          "count_if": "Zählen wenn",
          "divide": "Dividieren",
          "highest_position": "Höchste Position",
          "lowest_position": "Niedrigste Position",
          "max_absolute_overlay": "Overlay-Maximum (absolut)",
          "max_overlay": "Overlay-Maximum",
          "min_absolute_overlay": "Overlay-Minimum (absolut)",
          "min_overlay": "Overlay-Minimum",
          "modulo": "Modulo",
          "multiply": "Multiplizieren",
          "multiply_overlay": "Overlay-Produkt",
          "percent_equal_to": "Prozent gleich",
          "percent_greater_than": "Prozent größer als",
          "percent_less_than": "Prozent kleiner als",
          "pick_from_list": "Aus Liste auswählen",
          "power": "Potenz",
          "standard_deviation_overlay": "Overlay-Standardabweichung",
          "subtract": "Subtrahieren",
          "sum_overlay": "Overlay-Summe",
          "update_nodata_cells": "NoData-Zellen aktualisieren",
          "weighted_overlay": "Gewichtetes Overlay",
          "weighted_sum": "Gewichtete Summe",
          "conditional_evaluation": "Bedingte Auswertung",
          "reclass": "Reklassifizieren",
          "reclass_equal_interval": "Reklassifizieren nach gleichen Intervallen",
          "geographically_weighted_regression_raster": "Geographisch gewichtete Regression (Raster)",
          "getis_ord_gi_star_raster": "Getis-Ord Gi*, Raster",
          "inhomogeneous_intensity_raster": "Inhomogene Intensität (Raster)",
          "local_kriging": "Lokales Kriging",
          "local_morans_i_lisa_raster": "Lokales Morans I (LISA), Raster",
          "ordinary_kriging": "Ordinary Kriging",
          "simple_kriging": "Simple Kriging",
          "spacetime_kriging": "Raum-Zeit-Kriging",
          "spatial_error_regression_raster": "Regression mit räumlichem Fehler (Raster)",
          "spatial_lag_regression_raster": "Regression mit räumlicher Verzögerung (Raster)",
          "universal_kriging": "Universal Kriging",
          "change_vector_analysis": "Änderungsvektoranalyse",
          "image_difference_change_detection": "Änderungserkennung über Bilddifferenz",
          "pca_based_change_detection": "PCA-basierte Änderungserkennung",
          "post_classification_change": "Änderung nach der Klassifikation",
          "write_function_memory_insertion": "Write-Function-Memory-Insertion",
          "evaluate_training_sites": "Trainingsgebiete bewerten",
          "fuzzy_knn_classification": "Unscharfe KNN-Klassifikation",
          "generalize_classified_raster": "Klassifiziertes Raster generalisieren",
          "generalize_with_similarity": "Nach Ähnlichkeit generalisieren",
          "k_means_clustering": "K-Means-Clustering",
          "knn_classification": "KNN-Klassifikation",
          "knn_regression": "KNN-Regression",
          "logistic_regression": "Logistische Regression",
          "min_dist_classification": "Minimum-Distance-Klassifikation",
          "modified_k_means_clustering": "Modifiziertes K-Means-Clustering",
          "nnd_classification": "NND-Klassifikation",
          "otsu_thresholding": "Otsu-Schwellenwertbildung",
          "parallelepiped_classification": "Quaderklassifikation",
          "random_forest_classification": "Random-Forest-Klassifikation",
          "random_forest_regression": "Random-Forest-Regression",
          "svm_classification": "SVM-Klassifikation",
          "svm_regression": "SVM-Regression",
          "canny_edge_detection": "Canny-Kantenerkennung",
          "corner_detection": "Eckenerkennung",
          "laplacian_filter": "Laplace-Filter",
          "laplacian_of_gaussians_filter": "Laplacian-of-Gaussian-Filter",
          "prewitt_filter": "Prewitt-Filter",
          "roberts_cross_filter": "Roberts-Cross-Filter",
          "sobel_filter": "Sobel-Filter",
          "balance_contrast_enhancement": "Ausgeglichene Kontrastverbesserung",
          "create_colour_composite": "Farbkomposit erstellen",
          "direct_decorrelation_stretch": "Direkte Dekorrelationsspreizung",
          "false_colour_composite": "Falschfarbenkomposit",
          "gamma_correction": "Gammakorrektur",
          "gaussian_contrast_stretch": "Gaußsche Kontrastspreizung",
          "histogram_equalization": "Histogrammausgleich",
          "histogram_matching": "Histogrammanpassung",
          "histogram_matching_two_images": "Histogrammanpassung zweier Bilder",
          "ihs_to_rgb": "IHS zu RGB",
          "min_max_contrast_stretch": "Min-Max-Kontrastspreizung",
          "mosaic": "Mosaik",
          "mosaic_with_feathering": "Mosaik mit weichen Kanten",
          "normalized_difference_index": "Normalisierter Differenzindex",
          "panchromatic_sharpening": "Pansharpening",
          "percentage_contrast_stretch": "Prozentuale Kontrastspreizung",
          "piecewise_contrast_stretch": "Stückweise Kontrastspreizung",
          "resample": "Neu abtasten",
          "rgb_to_ihs": "RGB zu IHS",
          "sigmoidal_contrast_stretch": "Sigmoidale Kontrastspreizung",
          "split_colour_composite": "Farbkomposit aufteilen",
          "standard_deviation_contrast_stretch": "Kontrastspreizung nach Standardabweichung",
          "true_colour_composite": "Echtfarbenkomposit",
          "adaptive_filter": "Adaptiver Filter",
          "anisotropic_diffusion_filter": "Anisotroper Diffusionsfilter",
          "bilateral_filter": "Bilateralfilter",
          "closing": "Schließen",
          "conservative_smoothing_filter": "Konservativer Glättungsfilter",
          "diff_of_gaussians_filter": "Differenz-von-Gauß-Filter",
          "diversity_filter": "Diversitätsfilter",
          "edge_preserving_mean_filter": "Kantenerhaltender Mittelwertfilter",
          "emboss_filter": "Prägefilter",
          "fast_almost_gaussian_filter": "Schneller Näherungs-Gaußfilter",
          "flip_image": "Bild spiegeln",
          "frangi_filter": "Frangi-Filter",
          "gabor_filter_bank": "Gabor-Filterbank",
          "gaussian_filter": "Gaußfilter",
          "glcm_texture": "GLCM-Textur",
          "guided_filter": "Geführter Filter",
          "high_pass_bilateral_filter": "Bilateraler Hochpassfilter",
          "high_pass_filter": "Hochpassfilter",
          "high_pass_median_filter": "Median-Hochpassfilter",
          "integral_image_transform": "Integralbildtransformation",
          "k_nearest_mean_filter": "Filter der K nächsten Mittelwerte",
          "kuwahara_filter": "Kuwahara-Filter",
          "lee_filter": "Lee-Filter",
          "lidar_ground_point_filter": "LiDAR-Bodenpunktfilter",
          "line_detection_filter": "Linienerkennungsfilter",
          "line_thinning": "Linienausdünnung",
          "majority_filter": "Mehrheitsfilter",
          "maximum_filter": "Maximumfilter",
          "mean_filter": "Mittelwertfilter",
          "median_filter": "Medianfilter",
          "minimum_filter": "Minimumfilter",
          "non_local_means_filter": "Non-Local-Means-Filter",
          "olympic_filter": "Olympia-Filter",
          "opening": "Öffnen",
          "percentile_filter": "Perzentilfilter",
          "range_filter": "Spannweitenfilter",
          "remove_spurs": "Sporne entfernen",
          "savitzky_golay_2d_filter": "Savitzky-Golay-2D-Filter",
          "scharr_filter": "Scharr-Filter",
          "standard_deviation_filter": "Standardabweichungsfilter",
          "thicken_raster_line": "Rasterlinien verdicken",
          "tophat_transform": "Top-Hat-Transformation",
          "total_filter": "Summenfilter",
          "unsharp_masking": "Unscharfmaskierung",
          "user_defined_weights_filter": "Filter mit benutzerdefinierten Gewichten",
          "wiener_filter": "Wiener-Filter",
          "build_object_hierarchy_multiscale": "Objekthierarchie multiskalig aufbauen",
          "classify_objects_ensemble_pro": "Objekte mit Ensemble klassifizieren (Pro)",
          "classify_objects_random_forest": "Objekte mit Random Forest klassifizieren",
          "classify_objects_rules_basic": "Objekte nach Regeln klassifizieren (einfach)",
          "classify_objects_rules_hierarchical": "Objekte nach hierarchischen Regeln klassifizieren",
          "classify_objects_svm": "Objekte mit SVM klassifizieren",
          "evaluate_object_classification_accuracy": "Genauigkeit der Objektklassifikation bewerten",
          "evaluate_segmentation_quality_pro": "Segmentierungsqualität bewerten (Pro)",
          "image_segmentation": "Bildsegmentierung",
          "image_slider": "Bildregler",
          "image_stack_profile": "Profil eines Bildstapels",
          "obia_audit_report_pro": "OBIA-Auditbericht (Pro)",
          "obia_batch_orchestrator_pro": "OBIA-Stapelorchestrator (Pro)",
          "obia_pipeline_basic": "OBIA-Pipeline (einfach)",
          "object_class_probability_maps": "Klassenwahrscheinlichkeitskarten für Objekte",
          "object_features_context_neighbors": "Objektmerkmale: Nachbarschaftskontext",
          "object_features_shape_basic": "Objektmerkmale: Form (einfach)",
          "object_features_spectral_basic": "Objektmerkmale: spektral (einfach)",
          "object_features_texture_glcm_basic": "Objektmerkmale: GLCM-Textur (einfach)",
          "object_features_topology_relations": "Objektmerkmale: topologische Beziehungen",
          "object_uncertainty_diagnostics_pro": "Unsicherheitsdiagnose für Objekte (Pro)",
          "objects_boundary_refinement_pro": "Verfeinerung von Objektgrenzen (Pro)",
          "objects_enforce_min_mapping_unit": "Mindestkartierungseinheit auf Objekte anwenden",
          "polygons_to_segments": "Polygone zu Segmenten",
          "propagate_labels_across_hierarchy": "Labels über die Hierarchie propagieren",
          "segment_graph_felzenszwalb": "Graphsegmentierung nach Felzenszwalb",
          "segment_multiresolution_hierarchical": "Hierarchische Multiresolutionssegmentierung",
          "segment_scale_parameter_optimizer": "Optimierer für den Segmentierungs-Skalenparameter",
          "segment_slic_superpixels": "SLIC-Superpixel-Segmentierung",
          "segment_watershed_markers": "Wasserscheidensegmentierung mit Markern",
          "segments_merge_small_regions": "Kleine Segmentregionen zusammenführen",
          "segments_split_low_cohesion": "Segmente mit geringer Kohäsion teilen",
          "segments_to_polygons": "Segmente zu Polygonen",
          "brdf_normalization": "BRDF-Normalisierung",
          "correct_vignetting": "Vignettierung korrigieren",
          "dark_object_subtraction": "Dunkelobjektsubtraktion",
          "dn_to_toa_reflectance": "DN zu TOA-Reflexion",
          "terrain_corrected_optical_analytics": "Geländekorrigierte optische Analytik",
          "cloude_pottier_decomposition": "Cloude-Pottier-Zerlegung",
          "enhanced_lee_filter": "Verbesserter Lee-Filter",
          "freeman_durden_decomposition": "Freeman-Durden-Zerlegung",
          "frost_filter": "Frost-Filter",
          "gamma_map_filter": "Gamma-MAP-Filter",
          "h_alpha_wisart_classification": "H-Alpha-Wisart-Klassifikation",
          "kuan_filter": "Kuan-Filter",
          "refined_lee_filter": "Verfeinerter Lee-Filter",
          "wisart_iterative_clustering": "Iteratives Wisart-Clustering",
          "yamaguchi_4component_decomposition": "Yamaguchi-4-Komponenten-Zerlegung",
          "continuum_removal": "Kontinuumsentfernung",
          "linear_spectral_unmixing": "Lineare spektrale Entmischung",
          "minimum_noise_fraction": "Minimum Noise Fraction",
          "spectral_angle_mapper": "Spectral Angle Mapper",
          "spectral_library_matching": "Abgleich mit Spektralbibliothek",
          "land_surface_temperature_single_channel": "Landoberflächentemperatur (Einkanal)",
          "land_surface_temperature_split_window": "Landoberflächentemperatur (Split-Window)",
          "ndvi_based_emissivity": "NDVI-basierte Emissivität",
          "assess_route": "Route bewerten",
          "breakline_mapping": "Bruchkantenkartierung",
          "convergence_index": "Konvergenzindex",
          "dem_void_filling": "Lückenfüllung im DGM",
          "deviation_from_mean_elevation": "Abweichung von der mittleren Höhe",
          "difference_from_mean_elevation": "Differenz zur mittleren Höhe",
          "directional_relief": "Gerichtetes Relief",
          "elev_above_pit": "Höhe über der Senke",
          "elev_above_pit_dist": "Distanz der Höhe über der Senke",
          "elevation_percentile": "Höhenperzentil",
          "embankment_mapping": "Dammkartierung",
          "exposure_towards_wind_flux": "Exposition gegenüber dem Windfluss",
          "feature_preserving_smoothing": "Formerhaltende Glättung",
          "feature_preserving_smoothing_multiscale": "Formerhaltende Glättung (multiskalig)",
          "fetch_analysis": "Fetch-Analyse",
          "fill_missing_data": "Fehlende Daten füllen",
          "find_ridges": "Grate finden",
          "hillshade": "Schummerung",
          "hypsometrically_tinted_hillshade": "Hypsometrisch getönte Schummerung",
          "local_hypsometric_analysis": "Lokale hypsometrische Analyse",
          "low_points_on_headwater_divides": "Tiefpunkte auf Quellgebietsscheiden",
          "map_off_terrain_objects": "Objekte über dem Gelände kartieren",
          "max_downslope_elev_change": "Maximale abwärtige Höhenänderung",
          "max_upslope_elev_change": "Maximale aufwärtige Höhenänderung",
          "min_downslope_elev_change": "Minimale abwärtige Höhenänderung",
          "multidirectional_hillshade": "Mehrfachrichtungs-Schummerung",
          "num_downslope_neighbours": "Anzahl unterliegender Nachbarn",
          "num_upslope_neighbours": "Anzahl oberliegender Nachbarn",
          "profile": "Profil",
          "remove_off_terrain_objects": "Objekte über dem Gelände entfernen",
          "ridge_and_valley_vectors": "Grat- und Talvektoren",
          "slope_vs_aspect_plot": "Diagramm Neigung gegen Exposition",
          "slope_vs_elev_plot": "Diagramm Neigung gegen Höhe",
          "smooth_vegetation_residual": "Vegetationsrestwert glätten",
          "surface_area_ratio": "Oberflächenverhältnis",
          "topographic_hachures": "Topografische Schraffuren",
          "accumulation_curvature": "Akkumulationskrümmung",
          "aspect": "Exposition",
          "casorati_curvature": "Casorati-Krümmung",
          "curvedness": "Gekrümmtheit",
          "difference_curvature": "Differenzkrümmung",
          "gaussian_curvature": "Gaußsche Krümmung",
          "generating_function": "Erzeugende Funktion",
          "horizontal_excess_curvature": "Horizontale Überschusskrümmung",
          "maximal_curvature": "Maximale Krümmung",
          "mean_curvature": "Mittlere Krümmung",
          "minimal_curvature": "Minimale Krümmung",
          "plan_curvature": "Horizontalkrümmung",
          "principal_curvature_direction": "Richtung der Hauptkrümmung",
          "profile_curvature": "Vertikalkrümmung",
          "relative_aspect": "Relative Exposition",
          "ring_curvature": "Ringkrümmung",
          "rotor": "Rotor",
          "shape_index": "Formindex",
          "slope": "Neigung",
          "tangential_curvature": "Tangentialkrümmung",
          "total_curvature": "Gesamtkrümmung",
          "unsphericity": "Unsphärizität",
          "vertical_excess_curvature": "Vertikale Überschusskrümmung",
          "elev_relative_to_min_max": "Höhe relativ zu Min/Max",
          "geomorphons": "Geomorphone",
          "hypsometric_analysis": "Hypsometrische Analyse",
          "multiscale_topographic_position_class": "Multiskalige topografische Positionsklasse",
          "pennock_landform_classification": "Pennock-Landformklassifikation",
          "percent_elev_range": "Prozentsatz der Höhenspanne",
          "relative_topographic_position": "Relative topografische Position",
          "max_anisotropy_dev": "Maximale Anisotropieabweichung",
          "max_anisotropy_dev_signature": "Signatur der maximalen Anisotropieabweichung",
          "max_difference_from_mean": "Maximale Differenz zum Mittelwert",
          "max_elev_dev_signature": "Signatur der maximalen Höhenabweichung",
          "max_elevation_deviation": "Maximale Höhenabweichung",
          "multiscale_curvatures": "Multiskalige Krümmungen",
          "multiscale_elevated_index": "Multiskaliger Erhebungsindex",
          "multiscale_elevation_percentile": "Multiskaliges Höhenperzentil",
          "multiscale_low_lying_index": "Multiskaliger Tieflagenindex",
          "multiscale_roughness": "Multiskalige Rauheit",
          "multiscale_roughness_signature": "Signatur der multiskaligen Rauheit",
          "multiscale_std_dev_normals": "Multiskalige Standardabweichung der Normalen",
          "multiscale_std_dev_normals_signature": "Signatur der multiskaligen Standardabweichung der Normalen",
          "multiscale_topographic_position_image": "Bild der multiskaligen topografischen Position",
          "topographic_position_animation": "Animation der topografischen Position",
          "average_normal_vector_angular_deviation": "Mittlere Winkelabweichung des Normalenvektors",
          "circular_variance_of_aspect": "Zirkuläre Varianz der Exposition",
          "edge_density": "Kantendichte",
          "ruggedness_index": "Rauheitsindex",
          "spherical_std_dev_of_normals": "Sphärische Standardabweichung der Normalen",
          "standard_deviation_of_slope": "Standardabweichung der Neigung",
          "average_horizon_distance": "Mittlere Horizontdistanz",
          "horizon_angle": "Horizontwinkel",
          "horizon_area": "Horizontfläche",
          "openness": "Openness",
          "shadow_animation": "Schattenanimation",
          "shadow_image": "Schattenbild",
          "sky_view_factor": "Himmelssichtfaktor",
          "skyline_analysis": "Skyline-Analyse",
          "time_in_daylight": "Zeit im Tageslicht",
          "viewshed": "Sichtfeld",
          "visibility_index": "Sichtbarkeitsindex",
          "topo_render": "Topografische Darstellung",
          "add_surface_information": "Oberflächeninformationen hinzufügen",
          "add_z_information": "Z-Informationen hinzufügen",
          "adjust_3d_z": "Z in 3D anpassen",
          "adjust_stream_to_raster": "Gewässer an Raster anpassen",
          "aggregate_points": "Punkte aggregieren",
          "aggregate_polygons": "Polygone aggregieren",
          "align_features": "Objekte ausrichten",
          "apportion_polygon": "Polygon aufteilen",
          "areal_interpolation": "Flächeninterpolation",
          "assign_projection_vector": "Projektion für Vektor zuweisen",
          "attribute_uncertainty": "Attributunsicherheit",
          "bivariate_spatial_association": "Bivariate räumliche Assoziation",
          "buffer_3d": "3D-Puffer",
          "build_balanced_zones": "Ausgewogene Zonen erstellen",
          "build_seamlines": "Nahtlinien erstellen",
          "calculate_adjacent_fields": "Angrenzende Felder berechnen",
          "calculate_central_meridian_and_parallels": "Mittelmeridian und Breitenparallelen berechnen",
          "calculate_composite_index": "Zusammengesetzten Index berechnen",
          "calculate_distance_band": "Distanzband berechnen",
          "calculate_end_time": "Endzeit berechnen",
          "calculate_grid_convergence_angle": "Meridiankonvergenzwinkel berechnen",
          "calculate_missing_z_values": "Fehlende Z-Werte berechnen",
          "calculate_motion_statistics": "Bewegungsstatistik berechnen",
          "calculate_polygon_main_angle": "Hauptwinkel des Polygons berechnen",
          "calculate_rates": "Raten berechnen",
          "calculate_transformation_errors": "Transformationsfehler berechnen",
          "calculate_utm_zone": "UTM-Zone berechnen",
          "cartogram": "Kartogramm",
          "causal_inference_analysis": "Kausalinferenzanalyse",
          "cell_records_to_sectors": "Zellendatensätze zu Sektoren",
          "central_feature": "Zentrales Objekt / lineares Richtungsmittel",
          "change_point_detection": "Erkennung von Änderungspunkten",
          "collapse_dual_lines_to_centerline": "Doppellinien auf Mittellinie reduzieren",
          "collapse_hydro_polygon": "Hydrologisches Polygon reduzieren",
          "collapse_road_detail": "Straßendetail reduzieren",
          "collect_events": "Ereignisse sammeln",
          "colocation_analysis": "Kolokationsanalyse",
          "color_polygons": "Polygone einfärben",
          "compare_spatial_weights": "Räumliche Gewichte vergleichen",
          "compute_accuracy_for_object_detection": "Genauigkeit der Objekterkennung berechnen",
          "construct_sight_lines": "Sichtlinien konstruieren",
          "contiguous_cartogram": "Zusammenhängendes Kartogramm",
          "contour_list": "Höhenlinienliste",
          "convert_coordinate_notation": "Koordinatennotation umwandeln",
          "cost_connectivity": "Kostenkonnektivität",
          "count_overlapping_features": "Überlappende Objekte zählen",
          "create_accuracy_assessment_points": "Punkte zur Genauigkeitsbewertung erstellen",
          "create_cartographic_partitions": "Kartografische Partitionen erstellen",
          "create_overpass": "Überführung erstellen",
          "create_routes": "Routen erstellen",
          "create_spatial_sampling_locations": "Räumliche Stichprobenstandorte erstellen",
          "create_spatially_balanced_points": "Räumlich ausgewogene Punkte erstellen",
          "create_underpass": "Unterführung erstellen",
          "cul_de_sac_masks": "Sackgassenmasken",
          "delineate_built_up_areas": "Bebaute Gebiete abgrenzen",
          "dendrogram": "Dendrogramm",
          "densify_sampling_network": "Stichprobennetz verdichten",
          "detect_bright_ocean_objects": "Helle Objekte im Ozean erkennen",
          "detect_dark_ocean_areas": "Dunkle Ozeanflächen erkennen",
          "detect_feature_changes": "Objektänderungen erkennen",
          "detect_graphic_conflict": "Grafikkonflikte erkennen",
          "detect_incidents": "Vorfälle erkennen",
          "dice": "Würfeln",
          "difference_3d": "3D-Differenz",
          "dimension_reduction": "Dimensionsreduktion",
          "directional_distribution": "Richtungsverteilung",
          "directional_trend": "Richtungstrend",
          "disperse_markers": "Marker verteilen",
          "dissolve_route_events": "Routenereignisse auflösen",
          "edgematch_features": "Objekte an Kanten abgleichen",
          "eighty_twenty_analysis": "Achtzig-Zwanzig-Analyse",
          "eliminate_polygon_part": "Polygonteil eliminieren",
          "eliminate_polygons": "Polygone eliminieren",
          "emerging_hot_spot_analysis": "Analyse aufkommender Hotspots",
          "enclose_multipatch": "Multipatch schließen",
          "estimate_time_to_event": "Zeit bis zum Ereignis schätzen",
          "evaluate_bin_sizes": "Klassenbreiten bewerten",
          "evaluate_variable_influence": "Variableneinfluss bewerten",
          "exploratory_interpolation": "Explorative Interpolation",
          "exploratory_regression": "Explorative Regression",
          "extract_locations_from_text": "Standorte aus Text extrahieren",
          "extract_water_sar": "Wasser extrahieren (SAR)",
          "extrude_between": "Dazwischen extrudieren",
          "feature_outline_masks": "Umrissmasken von Objekten",
          "feature_to_line": "Objekt zu Linie",
          "feature_vertices_to_points": "Objektstützpunkte zu Punkten",
          "features_to_kml": "Objekte zu KML",
          "fence_diagram": "Zaundiagramm",
          "fill_missing_values": "Fehlende Werte füllen",
          "find_dwell_locations": "Aufenthaltsorte finden",
          "find_identical": "Identische finden",
          "find_meeting_locations": "Treffpunkte finden",
          "find_space_time_matches": "Raum-Zeit-Übereinstimmungen finden",
          "flip_line": "Linie umkehren",
          "forest_based_forecast": "Forest-basierte Prognose",
          "generalized_linear_regression": "Verallgemeinerte lineare Regression",
          "generate_breach_lines": "Bruchlinien erzeugen",
          "generate_near_table": "Nähetabelle erzeugen",
          "generate_network_swm": "Netzwerk-SWM erzeugen",
          "generate_od_links": "Quelle-Ziel-Verbindungen erzeugen",
          "generate_points_along_3d_lines": "Punkte entlang von 3D-Linien erzeugen",
          "generate_spatial_weights_matrix": "Räumliche Gewichtsmatrix erzeugen",
          "generate_subset_polygons": "Teilmengenpolygone erzeugen",
          "generate_transects_along_lines": "Querprofile entlang von Linien erzeugen",
          "geodetic_densify": "Geodätisch verdichten",
          "geographically_weighted_regression": "Geographisch gewichtete Regression",
          "geotagged_photos_to_points": "Geotaggte Fotos zu Punkten",
          "graphic_buffer": "Grafischer Puffer",
          "grid_index_features": "Gitterindexobjekte",
          "group_by_proximity": "Nach Nähe gruppieren",
          "hdbscan": "HDBSCAN-Clustering",
          "getis_ord_general_g": "Hoch/Niedrig-Clusterung (Getis-Ord General G)",
          "hot_spot_analysis_comparison": "Vergleich von Hotspot-Analysen",
          "identify_narrow_polygons": "Schmale Polygone identifizieren",
          "incremental_spatial_autocorrelation": "Inkrementelle räumliche Autokorrelation",
          "inside_3d": "Innerhalb in 3D",
          "integrate": "Integrieren",
          "interpolate_shape": "Form interpolieren",
          "intersect_3d": "In 3D verschneiden",
          "intersect_3d_line_with_surface": "3D-Linie mit Oberfläche verschneiden",
          "intersecting_layers_masks": "Masken sich schneidender Layer",
          "intervisibility": "Intervisibilität",
          "is_closed_3d": "Ist in 3D geschlossen",
          "line_of_sight": "Sichtlinie",
          "local_bivariate_relationships": "Lokale bivariate Beziehungen",
          "local_outlier_analysis": "Lokale Ausreißeranalyse",
          "locate_lines_along_routes": "Linien entlang von Routen lokalisieren",
          "median_center": "Medianzentrum",
          "merge_divided_roads": "Getrennte Fahrbahnen zusammenführen",
          "merge_lines_by_pseudo_node": "Linien an Pseudoknoten zusammenführen",
          "minimum_bounding_volume": "Minimales umschließendes Volumen",
          "multipatch_footprint": "Multipatch-Umriss",
          "multipatch_to_mesh": "Multipatch zu Mesh",
          "multiple_ring_buffer": "Mehrfachringpuffer",
          "mgwr": "Multiskalige geographisch gewichtete Regression",
          "multivariate_clustering": "Multivariates Clustering",
          "near_3d": "Nähe in 3D",
          "neighborhood_summary_statistics": "Zusammenfassende Nachbarschaftsstatistik",
          "non_maximum_suppression": "Non-Maximum-Suppression",
          "optics_clustering": "OPTICS-Clustering",
          "optimal_corridor_connections": "Optimale Korridorverbindungen",
          "optimal_path_as_line": "Optimaler Pfad als Linie",
          "optimized_hot_spot_analysis": "Optimierte Hotspot-Analyse",
          "optimized_outlier_analysis": "Optimierte Ausreißeranalyse",
          "pairwise_comparison_weights": "Gewichte aus Paarvergleich",
          "pivot_table": "Pivot-Tabelle",
          "points_to_line": "Punkte zu Linie",
          "points_to_path": "Punkte zu Pfad",
          "polygon_neighbors": "Polygonnachbarn",
          "polygon_volume": "Polygonvolumen",
          "propagate_displacement": "Verschiebung propagieren",
          "raster_domain": "Rasterdomäne",
          "raster_to_weighted_points": "Raster zu gewichteten Punkten",
          "reclassify_field": "Feld reklassifizieren",
          "reconstruct_tracks": "Tracks rekonstruieren",
          "reduce_point_density": "Punktdichte verringern",
          "regularize_adjacent_building_footprint": "Angrenzende Gebäudegrundrisse regularisieren",
          "regularize_building_footprints": "Gebäudegrundrisse regularisieren",
          "remove_overlap_multiple": "Überlappung entfernen (mehrere)",
          "render_vector_png": "Vektor als PNG rendern",
          "repair_geometry": "Geometrie reparieren",
          "resolve_building_conflicts": "Gebäudekonflikte auflösen",
          "resolve_road_conflicts": "Straßenkonflikte auflösen",
          "ripleys_k": "Ripleys K",
          "rubbersheet_features": "Objekte per Rubbersheeting anpassen",
          "semivariogram_sensitivity": "Semivariogramm-Sensitivität",
          "similarity_search": "Ähnlichkeitssuche",
          "simplify_3d_line": "3D-Linie vereinfachen",
          "simplify_building": "Gebäude vereinfachen",
          "simplify_by_circular_arcs": "Nach Kreisbögen vereinfachen",
          "simplify_by_tangent_segments": "Nach Tangentensegmenten vereinfachen",
          "simplify_shared_edges": "Gemeinsame Kanten vereinfachen",
          "smooth_natural_features": "Natürliche Objekte glätten",
          "smooth_shared_edges": "Gemeinsame Kanten glätten",
          "snap_tracks": "Tracks fangen",
          "sort_features": "Objekte sortieren",
          "spatial_eigenvector_filtering": "Räumliche Eigenvektorfilterung (MESF)",
          "spatial_outlier_detection": "Erkennung räumlicher Ausreißer",
          "spatially_constrained_multivariate_clustering": "Räumlich beschränktes multivariates Clustering",
          "split_by_attributes": "Nach Attributen teilen",
          "split_by_features": "Nach Objekten teilen",
          "split_line_at_point": "Linie an Punkt teilen",
          "stack_profile": "Stapelprofil",
          "strip_map_index_features": "Streifenindexobjekte",
          "subdivide_polygon": "Polygon unterteilen",
          "subset_features": "Objektteilmenge",
          "summarize_nearby": "Umgebung zusammenfassen",
          "summarize_percent_change": "Prozentuale Änderung zusammenfassen",
          "summarize_within": "Innerhalb zusammenfassen",
          "summary_statistics": "Zusammenfassende Statistik",
          "sun_shadow_volume": "Sonnenschattenvolumen",
          "surface_difference": "Oberflächendifferenz",
          "table_to_geometry": "Tabelle zu Geometrie",
          "tabulate_intersection": "Verschneidung tabellieren",
          "thin_road_network": "Straßennetz ausdünnen",
          "tile_grid_polygons": "Kachelgitterpolygone",
          "time_series_clustering": "Zeitreihen-Clustering",
          "time_series_forecast": "Zeitreihenprognose",
          "time_series_smoothing": "Zeitreihenglättung",
          "trace_proximity_events": "Näheereignisse verfolgen",
          "transform_features": "Objekte transformieren",
          "transform_fields": "Felder transformieren",
          "transform_route_events": "Routenereignisse transformieren",
          "transpose_fields": "Felder transponieren",
          "trim_line": "Linie stutzen",
          "union_3d": "3D-Vereinigung",
          "validate_flow_direction": "Fließrichtung validieren",
          "voxel_isosurface": "Voxel-Isofläche",
          "buffer_vector": "Vektorpuffer",
          "directional_variogram": "Richtungsvariogrammanalyse",
          "estimate_variogram": "Variogramm schätzen",
          "fit_variogram": "Variogrammmodell anpassen",
          "add_field": "Feld hinzufügen",
          "add_geometry_attributes": "Geometrieattribute hinzufügen",
          "attribute_correlation": "Attributkorrelation",
          "attribute_histogram": "Attributhistogramm",
          "attribute_scattergram": "Attribut-Streudiagramm",
          "delete_field": "Feld löschen",
          "extract_by_attribute": "Nach Attribut extrahieren",
          "field_calculator": "Feldrechner",
          "filter_vector_features_by_area": "Vektorobjekte nach Fläche filtern",
          "list_unique_values": "Eindeutige Werte auflisten",
          "rename_field": "Feld umbenennen",
          "centroid_vector": "Vektorschwerpunkt",
          "concave_hull": "Konkave Hülle",
          "densify_features": "Objekte verdichten",
          "eliminate_coincident_points": "Deckungsgleiche Punkte entfernen",
          "extend_vector_lines": "Vektorlinien verlängern",
          "merge_line_segments": "Liniensegmente zusammenführen",
          "minimum_bounding_box": "Minimales umschließendes Rechteck",
          "minimum_bounding_circle": "Minimaler umschließender Kreis",
          "minimum_bounding_envelope": "Minimale umschließende Hüllbox",
          "minimum_convex_hull": "Minimale konvexe Hülle",
          "polygonize": "Polygonisieren",
          "representative_point_vector": "Repräsentativer Vektorpunkt",
          "simplify_features": "Objekte vereinfachen",
          "smooth_vectors": "Vektoren glätten",
          "snap_endnodes": "Endknoten fangen",
          "split_vector_lines": "Vektorlinien teilen",
          "split_with_lines": "Mit Linien teilen",
          "locate_points_along_routes": "Punkte entlang von Routen lokalisieren",
          "points_along_lines": "Punkte entlang von Linien",
          "route_calibrate": "Route kalibrieren",
          "route_event_lines_from_layer": "Routenereignislinien aus Layer",
          "route_event_lines_from_table": "Routenereignislinien aus Tabelle",
          "route_event_merge": "Routenereignisse zusammenführen",
          "route_event_overlay": "Routenereignisse überlagern",
          "route_event_points_from_layer": "Routenereignispunkte aus Layer",
          "route_event_points_from_table": "Routenereignispunkte aus Tabelle",
          "route_event_split": "Routenereignisse teilen",
          "route_measure_qa": "Qualitätsprüfung der Routenmessungen",
          "route_recalibrate": "Route neu kalibrieren",
          "snap_events_to_routes": "Ereignisse auf Routen fangen",
          "download_osm_vector": "OSM-Vektordaten herunterladen",
          "clip": "Zuschneiden",
          "difference": "Differenz",
          "dissolve": "Auflösen",
          "erase": "Löschen",
          "identity": "Identität",
          "intersect": "Verschneiden",
          "line_intersections": "Linienschnittpunkte",
          "line_polygon_clip": "Linien an Polygon zuschneiden",
          "near": "Nähe",
          "select_by_location": "Nach Lage auswählen",
          "spatial_join": "Räumlicher Join",
          "symmetrical_difference": "Symmetrische Differenz",
          "union": "Vereinigung",
          "update": "Aktualisieren",
          "construct_vector_tin": "Vektor-TIN aufbauen",
          "contours_from_points": "Höhenlinien aus Punkten",
          "contours_from_raster": "Höhenlinien aus Raster",
          "extract_nodes": "Knoten extrahieren",
          "extract_raster_values_at_points": "Rasterwerte an Punkten extrahieren",
          "find_lowest_or_highest_points": "Tiefste oder höchste Punkte finden",
          "hexagonal_grid_from_raster_base": "Hexagonalgitter auf Rasterbasis",
          "hexagonal_grid_from_vector_base": "Hexagonalgitter auf Vektorbasis",
          "layer_footprint_raster": "Umriss des Rasterlayers",
          "layer_footprint_vector": "Umriss des Vektorlayers",
          "medoid": "Medoid",
          "random_points_in_polygon": "Zufallspunkte im Polygon",
          "rectangular_grid_from_raster_base": "Rechteckgitter auf Rasterbasis",
          "rectangular_grid_from_vector_base": "Rechteckgitter auf Vektorbasis",
          "vector_hex_binning": "Vektor-Hexagon-Binning",
          "voronoi_diagram": "Voronoi-Diagramm",
          "compactness_ratio": "Kompaktheitsverhältnis",
          "deviation_from_regional_direction": "Abweichung von der regionalen Richtung",
          "elongation_ratio": "Streckungsverhältnis",
          "hole_proportion": "Lochanteil",
          "linearity_index": "Linearitätsindex",
          "narrowness_index_vector": "Schmalheitsindex (Vektor)",
          "patch_orientation": "Ausrichtung der Fläche",
          "perimeter_area_ratio": "Umfang-Flächen-Verhältnis",
          "polygon_area": "Polygonfläche",
          "polygon_long_axis": "Lange Polygonachse",
          "polygon_perimeter": "Polygonumfang",
          "polygon_short_axis": "Kurze Polygonachse",
          "related_circumscribing_circle": "Zugehöriger Umkreis",
          "shape_complexity_index_vector": "Formkomplexitätsindex (Vektor)",
          "envelope_test": "Hüllkurventest",
          "getis_ord_gi_star": "Getis-Ord Gi*",
          "global_morans_i": "Globales Morans I",
          "hotspot_vs_process": "Hotspot gegen Prozess",
          "inhomogeneous_baseline": "Inhomogene Grundlinie",
          "local_morans_i_lisa": "Lokales Morans I (LISA)",
          "nearest_neighbour_index": "Nächster-Nachbar-Index",
          "point_pattern_envelope": "Hüllkurve des Punktmusters",
          "point_process_residuals": "Residuen des Punktprozesses",
          "point_process_residuals_comparison": "Vergleich der Punktprozessresiduen",
          "quadrat_count_test": "Quadratzähltest",
          "ripleys_k_function": "Ripleys K-Funktion",
          "ripleys_k_test": "Ripleys-K-Test",
          "spatial_error_regression": "Regression mit räumlichem Fehler",
          "spatial_lag_regression": "Regression mit räumlicher Verzögerung"
        },
        "menuSubcategory": {
          "geolibre_wasm": "GeoLibre (WASM)",
          "geometry_topology": "Geometrie und Topologie",
          "raster_vector_conversion": "Raster-/Vektorkonvertierung",
          "vector_table_i_o": "Vektor- und Tabellen-E/A",
          "depressions_storage": "Senken und Speicherung",
          "flow_routing": "Abflussrouting",
          "hydrologic_indices": "Hydrologische Indizes",
          "streams_longitudinal_analysis": "Gewässer - Längsschnittanalyse",
          "streams_network_extraction": "Gewässer - Netzwerkextraktion",
          "streams_ordering_metrics": "Gewässer - Ordnungskennzahlen",
          "watersheds_basins": "Einzugsgebiete",
          "analysis_metrics": "Analysekennzahlen",
          "filtering_classification": "Filterung und Klassifikation",
          "i_o_management": "E/A und Verwaltung",
          "interpolation_gridding": "Interpolation und Rasterung",
          "network_analysis": "Netzwerkanalyse",
          "general": "Allgemein",
          "distance_cost": "Distanz und Kosten",
          "local_neighborhood": "Lokale Nachbarschaft",
          "overlay_math": "Overlay-Rechenoperationen",
          "reclassify_mask": "Reklassifizieren und Maskieren",
          "spatial_statistics": "Räumliche Statistik",
          "change_detection": "Veränderungserkennung",
          "classification": "Klassifikation",
          "edge_feature_detection": "Kanten- und Merkmalserkennung",
          "enhancement_contrast": "Verbesserung und Kontrast",
          "filters": "Filter",
          "obia": "OBIA",
          "radiometric_correction": "Radiometrische Korrektur",
          "sar": "SAR",
          "spectral_analytics": "Spektralanalytik",
          "thermal_emissivity": "Thermik und Emissionsgrad",
          "derivatives": "Ableitungen",
          "landform_indices": "Landformindizes",
          "multiscale_signatures": "Multiskalen-Signaturen",
          "roughness_texture": "Rauheit und Textur",
          "visibility": "Sichtbarkeit",
          "workflow_products": "Workflow-Produkte",
          "attribute_analysis": "Attributanalyse",
          "geometry_processing": "Geometrieverarbeitung",
          "linear_referencing": "Lineare Referenzierung",
          "online_data": "Online-Daten",
          "overlay_analysis": "Overlay-Analyse",
          "sampling_gridding": "Stichproben und Rasterung",
          "shape_metrics": "Formkennzahlen"
        }
      }
    }
  }
}
