{
  "format": "geolibre-language-pack",
  "formatVersion": 1,
  "scope": "whitebox",
  "locale": "it",
  "name": "Pacchetto lingua italiana per Whitebox",
  "updatedAt": "2026-09-25T16:57:56.330Z",
  "translations": {
    "processing": {
      "toolMeta": {
        "whitebox": {
          "build_object_hierarchy_multiscale": {
            "name": "Costruisci gerarchia di oggetti multiscala",
            "description": "Rete gerarchica di oggetti costruita tramite aggregazione iterativa su più scale di segmentazione, fondendo progressivamente i segmenti più fini in base alla similarità spettrale e all'adiacenza spaziale. Costruisce una struttura ad albero in cui i nodi foglia rappresentano i segmenti a scala fine e la radice rappresenta l'intera immagine. Le relazioni di contenimento codificano gerarchie di oggetti padre-figlio (parte-tutto), consentendo analisi multirisoluzione e interrogazioni di oggetti adattive alla scala attraverso i livelli della gerarchia. Caratteristiche principali: gerarchia di segmentazione multiscala; tracciamento delle relazioni parte-tutto; supporto per interrogazioni di oggetti annidati; analisi adattiva alla scala; rappresentazione gerarchica efficiente in memoria; agevolazione della classificazione a cascata. Casi d'uso: mappatura gerarchica della copertura del suolo; estrazione di complessi edilizi a partire dai loro componenti; rilevamento di campi agricoli; analisi degli strati della vegetazione; delimitazione di distretti urbani; mappatura delle zone umide con classificazione delle sottocomponenti. Interpretazione dell'output: l'output è un database gerarchico di oggetti che codifica la struttura dipendente dalla scala. Interrogare gli oggetti a scale specifiche; le scale intermedie rivelano scale di oggetti di transizione che bilanciano dettaglio e generalizzazione. Le relazioni padre-figlio rivelano la struttura compositiva. Le distribuzioni statistiche per livello di scala caratterizzano le proprietà di dimensione/forma degli oggetti a ciascun livello della gerarchia, consentendo la scelta di una strategia di classificazione ottimale rispetto alla scala.",
            "params": {
              "coarse_segments": {
                "label": "Segmenti grossolani",
                "description": "Raster dei segmenti grossolani."
              },
              "fine_segments": {
                "label": "Segmenti fini",
                "description": "Raster dei segmenti fini."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV della gerarchia in uscita."
              }
            }
          },
          "classify_objects_ensemble_pro": {
            "name": "Classifica oggetti con ensemble (Pro)",
            "description": "Esegue una configurazione di classificazione degli oggetti in stile ensemble, ottimizzata per una maggiore stabilità su scene eterogenee.",
            "params": {
              "features": {
                "label": "Caratteristiche",
                "description": "CSV delle caratteristiche degli oggetti in ingresso (deve includere segment_id e colonne numeriche di caratteristiche)."
              },
              "training": {
                "label": "Addestramento",
                "description": "CSV di addestramento con le colonne segment_id ed etichetta di classe."
              },
              "segment_id_field": {
                "label": "Campo ID segmento",
                "description": "Nome del campo ID segmento (default segment_id)."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Campo dell'etichetta di classe nel CSV di addestramento (default class)."
              },
              "n_trees": {
                "label": "Numero di alberi",
                "description": "Numero di alberi (default 200)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV delle predizioni in uscita."
              }
            }
          },
          "classify_objects_random_forest": {
            "name": "Classifica oggetti con random forest",
            "description": "Addestra un classificatore ensemble Random Forest su campioni di addestramento di segmenti etichettati, usando come predittori caratteristiche spettrali, morfologiche e di tessitura. Costruisce più alberi decisionali tramite campionamento bootstrap e randomizzazione delle caratteristiche, quindi aggrega le previsioni tramite voto a maggioranza. La classificazione opera sui vettori di caratteristiche per segmento, assegnando le etichette di classe degli oggetti in modo probabilistico in base al consenso dell'ensemble, e consente una categorizzazione multiclasse robusta degli oggetti a partire dalle caratteristiche OBIA. Le caratteristiche principali comprendono l'apprendimento ensemble che combina più alberi decisionali per una classificazione robusta, la gestione di spazi di caratteristiche ad alta dimensionalità tipici dell'OBIA multispettrale, stime di confidenza e di probabilità della classificazione, una classifica dell'importanza delle caratteristiche che identifica le proprietà discriminanti, la gestione naturale delle interazioni non lineari tra caratteristiche e la robustezza al rumore e alla ridondanza delle caratteristiche. I casi d'uso spaziano dalla classificazione multiclasse della copertura del suolo da segmenti OBIA (urbano, agricolo, foresta, acqua), alla classificazione supervisionata a livello di oggetto affinata tramite la selezione dei campioni di addestramento, alla classificazione per il rilevamento dei cambiamenti su sequenze temporali di segmentazione, alla classificazione gerarchica (tipi di habitat grossolani affinati in categorie fini) e all'integrazione con campioni di addestramento manuali ottenuti da interpretazione visiva. Nell'output, l'etichetta di classe prevista identifica il tipo principale di oggetto; la probabilità di confidenza indica la certezza della classificazione; una bassa confidenza suggerisce oggetti intermedi ambigui; l'importanza delle caratteristiche identifica quali proprietà spettrali/morfologiche guidano le decisioni di classificazione; la mappa di classificazione rappresenta direttamente la distribuzione dei tipi di oggetto; la confusione tra classi simili orienta l'affinamento dell'addestramento; l'output probabilistico consente la quantificazione dell'incertezza.",
            "params": {
              "features": {
                "label": "Caratteristiche",
                "description": "CSV delle caratteristiche degli oggetti in ingresso (deve includere segment_id e colonne numeriche di caratteristiche)."
              },
              "training": {
                "label": "Addestramento",
                "description": "CSV di addestramento con le colonne segment_id ed etichetta di classe."
              },
              "segment_id_field": {
                "label": "Campo ID segmento",
                "description": "Nome del campo ID segmento (default segment_id)."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Campo dell'etichetta di classe nel CSV di addestramento (default class)."
              },
              "n_trees": {
                "label": "Numero di alberi",
                "description": "Numero di alberi (default 200)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV delle predizioni in uscita."
              }
            }
          },
          "classify_objects_rules_basic": {
            "name": "Classifica oggetti per regole (base)",
            "description": "Applica una classificazione trasparente degli oggetti basata su regole, a partire da un CSV di regole caratteristica-operatore-soglia. Logica decisionale pienamente interpretabile per flussi di lavoro di esperti di dominio e per la conformità normativa.",
            "params": {
              "features": {
                "label": "Caratteristiche",
                "description": "CSV delle caratteristiche degli oggetti in ingresso."
              },
              "rules": {
                "label": "Regole",
                "description": "CSV delle regole con colonne: feature, op, value, class, [priority]."
              },
              "default_class": {
                "label": "Classe predefinita",
                "description": "Classe di ripiego quando nessuna regola corrisponde."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV delle predizioni in uscita."
              }
            }
          },
          "classify_objects_rules_hierarchical": {
            "name": "Classifica oggetti per regole gerarchiche",
            "description": "Applica una classificazione gerarchica degli oggetti basata su regole; attualmente usa regole ordinate con un fallback deterministico.",
            "params": {
              "features": {
                "label": "Caratteristiche",
                "description": "CSV delle caratteristiche degli oggetti in ingresso."
              },
              "rules": {
                "label": "Regole",
                "description": "CSV delle regole con colonne: feature, op, value, class, [priority]."
              },
              "default_class": {
                "label": "Classe predefinita",
                "description": "Classe di ripiego quando nessuna regola corrisponde."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV delle predizioni in uscita."
              }
            }
          },
          "classify_objects_svm": {
            "name": "Classifica oggetti con SVM",
            "description": "Classifica gli oggetti usando un flusso di lavoro in stile SVM (implementato tramite le impostazioni predefinite di un backend robusto di classificazione degli oggetti).",
            "params": {
              "features": {
                "label": "Caratteristiche",
                "description": "CSV delle caratteristiche degli oggetti in ingresso (deve includere segment_id e colonne numeriche di caratteristiche)."
              },
              "training": {
                "label": "Addestramento",
                "description": "CSV di addestramento con le colonne segment_id ed etichetta di classe."
              },
              "segment_id_field": {
                "label": "Campo ID segmento",
                "description": "Nome del campo ID segmento (default segment_id)."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Campo dell'etichetta di classe nel CSV di addestramento (default class)."
              },
              "n_trees": {
                "label": "Numero di alberi",
                "description": "Numero di alberi (default 200)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV delle predizioni in uscita."
              }
            }
          },
          "evaluate_object_classification_accuracy": {
            "name": "Valuta l'accuratezza della classificazione degli oggetti",
            "description": "Calcola le metriche di accuratezza della classificazione confrontando le etichette previste degli oggetti con le etichette di riferimento (verità a terra) o di validazione. Genera una matrice di confusione che documenta gli schemi di accordo/disaccordo della classificazione per classe, calcola l'accuratezza complessiva (totale delle previsioni corrette), l'accuratezza del produttore per classe (tasso di rilevamento), l'accuratezza dell'utente (affidabilità), l'F1-score (media armonica), la statistica kappa (accordo corretto per il caso) e un'analisi degli errori specifica per classe che identifica schemi sistematici di errata classificazione. Le caratteristiche principali comprendono una valutazione completa dell'accuratezza su tutte le classi, metriche di prestazione per classe che consentono diagnosi specifiche per classe, una matrice di confusione che rivela schemi sistematici di errata classificazione, test di significatività statistica tramite il coefficiente kappa, la gestione naturale di distribuzioni di classi sbilanciate e l'identificazione di problemi di adeguatezza dei dati di addestramento. I casi d'uso comprendono la validazione dei modelli di classificazione e la quantificazione delle prestazioni, il confronto tra approcci e parametri di classificazione alternativi, l'identificazione di classi di oggetti problematiche che richiedono ulteriore addestramento, la valutazione dell'idoneità della classificazione per applicazioni operative, la selezione dei modelli e l'ottimizzazione degli iperparametri basate sull'accuratezza, il controllo di qualità nei flussi di lavoro di mappatura automatizzata e la rendicontazione di metriche di accuratezza standardizzate per la revisione tra pari. Nell'output, l'accuratezza complessiva rappresenta l'affidabilità della classificazione su tutti gli oggetti; l'accuratezza del produttore indica la completezza del rilevamento per classe; l'accuratezza dell'utente indica l'affidabilità delle previsioni; un kappa elevato (>0.8) indica un forte accordo oltre il caso; la matrice di confusione rivela quali classi vengono confuse tra loro; la dominanza della diagonale indica una forte separazione tra le classi; i valori fuori diagonale individuano le fonti di errata classificazione; le metriche specifiche per classe guidano un miglioramento mirato dell'addestramento.",
            "params": {
              "predictions": {
                "label": "Predizioni",
                "description": "CSV delle predizioni contenente segment_id e predicted_class."
              },
              "reference": {
                "label": "Riferimento",
                "description": "CSV di riferimento contenente segment_id e class."
              },
              "segment_id_field": {
                "label": "Campo ID segmento",
                "description": "Nome del campo ID segmento (default segment_id)."
              },
              "predicted_field": {
                "label": "Campo predetto",
                "description": "Campo della classe predetta (default predicted_class)."
              },
              "reference_field": {
                "label": "Campo di riferimento",
                "description": "Campo della classe di riferimento (default class)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del rapporto JSON in uscita."
              }
            }
          },
          "evaluate_segmentation_quality_pro": {
            "name": "Valuta la qualità della segmentazione (Pro)",
            "description": "Calcola diagnostiche di qualità della segmentazione, incluse statistiche sul numero di oggetti e sulla sovrapposizione dell'etichetta dominante.",
            "params": {
              "segments": {
                "label": "Segmenti",
                "description": "Raster delle etichette dei segmenti in ingresso."
              },
              "reference": {
                "label": "Riferimento",
                "description": "Raster opzionale delle etichette di riferimento per diagnostiche basate sulla sovrapposizione."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del rapporto JSON in uscita."
              }
            }
          },
          "image_segmentation": {
            "name": "Segmentazione dell'immagine",
            "description": "Segmenta stack raster multibanda in regioni omogenee contigue usando l'accrescimento di regioni a partire da semi.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso (uno per banda)."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Soglia di distanza per la crescita delle regioni nello spazio delle caratteristiche standardizzato (default 0.5)."
              },
              "steps": {
                "label": "Passi",
                "description": "Numero di bande di priorità dei semi (default 10)."
              },
              "min_area": {
                "label": "Area minima",
                "description": "Area minima opzionale delle regioni per la pulizia dopo la fusione (default 4)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "image_slider": {
            "name": "Cursore immagini",
            "description": "Image Slider è uno strumento di visualizzazione interattiva che consente il confronto diretto a livello di pixel tra dataset raster co-registrati tramite divisori di sovrapposizione orizzontali o verticali trascinabili. Algoritmo: mantiene in memoria due dataset raster allineati, visualizza una vista combinata con una posizione regolabile del divisore che controlla la visibilità dei layer, e l'interazione dell'utente regola dinamicamente il divisore creando un effetto a schermo diviso. Supporta orientamenti di divisione sia orizzontali sia verticali. Caratteristiche principali: confronto interattivo in tempo reale, visualizzazione a piena risoluzione, interfaccia utente intuitiva che non richiede competenze analitiche, funziona con raster multispettrali e indicizzati, supporta grandi dataset grazie a una visualizzazione efficiente. Funzionalità: visualizzazione del rilevamento dei cambiamenti, confronto prima/dopo, analisi multitemporale, valutazione della normalizzazione radiometrica, ispezione visiva dell'accuratezza della classificazione. Casi d'uso: rilevamento dei cambiamenti nelle immagini tra date diverse, confronto dei risultati della classificazione con dati di riferimento, valutazione dell'efficacia della pre-elaborazione, rilevamento visivo dei cambiamenti nell'analisi di serie temporali. Applicazioni: valutazione dei danni nella risposta ai disastri, monitoraggio dell'espansione urbana, rilevamento dei disturbi forestali, monitoraggio dei cambiamenti agricoli, controllo di qualità degli output di elaborazione delle immagini. Interpretazione dell'output: le differenze visive rivelano l'entità e la posizione dei cambiamenti; i bordi netti indicano cambiamenti significativi; le transizioni graduali suggeriscono imprecisioni di registrazione o gradazioni temporali; le differenze sistematiche nell'immagine rivelano artefatti di elaborazione sistematici.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Percorso del raster dell'immagine sinistra o oggetto raster tipizzato."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso del raster dell'immagine destra o oggetto raster tipizzato."
              },
              "label1": {
                "label": "Etichetta 1",
                "description": "Etichetta opzionale mostrata per l'immagine sinistra."
              },
              "left_palette": {
                "label": "Palette sinistra",
                "description": "Palette per l'immagine sinistra non RGB (default grey)."
              },
              "left_reverse_palette": {
                "label": "Inverti palette sinistra",
                "description": "Inverte la palette sinistra."
              },
              "label2": {
                "label": "Etichetta 2",
                "description": "Etichetta opzionale mostrata per l'immagine destra."
              },
              "right_palette": {
                "label": "Palette destra",
                "description": "Palette per l'immagine destra non RGB (default grey)."
              },
              "right_reverse_palette": {
                "label": "Inverti palette destra",
                "description": "Inverte la palette destra."
              },
              "height": {
                "label": "Altezza",
                "description": "Altezza di visualizzazione in pixel (default 600)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso dell'HTML in uscita."
              }
            }
          },
          "image_stack_profile": {
            "name": "Profilo di stack di immagini",
            "description": "Estrae profili per punto attraverso uno stack raster ordinato e, facoltativamente, scrive un report HTML.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Elenco dei raster in ingresso come array di percorsi o stringa delimitata da virgole/punti e virgola."
              },
              "points": {
                "label": "Punti",
                "description": "Percorso del vettoriale puntuale (o oggetto vettoriale tipizzato) contenente le posizioni dei campioni."
              },
              "output_html": {
                "label": "HTML in uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita."
              }
            }
          },
          "obia_audit_report_pro": {
            "name": "Rapporto di audit OBIA (Pro)",
            "description": "Crea un report di verifica per gli artefatti dei flussi di lavoro OBIA, inclusi i metadati di esistenza, dimensione e data/ora dei file.",
            "params": {
              "artifacts": {
                "label": "Artefatti",
                "description": "Array di percorsi degli artefatti da verificare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del rapporto JSON di verifica in uscita."
              }
            }
          },
          "obia_batch_orchestrator_pro": {
            "name": "Orchestratore batch OBIA (Pro)",
            "description": "Esegue più job della pipeline OBIA in un'unica richiesta e restituisce un report consolidato dei job.",
            "params": {
              "jobs": {
                "label": "Processi",
                "description": "Array di oggetti job con inputs, training, output_prefix e segment_method opzionale."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del rapporto JSON in uscita."
              }
            }
          },
          "obia_pipeline_basic": {
            "name": "Pipeline OBIA (base)",
            "description": "Esegue un flusso di lavoro OBIA completo end-to-end in un'unica operazione: segmentazione (SLIC/Graph), fusione delle regioni piccole, estrazione di caratteristiche spettrali/di forma e classificazione random forest.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso per segmentazione/caratteristiche."
              },
              "training": {
                "label": "Addestramento",
                "description": "CSV di addestramento con le colonne segment_id e class."
              },
              "output_prefix": {
                "label": "Prefisso di uscita",
                "description": "Prefisso del percorso di uscita per gli artefatti generati."
              },
              "segment_method": {
                "label": "Metodo di segmentazione",
                "description": "Metodo di segmentazione: slic o graph (default slic)."
              },
              "min_size": {
                "label": "Dimensione minima",
                "description": "Dimensione minima dei segmenti per la pulizia con fusione (default 10)."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Nome del campo della classe di addestramento (default class)."
              }
            }
          },
          "object_class_probability_maps": {
            "name": "Mappe di probabilità di classe degli oggetti",
            "description": "Converte le previsioni in mappe di probabilità per classe, consentendo la visualizzazione dell'incertezza basata su raster e il filtraggio basato sulla confidenza. Supporta la sogliatura della confidenza a valle e scenari multietichetta.",
            "params": {
              "predictions": {
                "label": "Predizioni",
                "description": "CSV delle predizioni con segment_id e predicted_class."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV delle probabilità in uscita."
              }
            }
          },
          "object_features_context_neighbors": {
            "name": "Caratteristiche oggetto: vicini di contesto",
            "description": "Calcola caratteristiche di contesto spaziale: numero di oggetti adiacenti, lunghezze dei confini condivisi e metriche di isolamento. Consente una classificazione consapevole dei vicini che cattura le relazioni tra oggetti nel paesaggio.",
            "params": {
              "segments": {
                "label": "Segmenti",
                "description": "Raster delle etichette dei segmenti in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV in uscita."
              }
            }
          },
          "object_features_shape_basic": {
            "name": "Caratteristiche oggetto: forma (base)",
            "description": "Calcola descrittori di forma geometrici e morfologici per ciascun segmento, tra cui area (numero di pixel), perimetro (lunghezza del confine), compattezza (circolarità normalizzata sul perimetro), allungamento (rapporto lunghezza/larghezza), fattore di forma (regolarità della forma normalizzata) e solidità (efficienza rispetto all'inviluppo convesso). I descrittori di forma catturano le caratteristiche strutturali indipendentemente dal contenuto spettrale, consentendo la classificazione della geometria degli oggetti e il riconoscimento di pattern morfologici. Le caratteristiche principali comprendono suite complete di metriche di forma che coprono area, perimetro, regolarità e allungamento, algoritmi di tracciamento dei confini computazionalmente efficienti, metriche invarianti a rotazione e traslazione, applicabilità su diversi intervalli di scala e capacità di classificazione morfologica degli oggetti (ad es. strade allungate rispetto a edifici compatti). I casi d'uso comprendono la classificazione delle impronte degli edifici e l'analisi della struttura urbana, l'estrazione di elementi lineari (strade, fiumi, confini), la caratterizzazione delle macchie di vegetazione e l'analisi della frammentazione, il controllo di qualità tramite filtraggio basato sulla forma, il riconoscimento gerarchico degli oggetti che combina proprietà di forma e spettrali, e la quantificazione della struttura del paesaggio nel monitoraggio ecologico. Nell'output, l'area quantifica la dimensione del segmento in pixel; il perimetro definisce la complessità del confine; una compattezza vicina a 1.0 indica forme circolari/regolari, valori inferiori indicano elementi irregolari/allungati; un allungamento >1 indica elementi lineari, vicino a 1 indica oggetti compatti; il fattore di forma combina più proprietà di forma per una classificazione integrata della forma; le metriche di forma consentono un filtraggio morfologico per isolare i tipi di oggetto di interesse.",
            "params": {
              "segments": {
                "label": "Segmenti",
                "description": "Raster delle etichette dei segmenti in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV in uscita."
              }
            }
          },
          "object_features_spectral_basic": {
            "name": "Caratteristiche oggetto: spettrali (base)",
            "description": "Calcola sintesi statistiche univariate complete dei valori di riflettanza spettrale all'interno di ciascun segmento su tutte le bande dell'immagine. I calcoli per segmento comprendono la riflettanza media, la deviazione standard (omogeneità), i limiti di riflettanza minima e massima, i valori dei quantili per una stima robusta e statistiche per banda che consentono la quantificazione della tessitura multispettrale e la caratterizzazione del profilo spettrale, fondamentali per i flussi di lavoro di classificazione OBIA. Le caratteristiche principali comprendono la generazione di statistiche spettrali per banda per immagini multispettrali e iperspettrali, misure statistiche robuste che catturano la tendenza centrale e la dispersione, l'identificazione di anomalie spettrali e valori anomali all'interno dei segmenti, una sintesi efficiente da raster a vettoriale e un output che alimenta direttamente le pipeline di classificazione di machine learning. I casi d'uso spaziano dall'estrazione di caratteristiche per la classificazione basata su oggetti tramite metriche spettrali, all'identificazione dei tipi di copertura del suolo tramite l'analisi delle firme spettrali, al rilevamento dei cambiamenti tramite il confronto di statistiche spettrali su sequenze temporali, alla valutazione della qualità dei dati e al rilevamento dei valori anomali, al monitoraggio ambientale tramite l'analisi di serie temporali spettrali e alle applicazioni di agricoltura di precisione che richiedono una caratterizzazione normalizzata della risposta spettrale. Nell'output, i valori medi rappresentano la risposta spettrale tipica del materiale del segmento; la deviazione standard quantifica l'eterogeneità interna (bassa = superficie omogenea, alta = materiali misti o ombre); i limiti min/max identificano gli estremi spettrali all'interno dei segmenti; i profili spettrali consentono il confronto con firme di riferimento; le statistiche costituiscono la base dei vettori di caratteristiche per la classificazione; l'analisi per banda rivela gli indici spettrali e la capacità di discriminazione dei materiali.",
            "params": {
              "segments": {
                "label": "Segmenti",
                "description": "Raster delle etichette dei segmenti in ingresso."
              },
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso usati per le caratteristiche spettrali."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV in uscita."
              }
            }
          },
          "object_features_texture_glcm_basic": {
            "name": "Caratteristiche oggetto: tessitura GLCM (base)",
            "description": "Estrae le caratteristiche di tessitura tramite l'analisi della matrice di co-occorrenza dei livelli di grigio (GLCM), calcolata dalle distribuzioni di intensità per banda all'interno di ciascun segmento. La GLCM quantifica la co-occorrenza spaziale dei livelli tonali, generando descrittori quali contrasto (variazione locale), omogeneità (regolarità spaziale), energia (ordine), entropia (disordine) e metriche di dissimilarità che catturano i pattern di tessitura indipendentemente dalla luminosità spettrale complessiva. Le caratteristiche principali comprendono metriche di tessitura basate sulla GLCM che catturano i pattern spaziali locali all'interno dei segmenti, un'analisi multidirezionale (orizzontale, verticale, diagonale) per una caratterizzazione della tessitura indipendente dall'orientamento, l'applicabilità a tutte le bande dell'immagine che consente l'impronta della tessitura, la discriminazione tra superfici testurizzate e lisce e un'analisi computazionalmente gestibile a livello di segmento. I casi d'uso comprendono la classificazione dei materiali basata sulla rugosità superficiale e sulla tessitura (asfalto rispetto a calcestruzzo, distinzione dei tipi di coltura), la caratterizzazione della struttura e della densità forestale tramite la tessitura della chioma, l'interpretazione di immagini SAR e l'analisi della tessitura del tessuto urbano, la discriminazione tra superfici di qualità e superfici degradate, la valutazione della salute delle colture tramite metriche di tessitura della chioma e il rilevamento di nuvole e ombre tramite anomalie di tessitura. Nell'output, un contrasto alto indica una tessitura ruvida/variabile, basso indica superfici lisce; un'omogeneità alta indica pattern spaziali regolari, bassa indica una tessitura caotica; un'energia alta indica una tessitura organizzata, bassa indica rumore casuale; l'entropia quantifica il disordine della tessitura; la dissimilarità cattura l'irregolarità del pattern spaziale; i profili di tessitura consentono una classificazione specifica per materiale; la combinazione con le caratteristiche spettrali migliora la discriminazione dei tipi di oggetto.",
            "params": {
              "segments": {
                "label": "Segmenti",
                "description": "Raster delle etichette dei segmenti in ingresso."
              },
              "input": {
                "label": "Ingresso",
                "description": "Raster di intensità a banda singola per l'analisi della tessitura."
              },
              "levels": {
                "label": "Livelli",
                "description": "Livelli di quantizzazione per la GLCM (default 16)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV in uscita."
              }
            }
          },
          "object_features_topology_relations": {
            "name": "Caratteristiche oggetto: relazioni topologiche",
            "description": "Calcola caratteristiche di topologia del grafo: grado dell'oggetto (numero di vicini), forza del vicino dominante e flag di articolazione. Cattura la posizione strutturale nella rete di oggetti per la classificazione gerarchica.",
            "params": {
              "segments": {
                "label": "Segmenti",
                "description": "Raster delle etichette dei segmenti in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV in uscita."
              }
            }
          },
          "object_uncertainty_diagnostics_pro": {
            "name": "Diagnostica di incertezza degli oggetti (Pro)",
            "description": "Calcola diagnostiche aggregate di incertezza dagli output di probabilità degli oggetti.",
            "params": {
              "probabilities": {
                "label": "Probabilità",
                "description": "CSV delle probabilità in ingresso con colonne di probabilità e incertezza."
              },
              "low_conf_threshold": {
                "label": "Soglia di bassa confidenza",
                "description": "Soglia di bassa confidenza sulla probabilità (default 0.7)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del JSON di diagnostica in uscita."
              }
            }
          },
          "objects_boundary_refinement_pro": {
            "name": "Affinamento dei confini degli oggetti (Pro)",
            "description": "Affina i confini degli oggetti tramite una pulizia iterativa delle regioni piccole con fusione consapevole dei vicini.",
            "params": {
              "segments": {
                "label": "Segmenti",
                "description": "Raster delle etichette dei segmenti in ingresso."
              },
              "iterations": {
                "label": "Iterazioni",
                "description": "Iterazioni di raffinamento (default 2)."
              },
              "min_size": {
                "label": "Dimensione minima",
                "description": "Soglia di dimensione minima degli oggetti (default 6)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster raffinato in uscita."
              }
            }
          },
          "objects_enforce_min_mapping_unit": {
            "name": "Applica unità minima cartografabile agli oggetti",
            "description": "Impone un'unità minima cartografabile fondendo i segmenti di oggetti sottodimensionati.",
            "params": {
              "segments": {
                "label": "Segmenti",
                "description": "Raster delle etichette dei segmenti in ingresso."
              },
              "min_size": {
                "label": "Dimensione minima",
                "description": "Dimensione minima dei segmenti in celle (default 5)."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di fusione: longest, largest, nearest (default longest)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "polygons_to_segments": {
            "name": "Poligoni in segmenti",
            "description": "Rasterizza i poligoni modificati riportandoli nel raster delle etichette dei segmenti, preservando gli ID degli oggetti o i valori degli attributi. Consente flussi di lavoro OBIA iterativi che combinano la segmentazione automatizzata con l'affinamento manuale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale poligonale in ingresso."
              },
              "base": {
                "label": "Base",
                "description": "Raster di base che definisce la griglia di uscita."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numerico opzionale da incidere (default FID)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster dei segmenti in uscita."
              }
            }
          },
          "propagate_labels_across_hierarchy": {
            "name": "Propaga le etichette lungo la gerarchia",
            "description": "Propaga le etichette di classe del livello grossolano agli oggetti figli del livello fine tramite le mappature della gerarchia. Consente un'etichettatura efficiente delle gerarchie annidate e flussi di lavoro di affinamento basati sull'ereditarietà.",
            "params": {
              "hierarchy": {
                "label": "Gerarchia",
                "description": "CSV della gerarchia con fine_segment_id e coarse_segment_id."
              },
              "parent_labels": {
                "label": "Etichette padre",
                "description": "CSV delle etichette padre con coarse_segment_id e class."
              },
              "child_labels": {
                "label": "Etichette figlio",
                "description": "CSV opzionale delle etichette figlio con fine_segment_id e class."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV delle etichette propagate in uscita."
              }
            }
          },
          "segment_graph_felzenszwalb": {
            "name": "Segmentazione a grafo di Felzenszwalb",
            "description": "La segmentazione basata su grafo di Felzenszwalb tratta l'immagine come un grafo non orientato pesato in cui i pixel sono i nodi e gli archi collegano pixel adiacenti con pesi che rappresentano la dissimilarità spettrale. I segmenti si fondono iterativamente confrontando i pesi degli archi all'interno delle componenti con soglie dinamiche; gli archi con pesi inferiori alla soglia si fondono, producendo segmenti con caratteristiche spettrali localmente omogenee. Questo approccio gerarchico produce segmentazioni percettivamente significative, sensibili alle variazioni di contrasto locale e alle discontinuità naturali di colore/tessitura. Caratteristiche principali: segmentazione gerarchica basata su grafo; complessità computazionale efficiente O(n log n); sensibilità alle variazioni di contrasto locale; produzione di segmenti percettivamente significativi; supporto per dati multispettrali/iperspettrali; generazione di regioni di dimensione variabile che preservano i confini naturali. Casi d'uso: segmentazione di immagini multispettrali; mappatura degli habitat naturali; estrazione di elementi urbani; delimitazione della chioma forestale; pre-elaborazione per il rilevamento dei cambiamenti; segmentazione di dati iperspettrali. Interpretazione dell'output: l'output è un raster etichettato; a ciascun pixel è assegnato un ID di segmento. La dimensione dei segmenti varia in modo inversamente proporzionale al contrasto spettrale locale; i confini ad alto contrasto producono segmenti più piccoli e numerosi; le regioni uniformi si fondono in segmenti più grandi. La sensibilità al parametro k (scala della soglia) consente di produrre segmentazioni più grossolane o più fini. I confini dei segmenti corrispondono alle discontinuità spettrali naturali.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "k": {
                "label": "K",
                "description": "Parametro di scala della segmentazione (default 500.0)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Suggerimento di lisciatura opzionale (default 0.8)."
              },
              "min_area": {
                "label": "Area minima",
                "description": "Area minima per la pulizia dopo la fusione (default 20)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster dei segmenti in uscita."
              }
            }
          },
          "segment_multiresolution_hierarchical": {
            "name": "Segmentazione multirisoluzione gerarchica",
            "description": "Genera segmentazioni gerarchiche multiscala (grossolana e fine) con mappature padre-figlio esplicite. Consente l'estrazione di caratteristiche dipendenti dalla scala e flussi di lavoro di classificazione multilivello.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "coarse_k": {
                "label": "K grossolano",
                "description": "Parametro di scala grossolana (default 800)."
              },
              "fine_k": {
                "label": "K fine",
                "description": "Parametro di scala fine (default 250)."
              },
              "output_prefix": {
                "label": "Prefisso di uscita",
                "description": "Prefisso di uscita per i prodotti generati."
              }
            }
          },
          "segment_scale_parameter_optimizer": {
            "name": "Ottimizzatore del parametro di scala della segmentazione",
            "description": "Esplora i parametri di scala di segmentazione candidati per identificare la scala ottimale corrispondente al numero di oggetti desiderato. La selezione automatizzata della scala elimina la regolazione manuale per una qualità di segmentazione coerente.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "candidate_scales": {
                "label": "Scale candidate",
                "description": "Elenco dei valori di scala (k) candidati."
              },
              "target_objects": {
                "label": "Oggetti obiettivo",
                "description": "Numero di oggetti desiderato. Per impostazione predefinita sqrt(total_cells)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del rapporto JSON dell'ottimizzatore."
              }
            }
          },
          "segment_slic_superpixels": {
            "name": "Segmentazione in superpixel SLIC",
            "description": "SLIC (Simple Linear Iterative Clustering) esegue un clustering iterativo dei pixel nello spazio delle caratteristiche 5D che combina le coordinate spaziali e i valori di colore/spettrali, facendo convergere i superpixel verso l'omogeneità locale. L'algoritmo inizializza una griglia regolare di centri dei cluster e assegna i pixel ai centri più vicini, aggiornando iterativamente i centri e riducendo le regioni di ricerca. Ciò produce superpixel compatti e di forma regolare con violazioni minime dei confini rispetto alle alternative watershed o mean-shift, offrendo un'aderenza superiore ai bordi naturali. Caratteristiche principali: produce superpixel uniformi e compatti; computazionalmente efficiente con complessità temporale lineare; il parametro di compattezza configurabile dall'utente bilancia la regolarità spaziale con la coerenza spettrale; superamento minimo dei confini; supporto per immagini multispettrali. Casi d'uso: pre-elaborazione per la classificazione basata su oggetti; analisi gerarchica delle regioni; segmentazione di immagini SAR e ottiche; mappatura urbana; delimitazione della vegetazione; identificazione dei confini di uso del suolo. Interpretazione dell'output: l'output è un raster etichettato in cui i valori dei pixel rappresentano gli ID dei superpixel assegnati. I confini dei superpixel si allineano con i bordi dominanti e le transizioni di colore. Superpixel più piccoli (granularità più alta) catturano dettagli più fini ma aumentano il carico computazionale; superpixel più grandi (granularità più bassa) fondono regioni simili, migliorando l'efficienza. L'accuratezza dei confini dipende dalla regolazione del parametro di compattezza e dalla separazione delle bande multispettrali.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "region_size": {
                "label": "Dimensione della regione",
                "description": "Dimensione obiettivo dei superpixel in pixel (default 20)."
              },
              "compactness": {
                "label": "Compattezza",
                "description": "Controllo della compattezza (default 10.0)."
              },
              "min_area": {
                "label": "Area minima",
                "description": "Area minima per la fusione di pulizia (default derivata da region_size)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster dei segmenti in uscita."
              }
            }
          },
          "segment_watershed_markers": {
            "name": "Segmentazione watershed con marcatori",
            "description": "Segmentazione di tipo watershed guidata da marcatori che separa gli oggetti attorno alle regioni seme dei marcatori identificati. Privilegia la preservazione dei confini controllando al contempo la dimensione dei segmenti per flussi di lavoro OBIA gerarchici.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "gradient_weight": {
                "label": "Peso del gradiente",
                "description": "Controllo dell'enfasi dei confini (default 1.0)."
              },
              "min_area": {
                "label": "Area minima",
                "description": "Dimensione minima dei segmenti (default 12)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster dei segmenti in uscita."
              }
            }
          },
          "segments_merge_small_regions": {
            "name": "Unisci le regioni piccole dei segmenti",
            "description": "La fusione dei segmenti implementa un consolidamento gerarchico tramite l'analisi dell'adiacenza spaziale e criteri di fusione definiti dall'utente. Valuta ciascun segmento sottodimensionato rispetto alle regioni vicine usando soglie di dimensione, misure di similarità spettrale o criteri morfologici personalizzati; fonde progressivamente i segmenti candidati nei vicini assorbenti seguendo code di priorità basate sul costo di fusione, preservando la connettività dei segmenti ed evitando violazioni topologiche. Le caratteristiche principali comprendono la regolarizzazione in post-elaborazione di immagini sovrasegmentate, criteri di fusione configurabili dall'utente (dimensione minima, soglia di similarità spettrale, proprietà morfologiche), la preservazione dell'integrità dei confini dei segmenti durante la fusione, la produzione di mappe di segmenti compatte e semplificate e un affinamento gerarchico senza una risegmentazione completa. I casi d'uso comprendono la pulizia di risultati OBIA sovrasegmentati riducendo frammentazione e rumore, la semplificazione dei segmenti per una maggiore stabilità della classificazione, l'eliminazione di piccoli segmenti spuri dalla segmentazione iniziale, la standardizzazione delle proprietà dei segmenti per un'estrazione uniforme delle caratteristiche a valle e l'affinamento per il controllo di qualità delle gerarchie di segmentazione multiscala. L'output presenta un numero ridotto di segmenti che riflette il consolidamento; i segmenti fusi ereditano le statistiche spettrali dalle componenti assorbite; i confini diventano più lisci e meno complessi; le regioni fuse mantengono l'integrità spaziale ma presentano un'eterogeneità spettrale interna leggermente maggiore; l'output è ottimizzato per la classificazione a valle e per la stabilità delle caratteristiche.",
            "params": {
              "segments": {
                "label": "Segmenti",
                "description": "Raster delle etichette dei segmenti in ingresso."
              },
              "min_size": {
                "label": "Dimensione minima",
                "description": "Dimensione minima dei segmenti in celle (default 5)."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di fusione: longest, largest, nearest (default longest)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "segments_split_low_cohesion": {
            "name": "Dividi i segmenti a bassa coesione",
            "description": "Risegmenta gli oggetti esistenti a bassa coesione usando impostazioni di scala più fini per migliorare l'omogeneità spettrale. Affinamento adattivo per le zone problematiche senza influire sugli oggetti ben formati.",
            "params": {
              "segments": {
                "label": "Segmenti",
                "description": "Raster dei segmenti esistenti."
              },
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster in ingresso usati per la ri-segmentazione."
              },
              "split_scale": {
                "label": "Scala di divisione",
                "description": "Parametro di scala di divisione più fine (default 120)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "segments_to_polygons": {
            "name": "Segmenti in poligoni",
            "description": "Converte le etichette dei segmenti raster in poligoni vettoriali per la modifica interattiva, il controllo di qualità e l'integrazione GIS. Consente una transizione fluida tra le rappresentazioni OBIA raster e vettoriali.",
            "params": {
              "segments": {
                "label": "Segmenti",
                "description": "Raster dei segmenti in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita."
              }
            }
          },
          "evaluate_training_sites": {
            "name": "Valuta le aree di addestramento",
            "description": "Valuta la separabilità delle classi in poligoni di addestramento multibanda e scrive un report HTML con statistiche di distribuzione per banda.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso (uno per banda spettrale), come percorsi o stringa delimitata."
              },
              "training_data": {
                "label": "Dati di addestramento",
                "description": "Percorso dei dati di addestramento poligonali."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Nome del campo classe negli attributi di training_data."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del file HTML in uscita."
              }
            }
          },
          "fuzzy_knn_classification": {
            "name": "Classificazione KNN fuzzy",
            "description": "Esegue una classificazione fuzzy k-nearest-neighbor e produce in uscita la confidenza di appartenenza alle classi.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dati di addestramento",
                "description": "Percorso dei dati di addestramento vettoriali puntuali/poligonali."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Campo classe negli attributi di training_data."
              },
              "scaling": {
                "label": "Ridimensionamento",
                "description": "Modalità di ridimensionamento delle caratteristiche: none (default), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Numero di vicini (default 5)."
              },
              "m": {
                "label": "M",
                "description": "Parametro dell'esponente fuzzy (> 1; default 2.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster classificato in uscita."
              },
              "probability_output": {
                "label": "Uscita delle probabilità",
                "description": "Percorso opzionale del raster delle probabilità di appartenenza."
              }
            }
          },
          "generalize_classified_raster": {
            "name": "Generalizza raster classificato",
            "description": "Generalize Classified Raster semplifica le mappe di classificazione rimuovendo le piccole macchie isolate tramite un filtraggio iterativo della moda, fondendo le componenti frammentate di uno o più pixel nelle classi vicine spazialmente dominanti. Algoritmo: applica un filtro morfologico della moda che preserva la classe dominante all'interno di finestre mobili, rimuove o consolida i pixel isolati dal contesto spaziale, affina iterativamente la classificazione tramite l'analisi delle componenti connesse e assorbe le classi minori nelle classi vicine dominanti. La dimensione della finestra e la dimensione minima delle macchie configurabili controllano l'intensità della generalizzazione. Caratteristiche principali: riduce la frammentazione della classificazione, migliora la coerenza spaziale, elimina le macchie isolate indotte dal rumore, mantiene i confini delle classi tramite un filtraggio selettivo, elaborazione delle componenti connesse computazionalmente efficiente. Funzionalità: intensità di generalizzazione variabile, preservazione delle grandi macchie contigue, applicazione a dati indicizzati o categoriali. Casi d'uso: affinamento post-classificazione che rimuove l'effetto sale e pepe, consolidamento di risultati di classificazione frammentati, preparazione dei prodotti di classificazione finali, generalizzazione a una specifica unità minima cartografabile. Applicazioni: finalizzazione delle mappe di copertura del suolo, eliminazione di classificazioni spurie di singoli pixel, miglioramento della continuità spaziale della classificazione. Interpretazione dell'output: una ridotta frammentazione delle classi indica una rimozione efficace del rumore puntiforme; i confini preservati rivelano parametri di generalizzazione appropriati; una generalizzazione eccessiva indica parametri di finestra sovradimensionati; il miglioramento della coerenza spaziale suggerisce che il rumore della classificazione era costituito principalmente da artefatti di singoli pixel.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster classificato in ingresso o oggetto raster tipizzato."
              },
              "min_size": {
                "label": "Dimensione minima",
                "description": "Dimensione minima delle caratteristiche in celle; le patch più piccole vengono riassegnate (default 5)."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di generalizzazione: 'longest' (default), 'largest' o 'nearest'."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "generalize_with_similarity": {
            "name": "Generalizza per similarità",
            "description": "Generalizza le piccole macchie di un raster classificato fondendole con la macchia vicina spettralmente più simile.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster classificato in ingresso."
              },
              "similarity": {
                "label": "Similarità",
                "description": "Array di raster di similarità usati per calcolare la similarità del centro delle caratteristiche."
              },
              "min_size": {
                "label": "Dimensione minima",
                "description": "Dimensione minima delle caratteristiche in pixel; le caratteristiche più piccole vengono fuse (default 5)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "k_means_clustering": {
            "name": "Clustering K-medie",
            "description": "Il clustering K-means esegue una classificazione spettrale non supervisionata suddividendo iterativamente i pixel in K cluster spettrali, minimizzando la varianza intra-cluster e individuando raggruppamenti spettrali naturali nelle immagini multispettrali senza campioni di addestramento né definizioni di classe a priori. L'algoritmo inizializza K centri dei cluster casuali, assegna iterativamente i pixel ai centri più vicini e ricalcola i centri come medie dei cluster fino alla convergenza, producendo in uscita le assegnazioni finali ai cluster e i centri. K-means è computazionalmente efficiente, scalabile a grandi stack multispettrali e individua pattern spettrali basati sui dati, utili per l'analisi esplorativa e l'identificazione delle classi naturali. Le caratteristiche principali comprendono un numero di cluster K specificato dall'utente che consente compromessi flessibili tra dettaglio spettrale e interpretabilità dell'output, criteri di convergenza con limiti di iterazione e soglie di spostamento dei centri configurabili, un controllo opzionale del seme casuale che garantisce un clustering riproducibile per test e validazione e una parallelizzazione efficiente per gestire immagini di grandi dimensioni. Le applicazioni spaziano dalla classificazione non supervisionata della copertura del suolo che individua classi spettrali naturali, al rilevamento di anomalie che identifica pixel spettralmente insoliti, alla segmentazione delle immagini per una successiva classificazione supervisionata e all'analisi spettrale esplorativa che rivela i pattern spettrali dominanti. L'output di K-means identifica i raggruppamenti spettrali naturali. L'output produce un raster di appartenenza ai cluster con interi da 0 a K-1, un file dei centri dei cluster con lo spettro medio per cluster e una varianza intra-cluster opzionale che ne quantifica la compattezza; la sovrapposizione delle classi dei cluster su composizioni a colori naturali rivela i pattern spaziali e la continuità dei cluster.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Elenco dei raster in ingresso come array di percorsi o stringa delimitata da virgole/punti e virgola."
              },
              "classes": {
                "label": "Classi",
                "description": "Numero di classi obiettivo (k)."
              },
              "max_iterations": {
                "label": "Iterazioni massime",
                "description": "Numero massimo di iterazioni (default 10)."
              },
              "class_change": {
                "label": "Cambio di classe",
                "description": "Si ferma quando la percentuale di celle valide cambiate scende sotto questa soglia (default 2.0)."
              },
              "initialize": {
                "label": "Inizializzazione",
                "description": "Strategia di inizializzazione dei centroidi: 'diagonal' (default) o 'random'."
              },
              "min_class_size": {
                "label": "Dimensione minima della classe",
                "description": "Dimensione minima della classe usata nell'aggiornamento dei centroidi (default 10)."
              },
              "out_html": {
                "label": "HTML in uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster delle classi in uscita. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "knn_classification": {
            "name": "Classificazione KNN",
            "description": "La classificazione K-nearest neighbors assegna i pixel alle classi in base al voto a maggioranza tra i K campioni di addestramento più vicini nello spazio spettrale, consentendo una classificazione non lineare flessibile senza un addestramento esplicito del modello. KNN calcola le distanze (euclidea, angolo spettrale o di Mahalanobis) da ciascun pixel dell'immagine a tutti i campioni di addestramento, identifica i K campioni di addestramento più vicini, applica un voto a maggioranza pesato o non pesato per determinare la classe e restituisce l'etichetta di classe e, facoltativamente, un punteggio di confidenza. KNN eccelle con dati di addestramento limitati, confini di classe fortemente non lineari e distribuzioni spettrali delle classi eterogenee, dove i modelli parametrici hanno difficoltà. Le caratteristiche principali comprendono metriche di distanza selezionabili (euclidea, angolo spettrale, Mahalanobis) adatte a diverse caratteristiche spettrali e strutture di correlazione, valori di K specificati dall'utente che consentono compromessi tra accuratezza e complessità, opzioni di voto pesato che privilegiano i campioni vicini e soglie di confidenza opzionali che consentono di rifiutare le classificazioni ambigue. Le applicazioni comprendono la classificazione di telerilevamento ad alta accuratezza con campioni di addestramento raccolti sul campo, la classificazione con pochi campioni quando la verità a terra è limitata, la classificazione di terreni difficili con firme spettrali molto variabili e la classificazione consapevole della confidenza che rifiuta le decisioni al limite. La classificazione KNN consente risultati ad alta accuratezza con dati di addestramento flessibili. L'output comprende un raster delle etichette di classe con ID di classe interi corrispondenti alle etichette dei campioni di addestramento, un raster di confidenza opzionale che registra le percentuali di voto o punteggi di confidenza pesati per la distanza, e un'accuratezza di classificazione che può superare quella di altri metodi con una scelta ottimale di K e campioni di addestramento sufficienti.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dati di addestramento",
                "description": "Percorso dei dati di addestramento vettoriali puntuali/poligonali."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Campo classe negli attributi di training_data."
              },
              "scaling": {
                "label": "Ridimensionamento",
                "description": "Modalità di ridimensionamento delle caratteristiche: none (default), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Numero di vicini (default 5)."
              },
              "clip": {
                "label": "Ritaglia",
                "description": "Se true, rimuove i campioni di addestramento classificati erroneamente con un pre-passaggio leave-one-out."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "knn_regression": {
            "name": "Regressione KNN",
            "description": "Esegue una regressione supervisionata k-nearest-neighbor su raster multibanda in ingresso.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dati di addestramento",
                "description": "Percorso dei dati di addestramento vettoriali puntuali."
              },
              "field": {
                "label": "Campo",
                "description": "Campo obiettivo numerico negli attributi di training_data."
              },
              "scaling": {
                "label": "Ridimensionamento",
                "description": "Modalità di ridimensionamento delle caratteristiche: none (default), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Numero di vicini (default 5)."
              },
              "distance_weighted": {
                "label": "Ponderato per distanza",
                "description": "Se true, usa la media ponderata per distanza inversa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "logistic_regression": {
            "name": "Regressione logistica",
            "description": "Esegue una classificazione supervisionata con regressione logistica su raster multibanda in ingresso.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dati di addestramento",
                "description": "Percorso dei dati di addestramento vettoriali puntuali/poligonali."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Campo classe negli attributi di training_data."
              },
              "scaling": {
                "label": "Ridimensionamento",
                "description": "Modalità di ridimensionamento delle caratteristiche: none (default), normalize, standardize."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Peso della regolarizzazione L2 (default 0.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "min_dist_classification": {
            "name": "Classificazione a distanza minima",
            "description": "Esegue una classificazione supervisionata a distanza minima su raster multispettrali usando dati di addestramento poligonali.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso (uno per banda spettrale), come percorsi o stringa delimitata."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dati di addestramento",
                "description": "Percorso di un file vettoriale poligonale contenente le aree di addestramento."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Nome del campo attributo nei dati di addestramento che contiene l'identificatore di classe."
              },
              "dist_threshold": {
                "label": "Soglia di distanza",
                "description": "Soglia z-score opzionale; i pixel più distanti di questo valore dalla media di classe più vicina restano non classificati. Default: nessuna soglia (classifica tutto)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "modified_k_means_clustering": {
            "name": "Clustering K-medie modificato",
            "description": "Il clustering K-means modificato migliora il K-means standard con una pre-elaborazione spettrale, una selezione adattiva automatizzata di K e criteri di convergenza avanzati per una classificazione multispettrale non supervisionata più robusta e accurata. L'algoritmo applica una pre-elaborazione opzionale che comprende la standardizzazione spettrale per rimuovere gli effetti di scala, la trasformazione in componenti principali che enfatizza le direzioni di varianza dominanti e il filtraggio del rumore che rimuove le variazioni spettrali spurie. La selezione adattiva di K usa il metodo del gomito o l'analisi della silhouette per individuare automaticamente il numero ottimale di cluster, anziché richiederne la specifica manuale. Le caratteristiche principali comprendono una pre-elaborazione spettrale che riduce la sensibilità alla scala ed enfatizza le direzioni dominanti di variazione spettrale, una selezione automatizzata di K che individua oggettivamente il numero ottimale di cluster, criteri di convergenza avanzati che includono soglie di spostamento relativo dei centri e metriche di similarità dell'angolo spettrale, e una post-elaborazione opzionale che fonde i cluster simili o suddivide i cluster diffusi. Le applicazioni comprendono una classificazione esplorativa migliorata della copertura del suolo che gestisce automaticamente le scale spettrali, un rilevamento robusto delle anomalie che separa il segnale dal rumore tramite la pre-elaborazione, una segmentazione adattiva delle immagini che individua automaticamente livelli di dettaglio appropriati e l'integrazione multisensore che normalizza le scale spettrali di sensori diversi. L'output del K-means modificato rivela classi spettrali naturali robuste. L'output produce un raster ottimizzato di appartenenza ai cluster con un numero di classi determinato automaticamente, i centri dei cluster con le trasformazioni di pre-elaborazione documentate e statistiche diagnostiche che quantificano la qualità, la separazione e la convergenza dei cluster; le raccomandazioni della selezione adattiva di K orientano i compromessi tra interpretabilità e dettaglio.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Elenco dei raster in ingresso come array di percorsi o stringa delimitata da virgole/punti e virgola."
              },
              "start_clusters": {
                "label": "Cluster iniziali",
                "description": "Numero iniziale di cluster prima della fusione (default 1000)."
              },
              "merge_dist": {
                "label": "Distanza di fusione",
                "description": "Soglia di distanza per la fusione dei cluster (euclidea)."
              },
              "max_iterations": {
                "label": "Iterazioni massime",
                "description": "Numero massimo di iterazioni (default 10)."
              },
              "class_change": {
                "label": "Cambio di classe",
                "description": "Si ferma quando la percentuale di celle valide cambiate scende sotto questa soglia (default 2.0)."
              },
              "out_html": {
                "label": "HTML in uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster delle classi in uscita. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "nnd_classification": {
            "name": "Classificazione NND",
            "description": "Esegue una classificazione per distanza normalizzata più vicina con rifiuto opzionale dei valori anomali.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dati di addestramento",
                "description": "Percorso dei dati di addestramento vettoriali puntuali/poligonali."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Campo classe negli attributi di training_data."
              },
              "scaling": {
                "label": "Ridimensionamento",
                "description": "Modalità di ridimensionamento delle caratteristiche: none (default), normalize, standardize."
              },
              "z_threshold": {
                "label": "Soglia Z",
                "description": "Massimo z-score di distanza normalizzata accettato prima della segnalazione come valore anomalo (default 1.96)."
              },
              "outlier_is_zero": {
                "label": "Valori anomali a zero",
                "description": "Se true, ai valori anomali viene assegnato il valore di classe 0; altrimenti nodata."
              },
              "k": {
                "label": "K",
                "description": "Dimensione dell'intorno per la stima della distanza di classe (default 25)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "otsu_thresholding": {
            "name": "Sogliatura di Otsu",
            "description": "Otsu Thresholding è un metodo automatico di segmentazione delle immagini che determina il valore di soglia globale ottimale massimizzando la varianza tra le classi negli istogrammi di intensità dei pixel. Algoritmo: esamina l'istogramma di un'immagine in scala di grigi o a banda singola, verifica iterativamente tutti i possibili valori di soglia, calcola la varianza tra le classi per ciascuna soglia e seleziona il valore che massimizza la separazione della varianza tra le classi di primo piano e di sfondo. Non parametrico, non richiede la specifica manuale della soglia. Caratteristiche principali: determinazione della soglia completamente automatica, robusto alle variazioni di illuminazione, l'approccio basato sull'istogramma consente un calcolo rapido, nessun parametro esterno, fornisce un'unica soglia globale. Funzionalità: segmentazione binaria, ottimizzazione di istogrammi unimodali e bimodali, gestione di immagini con gamma dinamica ristretta o ad alto contrasto. Casi d'uso: segmentazione automatica delle immagini senza intervento dell'utente, binarizzazione di documenti, estrazione dei corpi idrici, rilevamento delle nuvole nelle immagini satellitari, mappatura di ghiaccio/neve. Applicazioni: pre-elaborazione per il rilevamento dei cambiamenti, semplice classificazione della copertura del suolo, generazione di maschere dell'acqua, segmentazione preliminare prima di una classificazione avanzata. Interpretazione dell'output: i pixel al di sotto della soglia sono classificati in una classe, quelli al di sopra in un'altra; la bimodalità dell'istogramma indica la qualità della separazione; istogrammi poco separati indicano l'inadeguatezza per la classificazione binaria; misure statistiche come la varianza tra le classi e l'uniformità indicano la qualità della segmentazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "parallelepiped_classification": {
            "name": "Classificazione a parallelepipedi",
            "description": "Esegue una classificazione supervisionata a parallelepipedo su raster multispettrali usando dati di addestramento poligonali.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso (uno per banda spettrale), come percorsi o stringa delimitata."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dati di addestramento",
                "description": "Percorso di un file vettoriale poligonale contenente le aree di addestramento."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Nome del campo attributo nei dati di addestramento che contiene l'identificatore di classe."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "random_forest_classification": {
            "name": "Classificazione con random forest",
            "description": "La classificazione Random Forest assegna le etichette tramite un ensemble di alberi decisionali addestrati su campioni bootstrap con sottoinsiemi di caratteristiche randomizzati. Ciascun albero cresce in modo indipendente senza potatura, catturando relazioni non lineari complesse e interazioni tra le caratteristiche. La classificazione aggrega i voti di solito su 100-1000 alberi; la classe finale è quella del voto a maggioranza. L'addestramento bootstrap e la selezione casuale delle caratteristiche riducono il sovradattamento catturando al contempo pattern ad alta dimensionalità. L'importanza delle caratteristiche può essere calcolata dalle variazioni dell'errore out-of-bag, identificando le bande spettrali diagnostiche o le caratteristiche derivate più rilevanti per la classificazione. Le caratteristiche principali comprendono una classifica dell'importanza delle variabili che identifica le caratteristiche chiave per la classificazione, la confidenza della classificazione per pixel derivata dal consenso dei voti tra gli alberi dell'ensemble, la gestione automatica di dati iperspettrali ad alta dimensionalità, la robustezza a valori anomali spettrali e al rumore e un addestramento e una previsione parallelizzabili. Lo strumento elabora in modo efficiente problemi multiclasse con insiemi di addestramento sbilanciati. Le applicazioni comprendono la classificazione della copertura del suolo da dati multispettrali e iperspettrali, il rilevamento dei cambiamenti che identifica transizioni spettrali tra mappe, la classificazione dei tipi di coltura da immagini satellitari multitemporali, la classificazione dei materiali urbani che distingue tipi di edifici e superfici e il rilevamento di anomalie che identifica valori anomali spettrali. Le random forest raggiungono costantemente un'elevata accuratezza nelle applicazioni di telerilevamento con dati di addestramento relativamente modesti. Interpretazione dell'output: il conteggio dei voti fornisce la confidenza della classificazione; voti unanimi o a forte maggioranza (>80%) indicano classificazioni affidabili, mentre margini ristretti suggeriscono ambiguità dovute a pixel misti. Le classifiche di importanza delle caratteristiche identificano le bande spettrali o gli indici derivati più diagnostici per la classificazione. L'errore out-of-bag stima le prestazioni di generalizzazione senza una validazione su dati esclusi. Le interazioni tra caratteristiche sono implicite; un'elevata accuratezza ottenuta da particolari combinazioni di bande suggerisce relazioni spettrali non lineari.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dati di addestramento",
                "description": "Percorso dei dati di addestramento vettoriali puntuali/poligonali."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Campo classe negli attributi di training_data."
              },
              "scaling": {
                "label": "Ridimensionamento",
                "description": "Modalità di ridimensionamento delle caratteristiche: none (default), normalize, standardize."
              },
              "n_trees": {
                "label": "Numero di alberi",
                "description": "Numero di alberi nella foresta (default 200)."
              },
              "min_samples_leaf": {
                "label": "Campioni minimi per foglia",
                "description": "Numero minimo di campioni richiesti in un nodo foglia (default 1)."
              },
              "min_samples_split": {
                "label": "Campioni minimi per divisione",
                "description": "Numero minimo di campioni richiesti per dividere un nodo interno (default 2)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "random_forest_regression": {
            "name": "Regressione con random forest",
            "description": "Esegue una regressione supervisionata random forest su raster multibanda in ingresso.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dati di addestramento",
                "description": "Percorso dei dati di addestramento vettoriali puntuali."
              },
              "field": {
                "label": "Campo",
                "description": "Campo obiettivo numerico negli attributi di training_data."
              },
              "scaling": {
                "label": "Ridimensionamento",
                "description": "Modalità di ridimensionamento delle caratteristiche: none (default), normalize, standardize."
              },
              "n_trees": {
                "label": "Numero di alberi",
                "description": "Numero di alberi nella foresta (default 200)."
              },
              "min_samples_leaf": {
                "label": "Campioni minimi per foglia",
                "description": "Numero minimo di campioni richiesti in un nodo foglia (default 1)."
              },
              "min_samples_split": {
                "label": "Campioni minimi per divisione",
                "description": "Numero minimo di campioni richiesti per dividere un nodo interno (default 2)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "svm_classification": {
            "name": "Classificazione SVM",
            "description": "La classificazione Support Vector Machine (SVM) applica algoritmi di machine learning Support Vector Machine ai dati di telerilevamento multispettrali, separando le classi di addestramento tramite il posizionamento ottimale di un iperpiano nello spazio delle caratteristiche spettrali ad alta dimensionalità. Algoritmo: trasforma i vettori di caratteristiche spettrali in uno spazio ad alta dimensionalità tramite funzioni kernel (lineare, RBF, polinomiale), identifica l'iperpiano a margine massimo che separa le classi di addestramento e classifica i nuovi pixel in base alla posizione rispetto all'iperpiano; i parametri di tolleranza e la scelta del kernel controllano la generalizzazione. Gestisce efficacemente la separazione non lineare delle classi. Caratteristiche principali: robusto con dati spettrali ad alta dimensionalità, eccellente generalizzazione con campioni di addestramento limitati, la flessibilità del kernel si adatta a distribuzioni spettrali diverse, fornisce stime di probabilità/confidenza. Funzionalità: classificazione multiclasse, tolleranza a margine morbido, bilanciamento automatico dei pesi delle classi. Casi d'uso: classificazione dettagliata del territorio con dati di addestramento scarsi, integrazione di caratteristiche spettrali-spaziali, rilevamento dei cambiamenti, agricoltura di precisione, mappatura urbana. Applicazioni: classificazione di immagini iperspettrali, mappatura di ecosistemi complessi, delimitazione dei tipi di coltura, classificazione delle infrastrutture. Interpretazione dell'output: l'appartenenza alle classi indica la categoria prevista e la coerenza spaziale rivela la qualità della classificazione; le stime di probabilità quantificano la confidenza a livello di pixel; gli schemi di errata classificazione indicano carenze dei dati di addestramento o problemi di sovrapposizione spettrale.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dati di addestramento",
                "description": "Percorso dei dati di addestramento vettoriali puntuali/poligonali."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Campo classe negli attributi di training_data."
              },
              "scaling": {
                "label": "Ridimensionamento",
                "description": "Modalità di ridimensionamento delle caratteristiche: none (default), normalize, standardize."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Tipo di kernel: linear (default) o rbf."
              },
              "c": {
                "label": "C",
                "description": "Parametro di regolarizzazione SVM (default 1.0)."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Gamma del kernel RBF; per impostazione predefinita 1 / numero di caratteristiche."
              },
              "epoch": {
                "label": "Epoche",
                "description": "Numero di epoche di addestramento (default 2)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "svm_regression": {
            "name": "Regressione SVM",
            "description": "Esegue una regressione supervisionata support-vector-machine su raster multibanda in ingresso.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dati di addestramento",
                "description": "Percorso dei dati di addestramento vettoriali puntuali."
              },
              "field": {
                "label": "Campo",
                "description": "Campo obiettivo numerico negli attributi di training_data."
              },
              "scaling": {
                "label": "Ridimensionamento",
                "description": "Modalità di ridimensionamento delle caratteristiche: none (default), normalize, standardize."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Tipo di kernel: linear (default) o rbf."
              },
              "c": {
                "label": "C",
                "description": "Parametro di regolarizzazione SVM (default 1.0)."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Gamma del kernel RBF; per impostazione predefinita 1 / numero di caratteristiche."
              },
              "eps": {
                "label": "Epsilon",
                "description": "Ampiezza della perdita insensibile a epsilon (default 0.1)."
              },
              "tol": {
                "label": "Tolleranza",
                "description": "Tolleranza dell'ottimizzatore (default 1e-3)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "change_vector_analysis": {
            "name": "Analisi del vettore di cambiamento",
            "description": "Esegue un'analisi dei vettori di cambiamento su dataset multispettrali di due date e restituisce raster di magnitudo e di direzione.",
            "params": {
              "date1": {
                "label": "Data 1",
                "description": "Elenco dei raster della data precedente come array di percorsi o stringa delimitata da virgole/punti e virgola."
              },
              "date2": {
                "label": "Data 2",
                "description": "Elenco dei raster della data successiva come array di percorsi o stringa delimitata da virgole/punti e virgola."
              },
              "magnitude_output": {
                "label": "Uscita della magnitudine",
                "description": "Percorso di uscita opzionale per il raster della magnitudine del vettore."
              },
              "direction_output": {
                "label": "Uscita della direzione",
                "description": "Percorso di uscita opzionale per il raster dei codici di direzione."
              }
            }
          },
          "image_difference_change_detection": {
            "name": "Rilevamento dei cambiamenti per differenza di immagini",
            "description": "Il rilevamento dei cambiamenti per differenza di immagini identifica i cambiamenti della copertura del suolo calcolando le differenze multispettrali pixel per pixel tra acquisizioni satellitari multitemporali co-registrate, evidenziando le aree in cui le firme spettrali sono cambiate abbastanza da superare la variazione statistica di fondo. L'algoritmo co-registra le immagini su griglie di pixel comuni, calcola le differenze nelle bande selezionate o negli indici di vegetazione (ad es. differenza di NDVI), applica una sogliatura statistica basata sulla differenza assoluta media e su intervalli di confidenza per distinguere il cambiamento dal rumore e produce in uscita maschere di cambiamento binarie o raster continui della magnitudo della differenza. La differenza di immagini è computazionalmente semplice, interpretabile ed efficace per rilevare cambiamenti importanti della vegetazione, dello sviluppo urbano o dei corpi idrici. Le caratteristiche principali comprendono una selezione flessibile delle bande che consente un rilevamento mirato dei cambiamenti in domini spettrali specifici, una sogliatura statistica con livelli di confidenza automatici o manuali, una pre-elaborazione opzionale (normalizzazione, calcolo di indici) che migliora il rapporto segnale/rumore del cambiamento e un'elaborazione rapida che consente il rilevamento dei cambiamenti su larga scala. Le applicazioni comprendono la mappatura della deforestazione e il monitoraggio della perdita di foreste, il monitoraggio dell'espansione urbana da serie temporali satellitari multispettrali, la mappatura delle alluvioni prima/dopo l'evento da dati SAR o ottici e il rilevamento dei cambiamenti agricoli che traccia le transizioni delle colture. L'output della differenza di immagini evidenzia le aree di cambiamento. L'output comprende un raster della maschera di cambiamento (binario cambiamento/nessun cambiamento) con soglie configurabili, un raster continuo della magnitudo della differenza che quantifica l'intensità del cambiamento e un raster opzionale delle classi di cambiamento che distingue il tipo di cambiamento (aumento, diminuzione); l'aggregazione temporale consente di tracciare i cambiamenti su periodi pluriennali.",
            "params": {
              "t1_inputs": {
                "label": "Ingressi T1",
                "description": "Array di percorsi dei raster della data 1."
              },
              "t2_inputs": {
                "label": "Ingressi T2",
                "description": "Array di percorsi dei raster della data 2; deve corrispondere a t1_inputs per lunghezza e ordine."
              },
              "mode": {
                "label": "Modalità",
                "description": "Modalità di differenza: magnitude (default) o signed."
              },
              "threshold_sigma": {
                "label": "Sigma di soglia",
                "description": "Soglia sigma opzionale per la generazione della maschera binaria di cambiamento."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta i raster della pila per corrispondere a t1_inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita per l'immagine delle differenze."
              },
              "output_absolute": {
                "label": "Uscita in valore assoluto",
                "description": "Percorso opzionale del raster in uscita per la differenza con segno in valore assoluto (|mean(t2-t1)|)."
              },
              "output_signed": {
                "label": "Uscita con segno",
                "description": "Percorso opzionale del raster in uscita per la differenza con segno mean(t2-t1)."
              },
              "output_mask": {
                "label": "Maschera in uscita",
                "description": "Percorso opzionale del raster in uscita per la maschera binaria di cambiamento con soglia."
              }
            }
          },
          "pca_based_change_detection": {
            "name": "Rilevamento dei cambiamenti basato su PCA",
            "description": "Il rilevamento dei cambiamenti tramite analisi delle componenti principali identifica i cambiamenti della copertura del suolo calcolando le componenti principali da dati spettrali multitemporali impilati, in cui le prime componenti catturano i pattern comuni nel tempo e le componenti successive isolano i cambiamenti temporali. L'algoritmo impila i dati multispettrali multitemporali (co-registrati su una griglia comune), calcola la PCA trasformandoli in componenti spettro-temporali ortogonali non correlate, interpreta le PC successive come sensibili al cambiamento e applica una sogliatura statistica ai loadings/score delle PC per il rilevamento dei cambiamenti. Il rilevamento basato sulla PCA eccelle quando i segnali di cambiamento sono spettralmente sottili, perché la PCA massimizza la varianza e separa i pattern spettrali temporalmente coerenti (prime PC) dalla variazione temporale (PC successive). Le caratteristiche principali comprendono la fusione di dati multidata che gestisce un numero variabile di immagini e i requisiti di co-registrazione, la massimizzazione automatica della varianza che enfatizza i pattern spettro-temporali importanti, statistiche multivariate che migliorano la discriminazione dei cambiamenti rispetto alla differenza univariata e un filtraggio spaziale opzionale che riduce il rumore dei pixel. Le applicazioni comprendono il rilevamento di lievi stress della vegetazione prima che siano riconoscibili visivamente, il rilevamento multispettrale dei cambiamenti urbani che traccia lo sviluppo nel corso di decenni, la valutazione dell'impatto dei disastri naturali tramite una rapida mappatura dei danni e il monitoraggio ambientale che rileva le transizioni di stato degli ecosistemi. L'output del rilevamento basato sulla PCA distingue i pattern temporali. L'output comprende immagini delle componenti principali con loadings spettro-temporali interpretabili, un raster di probabilità del cambiamento derivato dagli score delle componenti successive e una classificazione opzionale dei cambiamenti che distingue i tipi di cambiamento; i pattern spaziali delle PC consentono un riconoscimento visivo dei pattern che integra il rilevamento statistico.",
            "params": {
              "t1_inputs": {
                "label": "Ingressi T1",
                "description": "Array di percorsi dei raster della data 1."
              },
              "t2_inputs": {
                "label": "Ingressi T2",
                "description": "Array di percorsi dei raster della data 2; deve corrispondere a t1_inputs per lunghezza e ordine."
              },
              "component": {
                "label": "Componente",
                "description": "Indice (a base 1) della componente principale da emettere (default 1)."
              },
              "standardized": {
                "label": "Standardizzato",
                "description": "Se true, usa la PCA sulla matrice di correlazione dei vettori di cambiamento (default false)."
              },
              "threshold_sigma": {
                "label": "Sigma di soglia",
                "description": "Soglia sigma opzionale sul punteggio PC in valore assoluto per l'uscita della maschera binaria."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta i raster della pila per corrispondere a t1_inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita per il punteggio PC selezionato in valore assoluto."
              },
              "output_mask": {
                "label": "Maschera in uscita",
                "description": "Percorso opzionale del raster in uscita per la maschera binaria con soglia (0/1)."
              },
              "output_report": {
                "label": "Rapporto in uscita",
                "description": "Percorso opzionale del rapporto JSON in uscita per autovalori, varianza spiegata e loading delle componenti."
              }
            }
          },
          "post_classification_change": {
            "name": "Cambiamento post-classificazione",
            "description": "Il rilevamento dei cambiamenti post-classificazione quantifica le transizioni di copertura/uso del suolo (LULC) confrontando direttamente mappe classificate in modo indipendente relative a periodi diversi. I confronti delle classi pixel per pixel identificano le transizioni indicando le classi \"da\" e \"a\". Le matrici di tabulazione incrociata (matrici di confusione) quantificano le frequenze delle transizioni, rivelando i percorsi di cambiamento dominanti. Il metodo richiede schemi di classificazione coerenti tra le date; l'accuratezza dipende dalla qualità della classificazione a ciascun passo temporale. Caratteristiche principali: mappatura diretta delle transizioni da classe a classe; indipendenza delle singole classificazioni; possibilità di combinare sensori eterogenei; quantificazione delle frequenze delle transizioni; identificazione degli hotspot di cambiamento. Casi d'uso: monitoraggio della deforestazione; mappatura della crescita urbana; monitoraggio dell'uso del suolo agricolo; rilevamento della perdita di zone umide; valutazione della frammentazione degli habitat. Interpretazione dell'output: le matrici di transizione mostrano sulla diagonale i valori di assenza di cambiamento e fuori diagonale le frequenze delle transizioni. Le mappe dei cambiamenti evidenziano i pixel modificati; l'output con codifica delle transizioni codifica sia la classe di origine sia quella di destinazione, consentendone l'interpretazione. Un'elevata accuratezza richiede classificazioni di qualità; gli errori di classificazione in una delle due date si propagano in errori di rilevamento dei cambiamenti. L'aggregazione delle transizioni rivela i pattern dominanti (ad es. foresta→agricoltura, prateria→urbano). Le transizioni sub-pixel non possono essere rilevate con il metodo post-classificazione; i cambiamenti a scala fine possono non essere individuati.",
            "params": {
              "t1_classified": {
                "label": "T1 classificato",
                "description": "Percorso del raster classificato della data 1."
              },
              "t2_classified": {
                "label": "T2 classificato",
                "description": "Percorso del raster classificato della data 2."
              },
              "transition_scale": {
                "label": "Scala di transizione",
                "description": "Fattore di scala per la codifica delle transizioni (default 1000): code = class1 * scale + class2."
              },
              "t1_class_remap": {
                "label": "Rimappatura classi T1",
                "description": "Tabella opzionale di rimappatura per le classi della data 1 come oggetto {\"old\": new, ...}."
              },
              "t2_class_remap": {
                "label": "Rimappatura classi T2",
                "description": "Tabella opzionale di rimappatura per le classi della data 2 come oggetto {\"old\": new, ...}."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta t2_classified nel CRS di t1_classified quando necessario."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster con codifica delle transizioni in uscita."
              }
            }
          },
          "write_function_memory_insertion": {
            "name": "Inserimento in memoria della funzione di scrittura",
            "description": "Crea un composito RGB compatto di visualizzazione dei cambiamenti a partire da due o tre date a banda singola.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Raster a banda singola della prima data."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Raster a banda singola della seconda data."
              },
              "input3": {
                "label": "Ingresso 3",
                "description": "Raster opzionale a banda singola della terza data; se omesso, input2 è usato per il canale blu."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "brdf_normalization": {
            "name": "Normalizzazione BRDF",
            "description": "Normalizzazione BRDF di una singola scena con l'approccio C-correction o Minnaert, usando la geometria di pendenza/esposizione del DEM.",
            "params": {
              "input_raster": {
                "label": "Raster in ingresso",
                "description": "Raster di riflettanza in ingresso da normalizzare (banda singola o pila multibanda)."
              },
              "input_dem": {
                "label": "DEM in ingresso",
                "description": "Raster DEM co-registrato con l'ingresso (stessa griglia, o verrà ricampionato per corrispondere)."
              },
              "solar_zenith_deg": {
                "label": "Zenit solare (gradi)",
                "description": "Angolo zenitale solare in gradi al momento dell'acquisizione."
              },
              "solar_azimuth_deg": {
                "label": "Azimut solare (gradi)",
                "description": "Angolo azimutale solare in gradi (in senso orario da nord) al momento dell'acquisizione."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di correzione: c_correction (default) o minnaert."
              },
              "minnaert_k": {
                "label": "K di Minnaert",
                "description": "Coefficiente k di Minnaert in [0,1] (default 0.5). Usato solo quando method=minnaert."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Esagerazione verticale per il calcolo di pendenza/esposizione del DEM (default 1.0)."
              },
              "output_prefix": {
                "label": "Prefisso di uscita",
                "description": "Prefisso per i file di uscita (default brdf_normalized)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita per il raster normalizzato (sovrascrive output_prefix in modalità a uscita singola)."
              }
            }
          },
          "correct_vignetting": {
            "name": "Correggi la vignettatura",
            "description": "La correzione della vignettatura dell'obiettivo rimuove gli artefatti radiometrici causati dalle proprietà ottiche fuori asse dell'obiettivo, per cui i bordi dell'immagine ricevono meno luce del centro, creando gradienti di luminosità artificiali indipendenti dalle variazioni di riflettanza della superficie. La correzione della vignettatura applica fattori moltiplicativi spazialmente variabili calcolati da modelli di profilo della vignettatura (formulazioni gaussiane o della legge del coseno alla quarta) calibrati sulle caratteristiche del sensore, ripristinando una risposta radiometrica uniforme su tutto il campo visivo dell'immagine. Questa fase di pre-elaborazione è fondamentale nel telerilevamento multispettrale e iperspettrale, in cui la vignettatura corromperebbe l'analisi spettrale e introdurrebbe errori sistematici nei flussi di lavoro di classificazione e di rilevamento dei cambiamenti. Le caratteristiche principali comprendono la stima automatica del profilo di vignettatura dalle statistiche dell'immagine o da parametri di calibrazione specificati dall'utente, fattori di correzione spazialmente variabili applicati per pixel senza artefatti di interpolazione, un mascheramento opzionale dei pixel periferici sovracorretti che evita l'amplificazione di bordi rumorosi e una correzione specifica per banda che gestisce la vignettatura variabile tra le bande spettrali. Le applicazioni comprendono la pre-elaborazione per algoritmi di classificazione spettrale sensibili alla coerenza radiometrica, la preparazione di mosaici in cui i confini della vignettatura causano discontinuità visibili, un confronto radiometrico accurato all'interno del fotogramma e l'analisi iperspettrale che richiede una risposta uniforme all'illuminazione. Le immagini corrette per la vignettatura mostrano una luminosità uniforme su tutto il campo visivo. L'output presenta la rimozione dell'oscuramento dei bordi con una risposta radiometrica uniforme dal centro ai bordi dell'immagine; i pixel periferici possono mostrare un rumore maggiore se fortemente corretti; le immagini corrette si integrano perfettamente nei flussi di lavoro di analisi multispettrale senza artefatti radiometrici.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Immagine raster in ingresso."
              },
              "pp": {
                "label": "Pp",
                "description": "Percorso del vettoriale puntuale (o oggetto vettoriale tipizzato) contenente il punto principale."
              },
              "focal_length": {
                "label": "Lunghezza focale",
                "description": "Lunghezza focale della fotocamera in mm (default 304.8)."
              },
              "image_width": {
                "label": "Larghezza dell'immagine",
                "description": "Distanza tra i bordi sinistro e destro dell'immagine in mm (default 228.6)."
              },
              "n": {
                "label": "N",
                "description": "Esponente n del modello del coseno (default 4.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "dark_object_subtraction": {
            "name": "Sottrazione dell'oggetto scuro",
            "description": "La sottrazione dell'oggetto scuro (DOS) è un'euristica semplice ma efficace per la rimozione della foschia atmosferica che non richiede dati meteorologici ausiliari né modelli complessi di trasferimento radiativo. La tecnica sfrutta il principio secondo cui una riflettanza nulla dovrebbe produrre un segnale di riflettanza nullo (trascurando lo scattering di Rayleigh); qualsiasi segnale osservato da superfici otticamente nere (acque profonde, ombre di foreste dense, asfalto urbano) viene attribuito alla radianza di percorso atmosferica causata dallo scattering degli aerosol. Questo strumento identifica il digital number minimo di ciascuna banda nell'immagine, lo interpreta come foschia atmosferica e lo sottrae da tutti i pixel come offset costante per banda; varianti più sofisticate (DOS2, DOS3, DOS4) tengono conto dello scattering di Rayleigh e dello spessore ottico variabile degli aerosol usando indici di vegetazione o il clustering dei pixel scuri. Le funzionalità principali comprendono l'analisi dell'istogramma per isolare gli oggetti scuri e distinguere la foschia dipendente dalla scena dalla vera riflettanza nulla, un mascheramento opzionale degli elementi noti ad alta riflettanza (aree urbane, neve, nuvole) che falserebbero l'identificazione degli oggetti scuri, una correzione della foschia specifica per banda e un calcolo rapido adatto all'elaborazione in tempo reale o su larga scala. I casi d'uso comprendono stime rapide della riflettanza, il monitoraggio della vegetazione e della qualità dell'acqua in cui la calibrazione assoluta è meno critica dei cambiamenti relativi, la mappatura rapida per la risposta ai disastri e i dati d'archivio storici per i quali non sono disponibili informazioni precise sugli aerosol. L'input comprende la riflettanza al top dell'atmosfera o la radianza calibrata, maschere opzionali di copertura del suolo per escludere gli elementi luminosi e i metadati della scena. L'output è la riflettanza corretta per la foschia, le stime della radianza di percorso atmosferica per banda e flag di qualità che indicano la confidenza nell'identificazione degli oggetti scuri (ad es. pochi pixel scuri, scena dominata da aree urbane). Sebbene rudimentale rispetto ai modelli di trasferimento radiativo, la DOS resta pratica per l'analisi multitemporale e la mappatura a copertura globale quando dati atmosferici sofisticati non sono disponibili.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Pila raster in ingresso (uno o più raster)."
              },
              "percentile": {
                "label": "Percentile",
                "description": "Percentile dell'oggetto scuro per banda (default 1.0)."
              },
              "clamp_non_negative": {
                "label": "Limita a valori non negativi",
                "description": "Se true, limita a zero i valori corretti sotto lo zero (default true)."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta gli ingressi per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              },
              "output_diagnostic_offsets": {
                "label": "Offset diagnostici in uscita",
                "description": "Percorso opzionale del raster in uscita per le diagnostiche degli offset dell'oggetto scuro per banda."
              }
            }
          },
          "dn_to_toa_reflectance": {
            "name": "Da DN a riflettanza TOA",
            "description": "La conversione da digital number a riflettanza al top dell'atmosfera trasforma i digital number grezzi del sensore in valori di riflettanza spettrale fisicamente significativi applicando coefficienti di calibrazione radiometrica per banda derivati dai metadati del satellite. La conversione applica il riscalamento radiometrico, la correzione dell'irradianza spettrale solare esoatmosferica, la compensazione dell'angolo zenitale solare e una normalizzazione opzionale della distanza Terra-Sole per produrre valori di riflettanza direttamente confrontabili tra sensori, date di acquisizione e località geografiche. La riflettanza al top dell'atmosfera rappresenta la frazione dell'energia solare incidente riflessa dagli obiettivi della superficie terrestre al sensore prima degli effetti atmosferici, e costituisce la base di riferimento per l'analisi quantitativa di telerilevamento. Le caratteristiche principali comprendono l'applicazione di coefficienti di calibrazione per banda con l'analisi completa dei metadati dei prodotti satellitari standard, il calcolo automatico della geometria solare dalla data/ora e dalla posizione di acquisizione, una correzione opzionale della distanza Terra-Sole per la variabilità stagionale e una gestione flessibile di più tipi di sensore con formati di coefficienti standardizzati. Le applicazioni spaziano dal rilevamento quantitativo dei cambiamenti usando unità fisiche coerenti, al confronto radiometrico assoluto tra acquisizioni multitemporali e sensori diversi, al calcolo di indici spettrali di vegetazione che richiedono una riflettanza precisa e alla validazione tra sensori nel lavoro con costellazioni di satelliti. La riflettanza TOA consente flussi di lavoro di analisi rigorosi e risultati scientificamente difendibili. I valori di riflettanza in uscita variano tra 0 e 1 (talvolta espressi come 0-10000 per la precisione intera) e rappresentano proporzioni adimensionali; i metadati incorporano i coefficienti di calibrazione usati e i parametri della geometria del sensore; valori negativi indicano problemi di qualità dei dati che richiedono il mascheramento prima dell'analisi.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Pila raster di DN in ingresso (uno o più raster)."
              },
              "reflectance_mult": {
                "label": "Moltiplicatore di riflettanza",
                "description": "Coefficienti moltiplicativi per banda, scalare o array di dimensione pari a inputs."
              },
              "reflectance_add": {
                "label": "Addendo di riflettanza",
                "description": "Coefficienti additivi per banda, scalare o array di dimensione pari a inputs (default 0)."
              },
              "sensor_bundle_root": {
                "label": "Cartella radice del bundle del sensore",
                "description": "Cartella radice opzionale del bundle Landsat/Sentinel-2 usata per derivare automaticamente i coefficienti quando quelli espliciti sono omessi."
              },
              "sun_elevation_deg": {
                "label": "Elevazione solare (gradi)",
                "description": "Angolo di elevazione solare opzionale in gradi per la correzione del coseno. Derivato automaticamente dai metadati del bundle quando disponibile."
              },
              "apply_solar_correction": {
                "label": "Applica correzione solare",
                "description": "Se true (default), divide per sin(sun_elevation)."
              },
              "clamp_unit_interval": {
                "label": "Limita all'intervallo unitario",
                "description": "Se true (default), limita le uscite a [0, 1]."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta gli ingressi per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "terrain_corrected_optical_analytics": {
            "name": "Analitica ottica corretta per il terreno",
            "description": "C-correction topografica delle bande ottiche multispettrali usando un DEM co-registrato. Produce in uscita uno stack di riflettanza della superficie, il fattore di correzione, una maschera di nuvole/ombre e la confidenza della qualità.",
            "params": {
              "input_dem": {
                "label": "DEM in ingresso",
                "description": "Raster DEM co-registrato con le bande ottiche."
              },
              "bundle_root": {
                "label": "Cartella radice del bundle",
                "description": "Cartella radice opzionale del bundle del sensore ottico (attualmente Sentinel-2 SAFE, Landsat o DIMAP SPOT/Pleiades) usata per risolvere automaticamente le bande richieste, la QA quando disponibile e i metadati solari quando gli ingressi espliciti sono omessi."
              },
              "input_red": {
                "label": "Banda rossa in ingresso",
                "description": "Raster della banda rossa (opzionale quando è fornito bundle_root)."
              },
              "input_nir": {
                "label": "Banda NIR in ingresso",
                "description": "Raster della banda NIR (opzionale quando è fornito bundle_root)."
              },
              "input_green": {
                "label": "Banda verde in ingresso",
                "description": "Raster della banda verde (opzionale)."
              },
              "input_blue": {
                "label": "Banda blu in ingresso",
                "description": "Raster della banda blu (opzionale). Risolto automaticamente dai metadati del bundle quando è fornito bundle_root."
              },
              "solar_mode": {
                "label": "Modalità solare",
                "description": "Modalità di risoluzione degli angoli solari: auto, manual, metadata, datetime_location."
              },
              "solar_zenith_deg": {
                "label": "Zenit solare (gradi)",
                "description": "Angolo zenitale solare in gradi (richiesto in modalità manual)."
              },
              "solar_azimuth_deg": {
                "label": "Azimut solare (gradi)",
                "description": "Azimut solare in gradi (in senso orario da nord, richiesto in modalità manual)."
              },
              "acquisition_datetime_utc": {
                "label": "Data e ora di acquisizione (UTC)",
                "description": "Timestamp di acquisizione in formato RFC3339 UTC per la modalità datetime_location."
              },
              "latitude": {
                "label": "Latitudine",
                "description": "Latitudine opzionale per la modalità datetime_location."
              },
              "longitude": {
                "label": "Longitudine",
                "description": "Longitudine opzionale per la modalità datetime_location."
              },
              "profile": {
                "label": "Profilo",
                "description": "Profilo di elaborazione: conservative, balanced, fast."
              },
              "cloud_threshold": {
                "label": "Soglia nuvole",
                "description": "Soglia opzionale per le nuvole nelle unità della banda sorgente. Inferita automaticamente se omessa."
              },
              "shadow_threshold": {
                "label": "Soglia ombre",
                "description": "Soglia opzionale per le ombre delle nuvole nelle unità della banda sorgente. Inferita automaticamente se omessa."
              },
              "qa_mask": {
                "label": "Maschera QA",
                "description": "Percorso opzionale del raster della maschera QA."
              },
              "qa_mask_format": {
                "label": "Formato della maschera QA",
                "description": "Codifica della maschera QA: auto, landsat_qa_pixel, sentinel2_scl, sentinel2_qa60, binary."
              },
              "mask_strategy": {
                "label": "Strategia di mascheramento",
                "description": "Strategia di mascheramento: auto, qa_only, heuristic_only, qa_plus_heuristic."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Esagerazione verticale per pendenza/esposizione."
              },
              "output_prefix": {
                "label": "Prefisso di uscita",
                "description": "Prefisso per tutti gli artefatti in uscita."
              }
            }
          },
          "land_surface_temperature_single_channel": {
            "name": "Temperatura superficiale a canale singolo",
            "description": "La stima della temperatura della superficie terrestre da un singolo canale dell'infrarosso termico stima la temperatura radiativa della pelle tramite l'inversione dell'equazione del trasferimento radiativo. I digital number del sensore vengono convertiti in radianza spettrale usando coefficienti di calibrazione specifici del sensore; la radianza viene invertita in temperatura di brillanza tramite la funzione di Planck usando costanti termiche specifiche della banda; la temperatura di brillanza viene convertita nella LST fisica tramite correzioni empiriche dell'emissività. L'emissività è derivata da indici di vegetazione o fornita direttamente, correggendo le variazioni di emissività termica dipendenti dal materiale. Caratteristiche principali: richiede una sola banda termica; elaborazione radiometrica semplice; calcolo rapido; nessun requisito multicanale; stima dell'emissività da indici di vegetazione; output diretto della temperatura fisica. Casi d'uso: mappatura delle isole di calore urbane; monitoraggio dello stress da siccità; rilevamento di elementi geotermici; tracciamento della firma termica degli incendi boschivi; gestione dell'acqua in agricoltura. Interpretazione dell'output: l'output è la temperatura radiativa della pelle in Kelvin (o in Celsius se convertita). La stima a canale singolo non può rimuovere completamente gli effetti del vapore acqueo atmosferico; il bias atmosferico residuo è tipicamente di 2-5 K. Gli errori di emissività si propagano direttamente: un errore di emissività di ±0.05 ≈ un errore di temperatura di ±1-2 K. L'emissività basata sulla vegetazione varia con l'NDVI; il suolo nudo presenta un'emissività inferiore rispetto alla vegetazione. Le serie temporali di LST rivelano tendenze di riscaldamento/raffreddamento; anomalie di LST > fondo ± 5K indicano elementi termici.",
            "params": {
              "thermal_input": {
                "label": "Banda termica in ingresso",
                "description": "Percorso del raster termico (DN per impostazione predefinita, o temperatura di brillanza se input_is_brightness_temp=true)."
              },
              "input_is_brightness_temp": {
                "label": "L'ingresso è temperatura di brillanza",
                "description": "Se true, thermal_input è già una temperatura di brillanza in Kelvin (default false)."
              },
              "emissivity_input": {
                "label": "Emissività in ingresso",
                "description": "Percorso opzionale del raster di emissività allineato a thermal_input."
              },
              "emissivity_constant": {
                "label": "Costante di emissività",
                "description": "Emissività di ripiego quando emissivity_input non è fornito (default 0.98)."
              },
              "sensor_bundle_root": {
                "label": "Cartella radice del bundle del sensore",
                "description": "Cartella radice opzionale del bundle Landsat usata per derivare la radianza termica e le costanti di Planck."
              },
              "thermal_band_number": {
                "label": "Numero della banda termica",
                "description": "Numero della banda termica per la ricerca nei metadati (default 10)."
              },
              "radiance_mult": {
                "label": "Moltiplicatore di radianza",
                "description": "Fattore moltiplicativo della radianza termica per la conversione DN->radianza."
              },
              "radiance_add": {
                "label": "Addendo di radianza",
                "description": "Fattore additivo della radianza termica per la conversione DN->radianza."
              },
              "k1_constant": {
                "label": "Costante K1",
                "description": "Costante termica K1 di Planck."
              },
              "k2_constant": {
                "label": "Costante K2",
                "description": "Costante termica K2 di Planck."
              },
              "wavelength_um": {
                "label": "Lunghezza d'onda (µm)",
                "description": "Lunghezza d'onda termica effettiva in micrometri (default inferita da thermal_band_number)."
              },
              "output_units": {
                "label": "Unità di uscita",
                "description": "Unità di uscita: celsius (default) o kelvin."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta emissivity_input nel CRS di thermal_input quando necessario."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "land_surface_temperature_split_window": {
            "name": "Temperatura superficiale split-window",
            "description": "La stima della LST split-window usa due bande dell'infrarosso termico per stimare simultaneamente la temperatura e l'emissività della superficie tramite l'inversione dell'equazione del trasferimento radiativo. L'assorbimento atmosferico differenziale tra le due bande (tipicamente nella regione 10-12 μm) consente la correzione del vapore acqueo atmosferico, migliorando l'accuratezza rispetto ai metodi a canale singolo. Le temperature di brillanza di entrambe le bande vengono invertite con una parametrizzazione dell'emissività basata sulla frazione di vegetazione o con griglie di emissività fornite dall'utente. Caratteristiche principali: richiede due bande termiche; correzione atmosferica tramite assorbimento differenziale; stima simultanea di temperatura ed emissività; algoritmi pubblicati per i sensori standard; compensazione atmosferica superiore rispetto al canale singolo. Casi d'uso: mappatura delle isole di calore urbane; rilevamento della siccità agricola; rilevamento di elementi geotermici; studi sull'interazione suolo-atmosfera; rilevamento di anomalie vulcaniche/termiche. Interpretazione dell'output: l'output è la temperatura radiativa della superficie con una correzione atmosferica migliorata. La stima split-window riduce il bias del vapore acqueo atmosferico a <1-2 K rispetto agli errori di 2-5 K del canale singolo. Il compromesso temperatura/emissività rimane: le aree con indice di vegetazione elevato presentano una bassa emissività che richiede un'interpretazione attenta. Le superfici eterogenee (vegetazione/suolo misti) mostrano valori intermedi. La coerenza temporale migliora l'affidabilità del rilevamento dei cambiamenti; tendenze di LST > ±3K indicano cambiamenti termici significativi.",
            "params": {
              "thermal1_input": {
                "label": "Banda termica 1 in ingresso",
                "description": "Percorso del primo raster termico (es. Landsat B10)."
              },
              "thermal2_input": {
                "label": "Banda termica 2 in ingresso",
                "description": "Percorso del secondo raster termico (es. Landsat B11)."
              },
              "input_is_brightness_temp": {
                "label": "L'ingresso è temperatura di brillanza",
                "description": "Se true, gli ingressi termici sono già temperature di brillanza in Kelvin (default false)."
              },
              "emissivity_mean_input": {
                "label": "Emissività media in ingresso",
                "description": "Percorso opzionale del raster di emissività media."
              },
              "emissivity_delta_input": {
                "label": "Differenza di emissività in ingresso",
                "description": "Percorso opzionale del raster della differenza di emissività (epsilon1 - epsilon2)."
              },
              "emissivity_mean_constant": {
                "label": "Costante di emissività media",
                "description": "Costante di emissività media di ripiego quando emissivity_mean_input è assente (default 0.98)."
              },
              "emissivity_delta_constant": {
                "label": "Costante di differenza di emissività",
                "description": "Costante di differenza di emissività di ripiego quando emissivity_delta_input è assente (default 0.0)."
              },
              "sensor_bundle_root": {
                "label": "Cartella radice del bundle del sensore",
                "description": "Cartella radice opzionale del bundle Landsat usata per derivare la radianza termica e le costanti di Planck."
              },
              "thermal_band1_number": {
                "label": "Numero della banda termica 1",
                "description": "Numero di banda per la ricerca nei metadati di thermal1_input (default 10)."
              },
              "thermal_band2_number": {
                "label": "Numero della banda termica 2",
                "description": "Numero di banda per la ricerca nei metadati di thermal2_input (default 11)."
              },
              "radiance1_mult": {
                "label": "Moltiplicatore di radianza 1",
                "description": "Fattore moltiplicativo della radianza della banda 1."
              },
              "radiance1_add": {
                "label": "Addendo di radianza 1",
                "description": "Fattore additivo della radianza della banda 1."
              },
              "k1_1": {
                "label": "K1 1",
                "description": "Costante K1 di Planck della banda 1."
              },
              "k2_1": {
                "label": "K2 1",
                "description": "Costante K2 di Planck della banda 1."
              },
              "radiance2_mult": {
                "label": "Moltiplicatore di radianza 2",
                "description": "Fattore moltiplicativo della radianza della banda 2."
              },
              "radiance2_add": {
                "label": "Addendo di radianza 2",
                "description": "Fattore additivo della radianza della banda 2."
              },
              "k1_2": {
                "label": "K1 2",
                "description": "Costante K1 di Planck della banda 2."
              },
              "k2_2": {
                "label": "K2 2",
                "description": "Costante K2 di Planck della banda 2."
              },
              "coeff_a0": {
                "label": "Coefficiente A0",
                "description": "Coefficiente split-window a0 (default 0.0)."
              },
              "coeff_a1": {
                "label": "Coefficiente A1",
                "description": "Coefficiente split-window a1 per il termine T1 (default 1.0)."
              },
              "coeff_a2": {
                "label": "Coefficiente A2",
                "description": "Coefficiente split-window a2 per il termine (T1-T2) (default 0.0)."
              },
              "coeff_a3": {
                "label": "Coefficiente A3",
                "description": "Coefficiente split-window a3 per il termine (T1-T2)^2 (default 0.0)."
              },
              "coeff_a4": {
                "label": "Coefficiente A4",
                "description": "Coefficiente split-window a4 per il termine (1-emissivity_mean) (default 0.0)."
              },
              "coeff_a5": {
                "label": "Coefficiente A5",
                "description": "Coefficiente split-window a5 per il termine emissivity_delta (default 0.0)."
              },
              "output_units": {
                "label": "Unità di uscita",
                "description": "Unità di uscita: celsius (default) o kelvin."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta i raster supplementari per corrispondere al CRS di thermal1_input quando necessario."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "ndvi_based_emissivity": {
            "name": "Emissività basata su NDVI",
            "description": "La stima dell'emissività della superficie terrestre basata sull'NDVI ricava l'emissività termica a banda larga dalla frazione di vegetazione calcolata dall'NDVI, consentendo le correzioni del trasferimento radiativo termico per la stima della temperatura della superficie terrestre da dati satellitari nell'infrarosso termico. L'algoritmo calcola l'NDVI dalla riflettanza del rosso e del vicino infrarosso, trasforma l'NDVI in frazione di vegetazione e quindi applica relazioni empiriche tra frazione di vegetazione ed emissività, validate tramite misure sul campo e simulazioni del trasferimento radiativo. La vegetazione influisce in modo significativo sull'emissività termica; una maggiore vegetazione aumenta l'emissività verso ~0.99, mentre l'emissività del suolo nudo varia tra ~0.90 e 0.98 a seconda della composizione del suolo e della rugosità della superficie. Le caratteristiche principali comprendono il calcolo automatico della frazione di vegetazione dall'NDVI senza calibrazione sul campo, relazioni empiriche standard fondate sulla teoria fisica del trasferimento radiativo, un'analisi di sensibilità opzionale che esplora le variazioni di emissività e la compatibilità diretta con i dati satellitari nell'infrarosso termico. Le applicazioni comprendono la stima della temperatura della superficie terrestre da dati satellitari termici che richiedono correzioni accurate dell'emissività (Landsat, MODIS, Sentinel-3), l'analisi delle isole di calore urbane con correzione per la vegetazione variabile, la modellazione termica nelle applicazioni relative alle risorse idriche e all'agricoltura e le applicazioni climatiche che richiedono dataset termici globali coerenti. L'emissività basata sull'NDVI consente una correzione termica accurata. L'output produce un raster di emissività (0-1) adatto alla correzione del trasferimento radiativo termico, un prodotto intermedio della frazione di vegetazione che ne consente l'interpretazione e metadati che documentano le relazioni empiriche e le proprietà del suolo/della superficie ipotizzate; i valori di emissività orientano la valutazione dell'incertezza della correzione termica e dell'idoneità per applicazioni specifiche.",
            "params": {
              "red_input": {
                "label": "Banda rossa in ingresso",
                "description": "Percorso del raster della banda rossa."
              },
              "nir_input": {
                "label": "Banda NIR in ingresso",
                "description": "Percorso del raster della banda NIR."
              },
              "ndvi_soil": {
                "label": "NDVI del suolo",
                "description": "Soglia NDVI per la frazione di suolo nudo (default 0.2)."
              },
              "ndvi_vegetation": {
                "label": "NDVI della vegetazione",
                "description": "Soglia NDVI per la frazione di vegetazione piena (default 0.5)."
              },
              "emissivity_soil": {
                "label": "Emissività del suolo",
                "description": "Emissività del suolo assunta (default 0.97)."
              },
              "emissivity_vegetation": {
                "label": "Emissività della vegetazione",
                "description": "Emissività della vegetazione assunta (default 0.99)."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta nir_input nel CRS di red_input quando necessario."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "continuum_removal": {
            "name": "Rimozione del continuo",
            "description": "La rimozione del continuum normalizza gli spettri multispettrali stimando l'inviluppo convesso superiore (continuum) che racchiude lo spettro e dividendo ciascuna banda per il valore del continuum corrispondente. Rimuove la pendenza spettrale complessiva e le variazioni di luminosità, consentendo una visualizzazione migliorata delle caratteristiche di assorbimento (bande, profondità). Le profondità e le posizioni di assorbimento vengono standardizzate, consentendo l'identificazione di minerali/materiali tramite librerie spettrali. La linea del continuum viene calcolata tramite un algoritmo di inviluppo convesso che collega i massimi locali lungo l'intervallo spettrale. Caratteristiche principali: rimuove il continuum spettrale; esalta le caratteristiche di assorbimento; normalizza le variazioni di luminosità; consente il confronto con librerie spettrali; standardizza la forma spettrale. Casi d'uso: identificazione dei minerali; classificazione dei materiali; analisi spettrale della vegetazione; rilevamento di anomalie spettrali; mappatura delle caratteristiche di assorbimento. Interpretazione dell'output: gli spettri con continuum rimosso presentano caratteristiche di assorbimento (valori <1.0) che indicano bande specifiche del materiale. Le profondità di assorbimento indicano l'intensità della caratteristica; caratteristiche poco profonde (<0.2) indicano componenti minori; caratteristiche profonde (>0.5) indicano assorbimenti dominanti. Le posizioni delle caratteristiche nello spazio delle lunghezze d'onda consentono l'identificazione dei materiali tramite librerie di riferimento. Spettri con continuum rimosso piatti (vicini a 1.0) indicano materiali spettralmente neutri.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Pila raster in ingresso (un raster per banda)."
              },
              "wavelengths": {
                "label": "Lunghezze d'onda",
                "description": "Array opzionale di lunghezze d'onda strettamente crescenti di lunghezza pari a inputs."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster multibanda in uscita."
              }
            }
          },
          "linear_spectral_unmixing": {
            "name": "Spettro-unmixing lineare",
            "description": "Lo spectral unmixing lineare scompone il vettore multispettrale di ciascun pixel come combinazione lineare non negativa di spettri degli endmember che rappresentano le firme di materiali puri. L'ottimizzazione ai minimi quadrati non negativi risolve min ||y - Ax||² con il vincolo x ≥ 0, dove y è lo spettro del pixel, A contiene le firme degli endmember e x rappresenta le frazioni di abbondanza. Viene imposto il vincolo di somma unitaria, garantendo che i valori di abbondanza rappresentino proporzioni fisiche. Gli endmember sono derivati da dati di addestramento, da database di librerie o estratti tramite algoritmi di estrazione degli endmember. Caratteristiche principali: stima dei materiali a livello sub-pixel; interpretazione fisica delle frazioni di abbondanza; supporto per più endmember; output vincolato a intervalli validi [0,1]; consente il rilevamento dei cambiamenti dei materiali. Casi d'uso: mappatura dell'abbondanza della copertura del suolo; stima della composizione mineralogica; inventario dei materiali urbani; frazioni di vegetazione/suolo/superfici impermeabili; classificazione basata su librerie spettrali. Interpretazione dell'output: le mappe di abbondanza in uscita mostrano le frazioni di materiale per pixel con somma pari a 1.0. Abbondanze <0.1 indicano componenti minori; abbondanze >0.7 indicano materiali dominanti. L'errore residuo indica la qualità dell'unmixing; residui bassi indicano un buon adattamento spettrale; residui alti indicano una mancata corrispondenza degli endmember o la complessità del pixel.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Pila raster in ingresso (un raster per banda)."
              },
              "endmembers": {
                "label": "Endmember",
                "description": "Firme degli endmember come array di oggetti {name, values} o array numerici."
              },
              "sum_to_one": {
                "label": "Somma a uno",
                "description": "Se true (default), normalizza le frazioni non negative in modo che la somma sia uno."
              },
              "iterations": {
                "label": "Iterazioni",
                "description": "Numero di iterazioni del gradiente proiettato (default 80)."
              },
              "step_size": {
                "label": "Dimensione del passo",
                "description": "Dimensione del passo del gradiente proiettato (default 0.05)."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster multibanda delle frazioni in uscita."
              },
              "output_residual": {
                "label": "Residuo in uscita",
                "description": "Percorso opzionale del raster RMS dei residui in uscita."
              }
            }
          },
          "minimum_noise_fraction": {
            "name": "Frazione di rumore minima",
            "description": "La minimum noise fraction trasforma i dati iperspettrali tramite un processo in due fasi: stima della covarianza del rumore seguita dallo sbiancamento del rumore e dall'analisi delle componenti principali. Lo sbiancamento del rumore decorrela il rumore tra le bande; la PCA nello spazio sbiancato identifica le direzioni dominate dal segnale. Le componenti in uscita sono ordinate per rapporto segnale/rumore: le prime componenti rappresentano il segnale, quelle successive il rumore. Consente la riduzione del rumore tramite il troncamento delle componenti senza gli artefatti dello smussamento convenzionale. Caratteristiche principali: separa il segnale dal rumore; concentrazione del rumore nelle ultime componenti; la selezione delle componenti consente il filtraggio del rumore; preserva la fedeltà spettrale; consente la riduzione della dimensionalità. Casi d'uso: rimozione del rumore da immagini iperspettrali; riduzione della dimensionalità per la classificazione; miglioramento del segnale; caratterizzazione del rumore; valutazione della qualità delle immagini. Interpretazione dell'output: le prime 1-3 componenti MNF contengono tipicamente il 70-90% del segnale; le componenti successive sono progressivamente più rumorose. Il troncamento delle componenti (mantenendo le prime N componenti) rimuove il rumore preservando le informazioni spettrali essenziali. Le immagini delle componenti MNF consentono una valutazione visiva del rumore; la deviazione standard delle ultime componenti indica il livello di rumore.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Pila raster in ingresso (un raster per banda)."
              },
              "num_components": {
                "label": "Numero di componenti",
                "description": "Numero di componenti MNF in uscita (default: tutte le bande)."
              },
              "noise_mode": {
                "label": "Modalità rumore",
                "description": "Modalità dello stimatore del rumore: 'difference_x' (default) o 'difference_y'."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster multibanda delle componenti MNF in uscita."
              },
              "output_inverse": {
                "label": "Inversa in uscita",
                "description": "Percorso opzionale del raster multibanda ricostruito dalle componenti MNF mantenute."
              }
            }
          },
          "spectral_angle_mapper": {
            "name": "Spectral Angle Mapper",
            "description": "Spectral Angle Mapping classifica i pixel calcolando gli angoli spettrali tra lo spettro di ciascun pixel e gli spettri di una libreria di riferimento, assegnando i pixel allo spettro della libreria con l'angolo minimo, che rappresenta la massima similarità spettrale indipendentemente dall'intensità dell'illuminazione. SAM tratta ciascun pixel e ciascuno spettro di riferimento come vettori in uno spazio spettrale N-dimensionale, calcolando gli angoli tra i vettori tramite prodotti scalari e trasformazioni con l'arcocoseno. Questa classificazione basata sull'angolo spettrale è invariante rispetto agli effetti dell'illuminazione e della topografia che scalano la luminosità complessiva ma preservano la forma spettrale, il che la rende robusta per terreni complessi e condizioni di acquisizione variabili. Le caratteristiche principali comprendono la definizione automatica della soglia dell'angolo spettrale che consente una confidenza probabilistica della classificazione, l'importazione di librerie di riferimento che supporta firme spettrali fornite dall'utente da campioni sul campo o librerie spettrali, l'invarianza all'illuminazione che gestisce condizioni di luce variabili preservando la discriminazione spettrale e un calcolo rapido che consente la classificazione in tempo reale di immagini di grandi dimensioni. Le applicazioni comuni comprendono l'identificazione dei materiali e la mappatura geologica usando le librerie spettrali USGS, la classificazione delle specie vegetali combinando dati satellitari multispettrali con spettri raccolti sul campo, la prospezione mineraria nei rilievi aerei iperspettrali e la valutazione dell'accuratezza confrontando gli spettri dell'immagine con firme di riferimento raccolte a terra. L'output di SAM consente un'identificazione affidabile dei materiali sfruttando le firme della forma spettrale. L'output della classificazione produce un'immagine a banda singola con etichette di classe intere corrispondenti alle voci della libreria; un raster di confidenza registra facoltativamente gli angoli spettrali minimi per ciascun pixel, consentendo un filtraggio basato su soglia; l'output consente l'identificazione diretta dei materiali e un filtraggio basato sulla confidenza.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Pila raster in ingresso (un raster per banda)."
              },
              "endmembers": {
                "label": "Endmember",
                "description": "Firme degli endmember come array di oggetti {name, values} o array numerici."
              },
              "threshold_angle_deg": {
                "label": "Angolo di soglia (gradi)",
                "description": "Angolo spettrale massimo accettato opzionale in gradi; i pixel senza corrispondenza sono classe 0."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster delle classi in uscita."
              },
              "output_angle": {
                "label": "Angolo in uscita",
                "description": "Percorso opzionale del raster in uscita per l'angolo spettrale minimo (gradi)."
              }
            }
          },
          "spectral_library_matching": {
            "name": "Confronto con libreria spettrale",
            "description": "Il confronto con librerie spettrali esegue la classificazione confrontando gli spettri dei pixel dell'immagine con gli spettri di una libreria di riferimento, usando più metriche di similarità tra cui l'angolo spettrale (angolo tra i vettori spettrali), la distanza euclidea (differenza di magnitudo) e la divergenza dell'informazione spettrale. L'algoritmo accetta una libreria spettrale di riferimento fornita dall'utente con spettri di materiali/classi noti, calcola le metriche di similarità tra ciascun pixel dell'immagine e le voci della libreria, identifica lo spettro della libreria con la migliore corrispondenza (angolo minimo, distanza minima o divergenza minima) e produce in uscita le etichette di classe con punteggi opzionali di confidenza/similarità. Il confronto con librerie consente l'identificazione dei materiali senza campioni di addestramento sul campo, sfruttando spettri di riferimento provenienti da USGS, rilievi sul campo o spettroscopia di laboratorio. Le caratteristiche principali comprendono più metriche di similarità che consentono di scegliere la metrica in base a specifiche caratteristiche spettrali e distribuzioni delle classi, la flessibilità di importazione delle librerie che supporta vari formati di librerie spettrali, una quantificazione opzionale della confidenza/incertezza e un output diretto dei materiali identificabili. Le applicazioni comprendono la mappatura geologica usando la libreria spettrale USGS per la mineralogia, la classificazione della vegetazione usando librerie spettrali di riferimento delle piante, l'identificazione dei materiali da costruzione nelle aree urbane e l'analisi di rilievi aerei iperspettrali. Il confronto con librerie spettrali consente l'identificazione automatizzata dei materiali. L'output comprende una mappa classificata con gli ID delle voci della libreria come etichette di classe, un raster di similarità/confidenza che quantifica la qualità della corrispondenza e uno stack opzionale completo di angoli/distanze spettrali per ciascuna voce della libreria che consente un filtraggio basato su soglia; i metadati documentano la fonte della libreria di riferimento e la metrica di similarità usata.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Pila raster in ingresso (un raster per banda)."
              },
              "library": {
                "label": "Libreria",
                "description": "Voci della libreria spettrale come array di oggetti {name, values} o array numerici."
              },
              "library_csv": {
                "label": "CSV della libreria",
                "description": "Percorso opzionale del CSV della libreria spettrale (righe name,b1,b2,... o b1,b2,...). Usato quando 'library' non è fornito."
              },
              "metric": {
                "label": "Metrica",
                "description": "Metrica di abbinamento: 'sam' (default), 'euclidean' o 'sid'."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster delle classi in uscita."
              },
              "output_score": {
                "label": "Punteggio in uscita",
                "description": "Percorso opzionale del raster del punteggio di miglior corrispondenza in uscita (angolo o distanza)."
              }
            }
          },
          "canny_edge_detection": {
            "name": "Rilevamento dei bordi di Canny",
            "description": "Applica il rilevamento dei bordi multistadio di Canny (sfocatura gaussiana → gradiente di Sobel → soppressione dei non massimi → doppia soglia → isteresi).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso (banda singola o RGB impacchettato)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Deviazione standard del kernel gaussiano di lisciatura in pixel. Default: 0.5."
              },
              "low_threshold": {
                "label": "Soglia bassa",
                "description": "Soglia di isteresi bassa (frazione 0–1 del gradiente massimo). Default: 0.05."
              },
              "high_threshold": {
                "label": "Soglia alta",
                "description": "Soglia di isteresi alta (frazione 0–1 del gradiente massimo). Default: 0.15."
              },
              "add_back": {
                "label": "Riaggiungi",
                "description": "Se true, i pixel dei bordi vengono azzerati nell'immagine originale anziché produrre una mappa binaria dei bordi. Default: false."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "corner_detection": {
            "name": "Rilevamento degli angoli",
            "description": "Identifica pattern di angoli nei raster binari usando modelli hit-and-miss.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "laplacian_filter": {
            "name": "Filtro laplaciano",
            "description": "Il filtro laplaciano calcola la derivata spaziale seconda dell'intensità dell'immagine, fornendo un potente rilevamento dei bordi tramite una misura isotropa (in tutte le direzioni) del gradiente. L'implementazione applica un kernel fisso che approssima l'operatore laplaciano (somma delle derivate seconde nelle direzioni x e y), catturando le variazioni di intensità indipendentemente dall'orientamento del bordo. A differenza dei filtri direzionali, questo approccio tratta allo stesso modo tutte le direzioni dei bordi, il che lo rende ideale per il rilevamento di elementi che richiede l'indipendenza dall'orientamento. Il fondamento matematico si basa sull'approssimazione discreta: ∇²I ≈ I(x+1,y) + I(x-1,y) + I(x,y+1) + I(x,y-1) - 4·I(x,y). Le caratteristiche principali comprendono la capacità di rilevare gli attraversamenti dello zero (i veri bordi si trovano dove l'output attraversa lo zero), l'insensibilità alla direzione del bordo e la capacità di rilevare in modo identico sia le transizioni da chiaro a scuro sia quelle da scuro a chiaro. Il filtraggio laplaciano eccelle nella mappatura geologica, in cui i confini delle strutture appaiono come attraversamenti dello zero, nella delimitazione dei confini della vegetazione, nell'estrazione della rete stradale da immagini ad alta risoluzione e nel rilevamento delle impronte degli edifici. L'interpretazione dell'output si basa sulla comprensione delle transizioni di segno: valori positivi elevati indicano minimi scuri locali, valori negativi indicano massimi chiari locali e gli attraversamenti dello zero segnano i veri bordi. L'output varia tipicamente da -1000 a +1000 per immagini sorgente a 8 bit, a seconda del contrasto locale. Una magnitudo elevata dell'output indica bordi netti e ben definiti; una magnitudo bassa suggerisce transizioni graduali. Il rilevamento degli attraversamenti dello zero richiede un'attenta scelta della soglia. Si noti che il laplaciano è sensibile al rumore (amplifica il rumore ad alta frequenza), per cui si raccomanda comunemente un pre-filtraggio con smussamento gaussiano prima dell'applicazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "variant": {
                "label": "Variante",
                "description": "Variante del kernel: 3x3(1), 3x3(2), 3x3(3), 3x3(4), 5x5(1), 5x5(2)."
              },
              "clip_amount": {
                "label": "Quantità di ritaglio",
                "description": "Percentuale opzionale di ritaglio simmetrico delle code (0-40)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "laplacian_of_gaussians_filter": {
            "name": "Filtro laplaciano di gaussiane",
            "description": "Esegue un miglioramento dei bordi Laplacian-of-Gaussians (LoG) che combina lo smussamento gaussiano con il rilevamento dei bordi laplaciano. Approssimato computazionalmente tramite la differenza di gaussiane (DoG). Prima smussa l'immagine (riduce il rumore), poi applica il laplaciano (rileva i bordi). Tecnica classica di rilevamento dei bordi multiscala. Il rilevamento degli attraversamenti dello zero sull'output LoG identifica posizioni precise dei bordi. Il LoG è lo standard per il rilevamento dei bordi nello spazio delle scale: la gaussiana rimuove il rumore, il laplaciano amplifica i bordi. Il parametro sigma controlla la scala dei bordi rilevati: un sigma piccolo rileva bordi fini, un sigma grande rileva bordi ampi. Il LoG è approssimato tramite DoG per efficienza. Più valori di sigma consentono un rilevamento dei bordi multiscala (identificazione di elementi a scale diverse). Applicazioni: (1) rilevamento robusto dei bordi (resistente al rumore), (2) rilevamento dei bordi multiscala (usando più sigma), (3) localizzazione dei bordi tramite attraversamenti dello zero, (4) pre-elaborazione per la segmentazione, (5) rilevamento di blob tramite gli attraversamenti dello zero del LoG. Flusso di lavoro: applicare il LoG→identificare gli attraversamenti dello zero→tracciare i bordi→vettorializzazione o ulteriore elaborazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma gaussiano usato dal kernel LoG (0.5-20.0, default 0.75)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "prewitt_filter": {
            "name": "Filtro di Prewitt",
            "description": "L'operatore di Prewitt esegue un rilevamento dei bordi basato sul gradiente simile a Sobel, usando pesi del kernel alternativi ottimizzati per caratteristiche di rumore diverse. L'implementazione impiega due kernel di convoluzione 3×3 che calcolano le derivate direzionali in x e y con una ponderazione uniforme sulla riga/colonna centrale e su quelle adiacenti, a differenza dell'approccio di Sobel che privilegia il centro. La magnitudo del gradiente combina le componenti direzionali tramite √(Gx² + Gy²), fornendo una risposta direzionale uniforme. Il fondamento matematico si basa su approssimazioni della differenziazione discreta che pesano allo stesso modo tutti i pixel che contribuiscono anziché privilegiare quelli centrali. Le caratteristiche principali comprendono una risposta al rumore leggermente diversa rispetto a Sobel (talvolta superiore in immagini estremamente rumorose), una vera scomposizione in magnitudo/direzione che consente un'analisi sofisticata dei bordi, un'efficienza computazionale che richiede solo operazioni di convoluzione standard e un'efficacia comprovata su immagini radar, ottiche e termiche. Il filtraggio di Prewitt eccelle nell'analisi di immagini SAR, in cui la ponderazione uniforme riduce gli artefatti di speckle meglio di Sobel, nel rilevamento di anomalie termiche che enfatizza gli elementi lineari e nell'estrazione dei bordi multispettrale che richiede un'elaborazione indipendente dalla direzione. L'interpretazione dell'output è analoga a Sobel: la magnitudo indica l'intensità del bordo (più alta = più netta), la direzione calcolata tramite atan2(Gy, Gx) fornisce l'orientamento del bordo in radianti. La magnitudo varia tipicamente tra 0 e 256 per input a 8 bit; magnitudo superiori a 80 indicano generalmente bordi significativi. I valori di direzione variano da -π a +π; 0 radianti indica bordi puramente orizzontali, ±π/2 indica bordi puramente verticali. La ponderazione uniforme del kernel produce tipicamente risposte del gradiente leggermente più lisce rispetto a Sobel, potenzialmente migliori per elementi sparsi o fini dell'immagine. Applicare un filtraggio mediano complementare per ridurre i falsi positivi indotti dal rumore. Combinare l'output direzionale con la scelta di una soglia per i flussi di lavoro di collegamento dei bordi e di estrazione dei confini, fondamentali per le pipeline di segmentazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "clip_tails": {
                "label": "Ritaglia le code",
                "description": "Percentuale opzionale di ritaglio simmetrico delle code (0-40)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "roberts_cross_filter": {
            "name": "Filtro croce di Roberts",
            "description": "Il filtro Roberts Cross è uno dei primi operatori di rilevamento dei bordi e impiega uno schema di kernel a croce diagonale 2×2 semplice ma efficace per calcolare i gradienti dell'immagine con un carico computazionale minimo. Questo operatore usa due matrici ortogonali 2×2 ruotate di 45° rispetto all'allineamento orizzontale-verticale, creando maschere di convoluzione a forma di croce che rilevano i bordi privilegiando gli angoli e le transizioni diagonali. Il filtro applica kernel separati per i gradienti X e Y, calcolando la magnitudo tramite la somma dei valori assoluti o la norma euclidea. Le caratteristiche principali comprendono un'eccezionale efficienza computazionale grazie alle ridotte dimensioni del kernel 2×2, requisiti di memoria minimi e un'elaborazione rapida su grandi dataset raster. Il Roberts Cross è particolarmente efficace per rilevare elementi a scala fine e transizioni nette in immagini ad alta risoluzione. I principali casi d'uso comprendono il rilevamento rapido dei bordi in applicazioni con vincoli di tempo, l'elaborazione di flussi video in tempo reale, il rilevamento preliminare dei confini prima di algoritmi avanzati e gli ambienti con risorse limitate. Le applicazioni spaziano dalla pre-elaborazione dei rilievi aerei, alla valutazione della qualità delle immagini satellitari, all'estrazione di caratteristiche per pipeline di machine learning e alle implementazioni GIS mobili. L'interpretazione dell'output mostra le posizioni dei bordi come pixel ad alta magnitudo, dove si verificano variazioni spettrali nell'intorno 2×2. Le regioni di sfondo presentano tipicamente valori prossimi allo zero; i bordi appaiono come elementi lineari luminosi che indicano i confini tra classi di copertura del suolo distinte. L'output è intrinsecamente sparso e contiene bordi solo dove i gradienti superano le soglie di precisione computazionale. Per le immagini multispettrali, applicarlo in modo indipendente a ciascuna banda oppure calcolare prima un indice di differenza normalizzata. All'applicazione di Roberts segue spesso una post-elaborazione di assottigliamento dei bordi per affinare l'output per i flussi di lavoro di conversione vettoriale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "clip_amount": {
                "label": "Quantità di ritaglio",
                "description": "Percentuale opzionale di ritaglio simmetrico delle code (0-50)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "sobel_filter": {
            "name": "Filtro di Sobel",
            "description": "L'operatore di Sobel rileva i bordi tramite la stima del gradiente direzionale sia in direzione x (orizzontale) sia in direzione y (verticale), combinando kernel di derivata ortogonali in un'unica rappresentazione della magnitudo. L'implementazione applica in modo indipendente due kernel di convoluzione 3×3 (uno che enfatizza i bordi orizzontali, uno quelli verticali), quindi combina i risultati tramite la norma euclidea: magnitudo = √(Gx² + Gy²). Questo approccio separabile riduce il costo computazionale mantenendo l'accuratezza del rilevamento dei bordi. La base matematica deriva da approssimazioni discrete dei gradienti dell'immagine, con pesi del kernel sbilanciati verso i pixel centrali per migliorare la robustezza al rumore. Le caratteristiche principali comprendono una misura del gradiente direzionale che consente di determinare l'orientamento dei bordi, un carico computazionale relativamente basso, un'efficacia comprovata su immagini satellitari e aeree e requisiti minimi di regolazione dei parametri. Il filtraggio di Sobel trova ampia applicazione nel calcolo della pendenza e dell'esposizione del terreno, nell'estrazione dei confini degli elementi per i flussi di lavoro di rilevamento degli oggetti, nella delimitazione della rete fluviale da dati DEM e nella mappatura delle infrastrutture (strade, edifici, linee elettriche) da immagini ad alta risoluzione. L'interpretazione dell'output rivela che la magnitudo indica l'intensità del bordo (valori più alti = transizioni più nette), mentre le componenti direzionali (Gx, Gy) consentono l'analisi dell'orientamento. Le magnitudo tipiche del gradiente variano tra 0 e 256 per immagini a 8 bit; valori superiori a 100 indicano generalmente bordi significativi. Il rapporto Gx/Gy fornisce informazioni sull'orientamento del bordo: un rapporto vicino a 1 indica bordi a 45 gradi, un rapporto >>1 indica elementi orizzontali, un rapporto <<1 indica elementi verticali. I falsi positivi si verificano comunemente nelle regioni rumorose; il filtraggio mediano o le operazioni morfologiche riducono efficacemente i rilevamenti spuri. Combinare con la sogliatura per ottenere maschere binarie dei bordi adatte alle pipeline di segmentazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "variant": {
                "label": "Variante",
                "description": "Variante di dimensione del kernel: 3x3 (default) o 5x5."
              },
              "clip_tails": {
                "label": "Ritaglia le code",
                "description": "Percentuale opzionale di ritaglio simmetrico delle code (0-40)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "balance_contrast_enhancement": {
            "name": "Miglioramento bilanciato del contrasto",
            "description": "Riduce la dominante di colore in un'immagine RGB compatta usando stretch parabolici per canale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "band_mean": {
                "label": "Media della banda",
                "description": "Luminosità media di uscita desiderata per ogni canale (default 100.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "create_colour_composite": {
            "name": "Crea composizione a colori",
            "description": "Crea un composito di colore RGB compatto a partire da raster rosso, verde, blu e di opacità opzionale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "red": {
                "label": "Rosso",
                "description": "Percorso del raster della banda rossa o oggetto raster tipizzato."
              },
              "green": {
                "label": "Verde",
                "description": "Percorso del raster della banda verde o oggetto raster tipizzato."
              },
              "blue": {
                "label": "Blu",
                "description": "Percorso del raster della banda blu o oggetto raster tipizzato."
              },
              "opacity": {
                "label": "Opacità",
                "description": "Percorso opzionale del raster di opacità o oggetto raster tipizzato."
              },
              "enhance": {
                "label": "Migliora",
                "description": "Applica il miglioramento del contrasto con bilanciamento dopo la composizione (default true)."
              },
              "treat_zeros_as_nodata": {
                "label": "Tratta gli zeri come nodata",
                "description": "Tratta i valori zero negli ingressi RGB come nodata/sfondo (default false)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "direct_decorrelation_stretch": {
            "name": "Stiramento per decorrelazione diretta",
            "description": "Migliora la saturazione del colore di un'immagine RGB compatta riducendo la componente acromatica ed eseguendo uno stretch lineare dei canali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "achromatic_factor": {
                "label": "Fattore acromatico",
                "description": "Fattore di riduzione della componente grigia da 0 a 1 (default 0.5)."
              },
              "clip_percent": {
                "label": "Percentuale di ritaglio",
                "description": "Percentuale di ritaglio delle code per il ridimensionamento lineare dopo lo stiramento (default 1.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "false_colour_composite": {
            "name": "Composizione a falsi colori",
            "description": "Crea un raster composito a falsi colori (NIR/Rosso/Verde) da un pacchetto di dati di un sensore ottico supportato.",
            "params": {
              "wbe": {
                "label": "Wbe",
                "description": "Wbe"
              },
              "output": {
                "label": "Uscita",
                "description": "Uscita"
              }
            }
          },
          "gamma_correction": {
            "name": "Correzione gamma",
            "description": "La correzione gamma applica una regolazione non lineare della luminosità tramite una trasformazione a legge di potenza per ottimizzare il contrasto dell'immagine, la fedeltà di visualizzazione e la distribuzione percettiva della luminanza. La trasformazione matematica è I_corrected = I^(1/γ), dove γ (gamma) è un esponente specificato dall'utente che controlla la direzione e l'entità della regolazione della luminosità. Valori γ > 1 scuriscono le immagini (compensazione per display luminosi), mentre γ < 1 le schiariscono (compensazione per display scuri). L'implementazione opera in modo indipendente su ciascun pixel o banda spettrale, preservando le relazioni spaziali e regolando la scala delle intensità. Le caratteristiche principali comprendono la preservazione della struttura dell'immagine con la ridistribuzione dei valori tonali, un'efficienza computazionale che richiede solo tabelle di lookup, l'applicabilità a qualsiasi dato radiometrico, comprese immagini a 16/32 bit, e la reversibilità che consente la correzione inversa. La correzione gamma trova un'applicazione essenziale nella preparazione di immagini satellitari per l'interpretazione visiva compensando le caratteristiche del sensore, nella normalizzazione della luminosità delle ortofoto tra strisciate di volo o tipi di sensore, nel miglioramento delle immagini termiche per la visibilità degli elementi e nella pre-elaborazione di dati multispettrali per pipeline di machine learning in cui la normalizzazione dell'input migliora la convergenza. L'interpretazione dell'output mostra che i valori corretti seguono una scala a legge di potenza: i toni medi subiscono la regolazione relativa maggiore, mentre gli estremi vengono compressi meno. Per input a 8 bit (0-255), un gamma tipico di 0.4-0.6 schiarisce notevolmente le immagini; un gamma di 1.4-1.6 le scurisce sensibilmente. Le forme degli istogrammi si trasformano in modo prevedibile: gli istogrammi con asimmetria a sinistra (immagini scure) traggono vantaggio da γ < 1, mentre quelli con asimmetria a destra (immagini chiare) traggono vantaggio da γ > 1. Verificare l'output corretto tramite la visualizzazione dell'istogramma e l'ispezione visiva. Applicare in modo coerente sulle raccolte di immagini che richiedono una pre-elaborazione uniforme. I flussi di lavoro comuni concatenano la correzione gamma prima della scelta della soglia o della classificazione per garantire una visibilità equilibrata degli elementi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Esponente gamma in [0, 4], default 0.5."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "gaussian_contrast_stretch": {
            "name": "Stiramento gaussiano del contrasto",
            "description": "Esegue uno stretch del contrasto adattandolo a una distribuzione gaussiana di riferimento.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "num_tones": {
                "label": "Numero di toni",
                "description": "Numero di toni in uscita (default 256)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "histogram_equalization": {
            "name": "Equalizzazione dell'istogramma",
            "description": "Applica l'equalizzazione dell'istogramma per migliorare il contrasto dell'immagine.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "num_tones": {
                "label": "Numero di toni",
                "description": "Numero di toni in uscita (default 256)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "histogram_matching": {
            "name": "Adattamento dell'istogramma",
            "description": "Adatta l'istogramma di un'immagine a un istogramma di riferimento fornito.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "histogram": {
                "label": "Istogramma",
                "description": "Istogramma di riferimento come [[value, frequency], ...] o [{x, y}, ...]."
              },
              "is_cumulative": {
                "label": "È cumulativo",
                "description": "True se i valori dell'istogramma forniti sono già cumulativi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "histogram_matching_two_images": {
            "name": "Adattamento dell'istogramma tra due immagini",
            "description": "Adatta l'istogramma di un'immagine in ingresso all'istogramma di un'immagine di riferimento.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "reference": {
                "label": "Riferimento",
                "description": "Percorso del raster di riferimento o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "ihs_to_rgb": {
            "name": "Da IHS a RGB",
            "description": "La trasformazione inversa da IHS a RGB riconverte le componenti Intensità-Tinta-Saturazione nello spazio colore rosso-verde-blu, consentendo di recuperare il colore naturale da dati di telerilevamento scomposti. Le formule inverse operano su coordinate polari cilindriche, riconvertendo l'angolo di tinta, la magnitudo della saturazione e l'intensità in coordinate RGB cartesiane, mantenendo la stabilità numerica e riducendo al minimo gli artefatti di quantizzazione. Questa trasformazione è il complemento fondamentale delle operazioni da RGB a IHS, in particolare nei flussi di lavoro di pan-sharpening in cui l'intensità è stata sostituita con dati pancromatici ad alta risoluzione. Le caratteristiche principali comprendono un'inversione matematica esatta della trasformazione diretta che garantisce la coerenza nelle operazioni di andata e ritorno, la gestione automatica dei pixel acromatici con tinta indefinita che evita la propagazione di artefatti numerici, la stabilità numerica per valori di saturazione estremi prossimi allo zero e un'efficienza computazionale che consente un'integrazione fluida in pipeline di elaborazione rapide. La trasformazione inversa completa i flussi di lavoro di pan-sharpening recuperando immagini a colori naturali dopo la sostituzione dell'intensità con dati pancromatici, consentendo la visualizzazione a colori di dati a risoluzione migliorata, supportando la ricostruzione spettrale da componenti scomposte e validando la coerenza della trasformazione nei flussi di lavoro di controllo di qualità. L'output da IHS a RGB produce immagini a colori naturali a tre bande con la risoluzione spaziale ereditata dalla banda di intensità in ingresso, adatte alla visualizzazione diretta e a ulteriori analisi. Le bande in uscita rappresentano i canali rosso, verde e blu nell'ordine standard; i colori presentano un dettaglio spaziale migliorato se l'intensità è stata sostituita con dati pancromatici a risoluzione più alta, preservando le caratteristiche spettrali delle componenti originali di tinta e saturazione.",
            "params": {
              "intensity": {
                "label": "Intensità",
                "description": "Raster della banda di intensità (0–1)."
              },
              "hue": {
                "label": "Tonalità",
                "description": "Raster della banda di tonalità (0–2π radianti)."
              },
              "saturation": {
                "label": "Saturazione",
                "description": "Raster della banda di saturazione (0–1)."
              },
              "red_output": {
                "label": "Rosso in uscita",
                "description": "Percorso di uscita opzionale per la banda rossa."
              },
              "green_output": {
                "label": "Verde in uscita",
                "description": "Percorso di uscita opzionale per la banda verde."
              },
              "blue_output": {
                "label": "Blu in uscita",
                "description": "Percorso di uscita opzionale per la banda blu."
              }
            }
          },
          "min_max_contrast_stretch": {
            "name": "Stiramento del contrasto min-max",
            "description": "Esegue uno stretch lineare dei valori tra un minimo e un massimo specificati dall'utente.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "min_val": {
                "label": "Valore minimo",
                "description": "Valore minimo di ingresso per il ridimensionamento."
              },
              "max_val": {
                "label": "Valore massimo",
                "description": "Valore massimo di ingresso per il ridimensionamento."
              },
              "num_tones": {
                "label": "Numero di toni",
                "description": "Numero di toni in uscita (default 256)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "mosaic": {
            "name": "Mosaico",
            "description": "La mosaicatura combina più raster sovrapposti in un output senza soluzione di continuità tramite la registrazione geometrica, il ricampionamento su una proiezione e una griglia di pixel comuni e la fusione dei bordi per ridurre al minimo le discontinuità. L'algoritmo registra i raster usando coordinate geografiche o punti di controllo a terra, li ricampiona alla risoluzione e all'estensione di destinazione e applica una fusione pesata (Feather blending o ponderazione esponenziale) sulle regioni di sovrapposizione. I pixel sovrapposti vengono fusi tramite una media pesata sulla distanza dai bordi dei raster, creando transizioni morbide e preservando l'accuratezza dei pixel interni. Ciò produce mosaici raster continentali o globali senza soluzione di continuità, eliminando gli artefatti ai bordi e le discontinuità radiometriche. Le caratteristiche principali comprendono l'allineamento geometrico di più raster su una proiezione comune, la scelta del metodo di ricampionamento (bilineare, cubico, nearest-neighbour), la fusione dei bordi che elimina le giunzioni, la normalizzazione radiometrica che compensa le differenze di sensore o di illuminazione e il supporto per migliaia di raster in ingresso. Lo strumento gestisce automaticamente la priorità dei raster, evitando lacune grazie a strategie di riempimento intelligenti. Le applicazioni comprendono la produzione di mosaici continentali di immagini satellitari da raccolte di scene, la generazione di modelli digitali di elevazione continui da più strisciate di volo, la creazione di mosaici ottici compositi da immagini multitemporali, la costruzione di ortomosaici da rilievi con aeromobili a pilotaggio remoto (UAV) e la produzione di mappe di base per grandi aree da scene satellitari sovrapposte. La mosaicatura è essenziale per i flussi di lavoro di analisi continentali e globali. Interpretazione dell'output: i raster in uscita ereditano la proiezione e la risoluzione dell'input; le regioni di fusione mostrano valori interpolati che bilanciano i raster in ingresso. Gli artefatti ai bordi indicano una sovrapposizione insufficiente o una scarsa normalizzazione radiometrica; la valutazione esamina le giunzioni e la coerenza cromatica lungo i confini del mosaico. La gestione dei nodata ai bordi del mosaico richiede attenzione ai valori di riempimento e alla definizione dell'estensione. La valutazione della qualità comprende la verifica geometrica tramite punti di controllo a terra e la valutazione radiometrica che confronta i valori del mosaico con i raster in ingresso.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Elenco dei raster in ingresso come array di percorsi o stringa delimitata da virgole/punti e virgola."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di ricampionamento: 'nn' (default), 'bilinear' o 'cc'."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "mosaic_with_feathering": {
            "name": "Mosaico con sfumatura",
            "description": "Mosaica due raster e fonde con sfumatura le celle sovrapposte usando pesi basati sulla distanza dai bordi.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di ricampionamento: 'cc' (default), 'nn' o 'bilinear'."
              },
              "weight": {
                "label": "Peso",
                "description": "Esponente del peso di distanza usato per la sfumatura delle sovrapposizioni (default 4.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "normalized_difference_index": {
            "name": "Indice di differenza normalizzata",
            "description": "Calcola (band1 - band2) / (band1 + band2) da un raster multibanda.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "band1": {
                "label": "Banda 1",
                "description": "Indice (a base 1) della prima banda (default 1)."
              },
              "band2": {
                "label": "Banda 2",
                "description": "Indice (a base 1) della seconda banda (default 2)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "panchromatic_sharpening": {
            "name": "Pansharpening",
            "description": "Il pan-sharpening fonde immagini pancromatiche ad alta risoluzione con dati multispettrali a risoluzione inferiore usando il metodo di Brovey, una tecnica di moltiplicazione spettrale che migliora il dettaglio spaziale preservando le informazioni spettrali. Il metodo funziona ricampionando prima le bande multispettrali alla risoluzione pancromatica, quindi calcolando il rapporto di intensità tra l'immagine pancromatica e l'intensità multispettrale calcolata per scalare di conseguenza ciascuna banda. Questo approccio mantiene la fedeltà spettrale migliorando notevolmente la risoluzione spaziale. Le caratteristiche principali comprendono la preservazione delle caratteristiche spettrali originali, un'efficienza algebrica lineare che consente un'elaborazione rapida di immagini di grandi dimensioni, la compatibilità del ricampionamento automatico con input registrati per banda e la normalizzazione automatica per la coerenza radiometrica tra sensori eterogenei. La tecnica è ampiamente usata per il miglioramento delle immagini satellitari in applicazioni di mappatura quali la pianificazione urbana, il monitoraggio agricolo e l'esplorazione delle risorse, in cui sia il dettaglio spettrale sia quello spaziale sono fondamentali. Il pan-sharpening crea un output multispettrale migliorato con una definizione spaziale superiore, adatto all'interpretazione visiva e alla mappatura dettagliata. Le bande in uscita mantengono l'ordine originale delle bande multispettrali ma con una risoluzione di livello pancromatico, consentendo un'integrazione fluida nei flussi di lavoro standard di analisi delle immagini e nei sistemi GIS. L'aumento della risoluzione spaziale corrisponde alla risoluzione pancromatica in ingresso, consentendo l'estrazione di elementi a scale più fini rispetto ai dati multispettrali originali.",
            "params": {
              "red": {
                "label": "Rosso",
                "description": "Raster della banda rossa (richiesto a meno che non sia fornito 'composite')."
              },
              "green": {
                "label": "Verde",
                "description": "Raster della banda verde (richiesto a meno che non sia fornito 'composite')."
              },
              "blue": {
                "label": "Blu",
                "description": "Raster della banda blu (richiesto a meno che non sia fornito 'composite')."
              },
              "composite": {
                "label": "Composito",
                "description": "Composito multispettrale RGB impacchettato (mutuamente esclusivo con red/green/blue)."
              },
              "pan": {
                "label": "Pancromatico",
                "description": "Banda raster pancromatica."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di fusione: 'brovey' (default) o 'ihs'."
              },
              "output_mode": {
                "label": "Modalità di uscita",
                "description": "Codifica di uscita: 'packed' (default) o 'bands' (raster RGB a 3 bande)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "percentage_contrast_stretch": {
            "name": "Stiramento del contrasto percentuale",
            "description": "Percentage Contrast Stretch esegue un miglioramento lineare del contrasto rimuovendo percentuali specificate di valori estremi (code) dall'istogramma prima di estenderlo all'intera gamma dinamica. Algoritmo: rimuove in modo indipendente da ciascuna banda i valori dei percentili inferiore e superiore, mappa linearmente l'intervallo restante sull'intervallo di uscita (tipicamente 0-255 o l'intera profondità di bit) ed elimina gli estremi radiometrici che causano uno scarso contrasto. La scelta del percentile (comunemente 2-3%) bilancia il miglioramento del contrasto con la preservazione dell'integrità dei dati. Caratteristiche principali: rimuove automaticamente i valori anomali radiometrici, evita la compressione del contrasto dovuta a valori anomali, applicabile per banda o globalmente, trasformazione lineare computazionalmente efficiente, operazione invertibile. Funzionalità: gestisce gli artefatti radiometrici, migliora la visibilità degli elementi sottili, si adatta a intervalli di input variabili. Casi d'uso: pre-elaborazione prima della classificazione o della fusione, miglioramento di una gamma dinamica sottoutilizzata, preparazione per la visualizzazione multispettrale, normalizzazione radiometrica tra scene. Applicazioni: miglioramento di immagini satellitari per l'interpretazione visiva, pre-elaborazione per il rilevamento di frane basato su dati satellitari, normalizzazione pre-classificazione, recupero di immagini d'archivio. Interpretazione dell'output: le immagini migliorate mostrano un contrasto superiore; i valori estremi vengono troncati; gli elementi sottili prima nascosti diventano visibili; i valori di troncamento specifici per banda rivelano la qualità della distribuzione radiometrica.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "clip": {
                "label": "Ritaglia",
                "description": "Percentuale di ritaglio per percentile (default 1.0)."
              },
              "tail": {
                "label": "Coda",
                "description": "Modalità di ritaglio delle code: both (default), upper o lower."
              },
              "num_tones": {
                "label": "Numero di toni",
                "description": "Numero di toni in uscita (default 256)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "piecewise_contrast_stretch": {
            "name": "Stiramento del contrasto a tratti",
            "description": "Esegue uno stretch lineare a tratti del contrasto usando punti di interruzione specificati dall'utente.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "function": {
                "label": "Funzione",
                "description": "Stringa di istruzione dei punti di interruzione, es. '(50,0.1);(120,0.6);(180,0.85)'."
              },
              "greytones": {
                "label": "Toni di grigio",
                "description": "Numero di toni in uscita per i raster non RGB (default 1024)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "resample": {
            "name": "Ricampiona",
            "description": "Il ricampionamento delle immagini modifica la risoluzione dei pixel usando metodi di interpolazione quali nearest neighbor (il più rapido, con il minimo smussamento), bilineare (interpolazione lineare tra pixel adiacenti), bicubico (adattamento con polinomi cubici) e cubic spline (interpolazione continua e morbida). Il ricampionamento è essenziale per la registrazione geometrica, per creare stack multispettrali a risoluzione uniforme da sensori a risoluzione mista e per integrare dati ausiliari a scale diverse. Ciascun metodo prevede l'adattamento di kernel di interpolazione locali ai valori originali dei pixel, la valutazione dei kernel nelle nuove posizioni dei pixel e la restituzione dei valori interpolati. Il nearest neighbor preserva i valori radiometrici (adatto ai dati categoriali); i metodi di ordine superiore smussano i bordi e riducono l'aliasing ma sfocano i confini netti. Le caratteristiche principali comprendono metodi di interpolazione selezionabili che ottimizzano il compromesso tra velocità e accuratezza, la specifica della risoluzione di uscita tramite la dimensione del pixel o le dimensioni di destinazione, la gestione automatica del valore di sfondo per le aree al di fuori dell'estensione dell'input e un filtraggio antialiasing opzionale che riduce gli artefatti di ricampionamento. Le applicazioni comprendono la registrazione delle immagini che allinea i dati su griglie comuni, l'armonizzazione della risoluzione che unifica stack multispettrali con risoluzioni native diverse, il sottocampionamento che riduce il volume dei dati preservando i pattern spaziali e il sovracampionamento che migliora il dettaglio visivo per la visualizzazione. L'output del ricampionamento integra le immagini a una risoluzione coerente. La risoluzione di uscita corrisponde a quella specificata dall'utente; il metodo di interpolazione influisce sulla definizione dei bordi (il nearest neighbor preserva i bordi; i metodi di ordine superiore li smussano); le aree di sfondo (al di fuori dell'estensione dell'input) ricevono valori di riempimento configurabili; l'output si integra perfettamente nei flussi di lavoro di analisi multispettrale.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Elenco dei raster in ingresso come array di percorsi o stringa delimitata da virgole/punti e virgola."
              },
              "base": {
                "label": "Base",
                "description": "Raster di base opzionale che definisce estensione e griglia di uscita. Ha la precedenza su cell_size."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita opzionale quando base non è fornito."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di ricampionamento: 'cc' (default), 'nn' o 'bilinear'."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "rgb_to_ihs": {
            "name": "Da RGB a IHS",
            "description": "La trasformazione da RGB a Intensità-Tinta-Saturazione scompone lo spazio colore rosso-verde-blu in componenti percettivamente rilevanti: intensità (luminosità), tinta (colore) e saturazione (purezza del colore). La scomposizione usa formule matematiche standard che convertono i valori tristimolo RGB in coordinate polari cilindriche, in cui l'intensità rappresenta la luminanza, la tinta codifica l'angolo del colore e la saturazione misura la concentrazione del colore. Questo spazio colore è particolarmente utile nel telerilevamento perché l'intensità può essere sostituita con dati ad alta risoluzione preservando le caratteristiche cromatiche originali tramite la trasformazione inversa. Le caratteristiche principali comprendono una formulazione numericamente stabile che gestisce in modo robusto i casi limite (pixel acromatici), la conservazione dell'intera gamma dinamica senza troncamenti né perdita di informazioni, la scalatura automatica delle bande per risultati coerenti con intervalli di input diversi e un'efficienza computazionale adatta a grandi stack multispettrali. La tecnica serve molteplici applicazioni: flussi di lavoro di pan-sharpening in cui l'intensità viene sostituita con dati pancromatici, miglioramento della visualizzazione a colori, pre-elaborazione spettrale per algoritmi di classificazione e conversioni da colore a scala di grigi che conservano le informazioni percettive. La trasformazione da RGB a IHS è essenziale per le tecniche di fusione che combinano la risoluzione pancromatica con le informazioni cromatiche multispettrali. L'output comprende tre file a banda singola che rappresentano le componenti di intensità, tinta e saturazione, utilizzabili in modo indipendente nei flussi di lavoro di analisi. La banda di intensità approssima la luminanza; la tinta varia da 0 a 360 gradi e codifica le informazioni cromatiche; la saturazione varia da 0 a 100 percento e indica la purezza del colore.",
            "params": {
              "red": {
                "label": "Rosso",
                "description": "Raster della banda rossa (mutuamente esclusivo con 'composite')."
              },
              "green": {
                "label": "Verde",
                "description": "Raster della banda verde (mutuamente esclusivo con 'composite')."
              },
              "blue": {
                "label": "Blu",
                "description": "Raster della banda blu (mutuamente esclusivo con 'composite')."
              },
              "composite": {
                "label": "Composito",
                "description": "Raster composito RGB impacchettato (mutuamente esclusivo con red/green/blue)."
              },
              "intensity_output": {
                "label": "Intensità in uscita",
                "description": "Percorso di uscita opzionale per la banda di intensità."
              },
              "hue_output": {
                "label": "Tonalità in uscita",
                "description": "Percorso di uscita opzionale per la banda di tonalità."
              },
              "saturation_output": {
                "label": "Saturazione in uscita",
                "description": "Percorso di uscita opzionale per la banda di saturazione."
              }
            }
          },
          "sigmoidal_contrast_stretch": {
            "name": "Stiramento sigmoidale del contrasto",
            "description": "Esegue uno stretch sigmoidale del contrasto usando guadagno e cutoff.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "cutoff": {
                "label": "Taglio",
                "description": "Punto medio della sigmoide in unità normalizzate (default 0.0)."
              },
              "gain": {
                "label": "Guadagno",
                "description": "Parametro di guadagno della sigmoide (default 1.0)."
              },
              "num_tones": {
                "label": "Numero di toni",
                "description": "Numero di toni in uscita (default 256)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "split_colour_composite": {
            "name": "Separa composizione a colori",
            "description": "Suddivide un raster composito a colori RGB compatto in tre raster separati a banda singola che rappresentano i canali rosso, verde e blu. Algoritmo: questo strumento estrae le singole bande di colore da un'immagine composita in cui i valori R, G e B sono compattati in un unico raster (spesso con la codifica standard RGB a 24 bit o RGBA a 32 bit). La separazione viene eseguita tramite operazioni bit a bit per isolare ciascuna componente di canale a 8 bit. Caratteristiche principali: preserva i valori radiometrici originali (0–255), gestisce i compositi RGB standard e i formati estesi, produce in uscita tre raster georeferenziati indipendenti. Casi d'uso: analisi spettrale in cui le singole bande devono essere elaborate separatamente; creazione di dataset di input per il calcolo di indici di vegetazione (NDVI, EVI); preparazione dei dati per operazioni di algebra tra bande; possibilità di trasformazioni cromatiche avanzate come la conversione da RGB a IHS; estrazione di bande specifiche per flussi di lavoro di classificazione supervisionata o non supervisionata. Applicazioni: analisi di immagini di telerilevamento, pre-elaborazione di dati satellitari, preparazione dell'analisi multispettrale, pipeline di miglioramento delle immagini. Interpretazione dell'output: vengono prodotti tre raster a banda singola con estensione spaziale, proiezione e georeferenziazione identiche a quelle del composito in ingresso. Ciascuna banda in uscita contiene valori radiometrici a 8 bit (0–255) che rappresentano l'intensità di quella componente cromatica nella scena. Le statistiche della banda (min, max, media) riflettono le caratteristiche spettrali di quel canale di colore; i valori dominanti indicano la prevalenza cromatica nell'immagine. I raster in uscita sono immediatamente adatti a calcoli tra bande, indici spettrali o ulteriori flussi di lavoro di elaborazione multibanda.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster RGB impacchettato in ingresso."
              },
              "red_output": {
                "label": "Rosso in uscita",
                "description": "Percorso di uscita opzionale per la banda rossa."
              },
              "green_output": {
                "label": "Verde in uscita",
                "description": "Percorso di uscita opzionale per la banda verde."
              },
              "blue_output": {
                "label": "Blu in uscita",
                "description": "Percorso di uscita opzionale per la banda blu."
              }
            }
          },
          "standard_deviation_contrast_stretch": {
            "name": "Stiramento del contrasto per deviazione standard",
            "description": "Esegue uno stretch lineare del contrasto usando la media più/meno un moltiplicatore della deviazione standard.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "clip": {
                "label": "Ritaglia",
                "description": "Moltiplicatore della deviazione standard usato per derivare i limiti di ritaglio (default 2.0)."
              },
              "num_tones": {
                "label": "Numero di toni",
                "description": "Numero di toni in uscita (default 256)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "true_colour_composite": {
            "name": "Composizione a colori naturali",
            "description": "Crea un raster composito a colori naturali (RGB) da un pacchetto di dati di un sensore ottico supportato.",
            "params": {
              "wbe": {
                "label": "Wbe",
                "description": "Wbe"
              },
              "output": {
                "label": "Uscita",
                "description": "Uscita"
              }
            }
          },
          "adaptive_filter": {
            "name": "Filtro adattivo",
            "description": "L'Adaptive Filter regola dinamicamente l'intensità del filtraggio in base alle statistiche locali dell'immagine (media, varianza, curtosi), consentendo uno smussamento consapevole del contesto che risponde alle caratteristiche della scena. L'implementazione suddivide le immagini in finestre mobili, calcola le statistiche locali (rilevando le regioni dominate dal rumore rispetto a quelle dominate dagli elementi) e seleziona di conseguenza i parametri del filtro. Le regioni piatte vengono smussate in modo aggressivo; le regioni complesse vengono filtrate delicatamente. La base matematica usa test statistici per identificare il carattere locale: le regioni con varianza inferiore alla soglia vengono smussate fortemente; quelle che superano la soglia preservano il dettaglio. Le caratteristiche principali comprendono l'adattamento automatico dei parametri (l'utente specifica gli intervalli; l'algoritmo seleziona localmente), l'applicabilità a qualsiasi kernel di filtro (gaussiano, mediano, morfologico) e l'efficacia su immagini ottiche e radar. Il filtraggio adattivo eccelle nella pre-elaborazione di mosaici satellitari eterogenei (sensori e condizioni di acquisizione diversi), nello smussamento di nuvole di punti LiDAR (preserva i bordi della vegetazione nelle foreste; smussa il suolo nelle aree aperte), nella riduzione selettiva dello speckle SAR che rispetta sia gli obiettivi sia lo sfondo e nell'impilamento di immagini multitemporali. L'interpretazione dell'output rivela che le regioni omogenee subiscono un filtraggio intenso (bassa varianza locale → forte smussamento), mentre le regioni complesse vengono filtrate in modo conservativo (alta varianza → elaborazione minima). Il raggio di smussamento si adatta dinamicamente per regione: le aree piatte ricevono un filtraggio a raggio ampio; le aree testurizzate ricevono un filtraggio a raggio ridotto o nessun filtraggio. Gli intervalli dell'output restano entro quelli dell'input; esaminare la mappa spaziale dell'intensità del filtraggio per validare l'adattamento. Le statistiche si spostano verso le medie locali nelle regioni lisce; le regioni complesse restano in gran parte invariate. Gli artefatti comuni comprendono un possibile eccesso di smussamento ai confini tra regioni (di norma si applica una transizione morbida) e la sensibilità alle relazioni tra rumore e varianza. Verificare l'adattamento analizzando le mappe della varianza locale. Applicare nelle pipeline di pre-elaborazione automatizzate che gestiscono dati multisorgente in cui un filtraggio uniforme non è sufficiente.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dell'intorno in pixel (intero dispari, default 11)."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dell'intorno in pixel (intero dispari, default 11)."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Soglia z-score in valore assoluto per la sostituzione con la media (default 2.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "anisotropic_diffusion_filter": {
            "name": "Filtro a diffusione anisotropa",
            "description": "Il filtraggio a diffusione anisotropa implementa uno smussamento iterativo che preserva i bordi tramite processi di diffusione direzionale che distinguono tra bordi e regioni piatte. L'algoritmo aggiorna iterativamente ciascun pixel in base alle differenze pesate con i vicini, usando una funzione di conduttanza che riduce la diffusione attraverso i confini ad alto gradiente e consente lo smussamento all'interno delle regioni omogenee. L'implementazione risolve l'equazione differenziale alle derivate parziali ∂I/∂t = div(c(|∇I|)∇I), in cui la conduttanza c(·) si adatta alla magnitudo del gradiente locale. Questo approccio guidato dai dati preserva le transizioni nette riducendo progressivamente il rumore nelle aree uniformi. Le caratteristiche principali comprendono una vera preservazione dei bordi senza maschere esplicite dei bordi, la selezione automatica della scala tramite il numero di iterazioni, una riduzione efficace del rumore che mantiene la nitidezza degli elementi e l'applicabilità a dati a banda singola e multispettrali. La diffusione anisotropa eccelle nello smussamento di nuvole di punti LiDAR preservando le discontinuità del terreno, nella rimozione del rumore da immagini satellitari per il rilevamento di elementi geologici sottili, nella riduzione dello speckle SAR mantenendo i bordi degli obiettivi radar e nelle immagini mediche/scientifiche in cui la fedeltà dei bordi è fondamentale. L'interpretazione dell'output richiede di comprendere che le regioni lisce si omogeneizzano progressivamente (i valori convergono verso la media locale), mentre i bordi si accentuano fino a stabilizzarsi. Le prime iterazioni (t<5) producono una lieve riduzione del rumore; le iterazioni intermedie (t=5-20) forniscono uno smussamento sostanziale; un numero eccessivo di iterazioni (t>50) rischia un'accentuazione eccessiva dei confini o elementi falsi. I valori dell'output restano negli intervalli dei dati sorgente; le statistiche si spostano verso le medie regionali man mano che l'elaborazione procede. Monitorare la varianza dell'output per valutare la completezza dello smussamento. Le metriche comuni comprendono il miglioramento del rapporto segnale/rumore e indici di nitidezza dei bordi. Applicare con attenzione nei flussi di lavoro multiscala in cui la precisione della preservazione dei bordi influisce direttamente sull'accuratezza della classificazione o del rilevamento dei cambiamenti a valle.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "iterations": {
                "label": "Iterazioni",
                "description": "Numero di iterazioni di diffusione (default 10)."
              },
              "kappa": {
                "label": "Kappa",
                "description": "Parametro di sensibilità ai bordi (default 20.0)."
              },
              "lambda": {
                "label": "Lambda",
                "description": "Passo temporale in (0, 0.25], default 0.2."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "bilateral_filter": {
            "name": "Filtro bilaterale",
            "description": "Smussamento bilaterale che preserva i bordi tramite kernel spaziali + di intensità. Superiore al gaussiano per la preservazione dei dettagli. Sigma_dist=raggio, sigma_int=soglia di preservazione dei bordi. Supporta RGB.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "sigma_dist": {
                "label": "Sigma di distanza",
                "description": "Deviazione standard del kernel gaussiano spaziale in pixel (0.5–20.0, default 0.75)."
              },
              "sigma_int": {
                "label": "Sigma di intensità",
                "description": "Deviazione standard del kernel gaussiano di intensità in unità di valore del raster (default 1.0)."
              },
              "treat_as_rgb": {
                "label": "Tratta come RGB",
                "description": "Impostare true per forzare l'elaborazione HSI dell'RGB impacchettato. Se false, l'RGB impacchettato può comunque essere rilevato automaticamente dai metadati del raster."
              },
              "assume_three_band_rgb": {
                "label": "Assumi RGB a tre bande",
                "description": "Se true (default), i raster uint8/uint16 a 3 bande possono essere trattati come RGB nei filtri che supportano l'elaborazione dell'intensità RGB a 3 bande."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "closing": {
            "name": "Chiusura",
            "description": "Esegue un'operazione morfologica di chiusura usando un elemento strutturante rettangolare.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dispari dell'intorno (default 11)."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dispari dell'intorno (default uguale a filter_size_x)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "conservative_smoothing_filter": {
            "name": "Filtro di smoothing conservativo",
            "description": "Conservative Smoothing implementa un filtraggio non lineare sostituendo ciascun pixel con la media dei vicini simili (entro un intervallo di intensità definito), preservando i bordi e riducendo il rumore. L'implementazione esamina gli intorni, identifica i pixel che rientrano nella soglia di intensità rispetto al pixel centrale e ne calcola la media. Formulazione matematica: F = (1/N) Σ(I_j : |I_j - I_center| < T), dove T è la soglia di similarità e N è il numero di pixel simili. Le caratteristiche principali comprendono una definizione semplice della similarità basata su soglia, l'efficacia su immagini ottiche e radar, l'interpretabilità dei parametri (la soglia controlla la nitidezza dei bordi) e un carico computazionale minimo. Il Conservative Smoothing eccelle nella pre-elaborazione di immagini satellitari multispettrali (riduce il rumore preservando i confini spettrali), nel miglioramento di immagini termiche (smussa il rumore radiometrico mantenendo le discontinuità di temperatura), nello smussamento della classificazione LiDAR (preserva i confini tra vegetazione e suolo) e nella pre-elaborazione di dati di rilievo rumorosi. L'interpretazione dell'output mostra che le regioni omogenee vengono mediate completamente (tutti i vicini sono simili), mentre i bordi vengono filtrati minimamente (pixel simili solo dallo stesso lato). Il parametro di soglia controlla la preservazione dei bordi: una soglia piccola (similarità rigorosa) produce uno smussamento lieve; una soglia grande (similarità ampia) produce uno smussamento aggressivo che può far perdere i bordi. I valori in uscita derivano esattamente dai valori dei vicini in ingresso (nessuna interpolazione; l'output è la media di valori esistenti). Le statistiche si spostano verso i cluster locali; le regioni eterogenee mostrano cambiamenti minimi. Verificare l'efficacia della soglia tramite ispezione visiva e analisi dell'istogramma locale. Gli artefatti comuni comprendono uno smussamento insufficiente se le soglie sono troppo rigorose e la sfocatura dei bordi se sono troppo ampie. Il numero di iterazioni consente un filtraggio progressivo: un singolo passaggio fornisce uno smussamento delicato; più passaggi ne intensificano l'effetto. Applicare prima della classificazione quando occorre ridurre la confusione tra categorie dovuta al rumore mantenendo netti i confini delle classi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dell'intorno in pixel (intero dispari, default 3)."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dell'intorno in pixel (intero dispari, default 3)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "diff_of_gaussians_filter": {
            "name": "Filtro differenza di gaussiane",
            "description": "Il filtraggio Difference of Gaussians (DoG) rileva bordi ed elementi fini sottraendo due versioni sfocate con gaussiane di raggio diverso, creando un filtro passa-banda che enfatizza le frequenze spaziali intermedie. L'implementazione calcola due sfocature gaussiane (raggio piccolo σ₁ e raggio grande σ₂), quindi le sottrae: DoG = G(σ₁) - G(σ₂). Questa combinazione non lineare esalta bordi e creste sopprimendo sia il rumore fine sia le tendenze di illuminazione ampie. Le caratteristiche principali comprendono una risposta in frequenza regolabile (il rapporto σ₂/σ₁ controlla le caratteristiche del passa-banda), un output centrato sullo zero (bipolare: valori positivi e negativi), l'applicabilità al rilevamento dei bordi e all'estrazione di caratteristiche e un'efficienza computazionale grazie al riuso delle gaussiane. La Difference of Gaussians eccelle nel rilevamento di strutture geologiche (faglie e lineamenti appaiono come risposte DoG elevate), nell'estrazione degli edifici da ortofoto, nel miglioramento della tessitura fine nei mosaici di telerilevamento e nei modelli di elaborazione ispirati alle neuroscienze. L'interpretazione dell'output mostra che i bordi producono risposte di picco (positive sul lato chiaro, negative sul lato scuro) con l'attraversamento dello zero esattamente in corrispondenza delle transizioni. Il rilevamento degli attraversamenti dello zero rivela i veri bordi indipendentemente dalla loro direzione. La magnitudo DoG indica l'intensità del bordo; l'intervallo tipico va da -1000 a +1000 per input a 8 bit, a seconda del contrasto locale. Il rapporto σ₂/σ₁ determina il centro del passa-banda: un rapporto ~2 enfatizza elementi molto fini; un rapporto ~5 enfatizza elementi intermedi; un rapporto ~10 enfatizza elementi più grossolani. Distribuzioni bimodali dell'output (picchi agli estremi positivo e negativo) indicano una buona separazione dei bordi. Gli artefatti comuni comprendono aloni attorno ai bordi forti e una possibile risposta insufficiente se la banda di frequenza non corrisponde alla scala degli elementi. Combinare con la sogliatura della magnitudo per l'estrazione dei bordi. Applicare prima della post-elaborazione morfologica per un'estrazione robusta di elementi da immagini satellitari rumorose.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Sigma gaussiano minore (0.25-20.0, default 2.0)."
              },
              "sigma2": {
                "label": "Sigma 2",
                "description": "Sigma gaussiano maggiore (0.5-20.0, default 4.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "diversity_filter": {
            "name": "Filtro di diversità",
            "description": "Calcola la diversità in una finestra mobile come numero di valori/classi univoci all'interno dell'intorno. Misura l'eterogeneità locale: diversità alta = terreno/classi variati, diversità bassa = omogeneità. Rivela tessitura, frammentazione e diversità dei pattern. Spesso applicato a immagini classificate o categoriali per identificare zone di transizione/bordo.\n\nIl filtro di diversità crea una metrica della variazione locale indipendente dai valori specifici. Utile per l'ecologia del paesaggio (diversità degli habitat, metriche di frammentazione), la valutazione della qualità della classificazione (diversità alta = aree miste/incerte) e l'analisi della tessitura. Applicata ai dati di elevazione, la diversità indica la rugosità alla scala dell'intorno. Applicata alla classificazione, identifica le zone miste/di ecotono/di confine.\n\nApplicazioni: (1) mappatura della frammentazione del paesaggio (diversità alta = mosaico variegato, diversità bassa = macchie uniformi), (2) valutazione della confidenza/incertezza della classificazione (diversità alta = area incerta), (3) analisi della tessitura (mappatura dell'eterogeneità), (4) rilevamento di bordi/confini tramite i picchi di diversità, (5) diversità degli habitat per l'analisi ecologica (l'idoneità dipende dalla diversità locale).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza della finestra in pixel (intero dispari, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza della finestra in pixel (intero dispari, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "edge_preserving_mean_filter": {
            "name": "Filtro di media con preservazione dei bordi",
            "description": "Il filtro Edge-Preserving Mean esegue una media selettiva dei pixel calcolando le medie locali ed escludendo i pixel anomali che probabilmente rappresentano bordi o rumore. L'implementazione ordina i pixel dell'intorno, rimuove i valori estremi (il più basso e il più alto, oppure i valori che superano una soglia statistica) e calcola la media dei valori restanti. Questo approccio robusto bilancia lo smussamento con la preservazione della nitidezza. Le varianti comprendono la media pesata che privilegia i pixel centrali e la scelta adattiva della soglia in base alle statistiche locali. Le caratteristiche principali comprendono un controllo semplice dei parametri (numero di esclusioni o soglia), un'efficienza computazionale grazie all'ordinamento di piccoli intorni, una riduzione efficace del rumore senza sfocare i dettagli e l'applicabilità a dati ottici, radar e termici. Il filtraggio Edge-Preserving Mean eccelle nella pre-elaborazione di immagini satellitari ottiche per il calcolo di indici di vegetazione (rimuove ombre e nuvole senza sfocare gli elementi), nello smussamento di DEM preservando le discontinuità di pendenza, nella rimozione del rumore da immagini termiche mantenendo la nitidezza dei confini e nella preparazione di ortofoto per la digitalizzazione manuale. L'interpretazione dell'output rivela che i valori anomali rimossi si concentrano sui bordi e nelle regioni rumorose; la media dei valori restanti crea uno smussamento locale. I parametri di esclusione controllano la nitidezza dei bordi: escludere un singolo estremo rimuove il rumore sale e pepe; escludere più estremi produce risultati più lisci con transizioni dei bordi più morbide. Gli intervalli dell'output restano entro quelli dell'input; le statistiche si spostano verso le medie dei valori non anomali. Monitorare la differenza tra output e input per identificare le regioni filtrate (tipicamente aree ad alta varianza). La qualità della preservazione dei bordi dipende dall'accuratezza dell'identificazione dei valori anomali; verificare visivamente che gli elementi restino nitidi. Gli artefatti comuni comprendono uno smussamento inadeguato se le soglie sono troppo rigorose e un filtraggio eccessivo se il numero di esclusioni è troppo alto. Il numero di iterazioni consente un filtraggio progressivo; un singolo passaggio fornisce uno smussamento delicato. Applicare prima della classificazione basata su soglia per ridurre le errate classificazioni dovute al rumore mantenendo i confini degli elementi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size": {
                "label": "Dimensione del filtro",
                "description": "Dimensione dell'intorno quadrato in pixel (intero dispari, default 11)."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Differenza massima in valore assoluto dai vicini da includere nella media locale (default 15.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "emboss_filter": {
            "name": "Filtro a rilievo",
            "description": "Il filtro di rilievo (emboss) esalta i bordi tramite un'ombreggiatura direzionale, creando un caratteristico aspetto di rilievo tridimensionale in cui i bordi appaiono come superfici rialzate o incavate a seconda dell'illuminazione direzionale simulata. Questo filtro applica un kernel 3×3 che combina il rilevamento dei bordi con un'illuminazione unidirezionale, di solito simulando la luce dal quadrante superiore sinistro, creando un forte contrasto visivo ai confini e preservando le regioni lisce. La trasformazione emboss sottrae i valori pesati dei vicini in direzioni specifiche, producendo un output in cui luci e ombre accentuano le discontinuità topografiche e degli elementi. Le caratteristiche principali comprendono un controllo direzionale intuitivo che consente di regolare la direzione della luce simulata (varianti in otto direzioni), l'incorporazione naturale della percezione 3D che migliora l'interpretazione visiva e prestazioni robuste in condizioni di illuminazione diverse delle immagini sorgente. Il filtro emboss serve per applicazioni di controllo di qualità, visualizzazione interpretativa ed enfasi dei confini degli elementi. I casi d'uso comprendono il miglioramento visivo per l'interpretazione geologica, in cui i confini mineralogici diventano visibili come pattern di rilievo, l'interpretazione di fotografie aeree migliorando la visibilità di confini sottili, la produzione cartografica in cui modelli digitali di elevazione in rilievo generano mappe del rilievo efficaci e il rilevamento di elementi archeologici in cui le strutture sepolte appaiono come lievi variazioni topografiche. L'interpretazione dell'output tratta i valori alti come superfici illuminate e quelli bassi come ombre, creando una profondità percettiva che l'occhio umano interpreta naturalmente come rilievo. L'output emboss richiede tipicamente una scalatura nell'intervallo di visualizzazione 0-255; l'output grezzo contiene spesso valori negativi che rappresentano le aree in ombra. L'effetto è puramente visivo: l'emboss non calcola una vera illuminazione né crea derivate dell'elevazione. Per le immagini multispettrali, applicarlo alle componenti principali o a bande selezionate in base agli obiettivi analitici. La post-elaborazione comprende spesso il miglioramento del contrasto o il tone mapping per ottimizzare l'impatto visivo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "direction": {
                "label": "Direzione",
                "description": "Direzione del rilievo: n,s,e,w,ne,nw,se,sw."
              },
              "clip_amount": {
                "label": "Quantità di ritaglio",
                "description": "Percentuale opzionale di ritaglio simmetrico delle code (0-40)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "fast_almost_gaussian_filter": {
            "name": "Filtro gaussiano rapido approssimato",
            "description": "Il filtro Fast Almost Gaussian fornisce uno smussamento rapido che approssima quello gaussiano tramite un filtraggio iterativo separabile a box (media), ottenendo una risposta di sfocatura quasi gaussiana con complessità computazionale O(N) indipendentemente dal raggio di sfocatura. L'implementazione applica convoluzioni a box successive (ciascuna delle quali calcola le medie locali dei pixel) per approssimare la distribuzione gaussiana cumulativa; N iterazioni approssimano kernel gaussiani via via più grandi. La base matematica sfrutta il teorema del limite centrale: la convoluzione ripetuta di funzioni box tende asintoticamente alla distribuzione gaussiana. Le caratteristiche principali comprendono una velocità di calcolo che consente lo smussamento con kernel grandi su immagini di grandi dimensioni, un'implementazione separabile che riduce i requisiti di memoria, il controllo dei parametri tramite il numero di iterazioni (che controlla il raggio di sfocatura) e l'efficacia con qualsiasi tipo di dato. Il filtraggio Fast Almost Gaussian eccelle nella creazione rapida di piramidi di immagini per l'analisi multiscala, nella navigazione in tempo reale di immagini satellitari, nella pre-elaborazione di enormi dataset di telerilevamento prima della classificazione e nei visualizzatori di immagini interattivi che richiedono uno smussamento reattivo. L'interpretazione dell'output mostra che il numero di iterazioni è direttamente correlato al raggio di sfocatura: N=1 produce uno smussamento minimo; N=3-5 fornisce una sfocatura moderata; N>10 crea uno smussamento forte che approssima gaussiane a kernel grande. I valori in uscita si spostano progressivamente verso la media locale all'aumentare delle iterazioni; la riduzione della varianza segue schemi prevedibili. I valori restano entro gli intervalli dei dati in ingresso. Il confronto con il vero filtraggio gaussiano mostra un'approssimazione accettabile, con un errore del 2-5% per la maggior parte delle applicazioni. Il guadagno di velocità rispetto al vero filtraggio gaussiano aumenta notevolmente con raggi grandi: da 5 a 20 volte più veloce per raggi >20 pixel. Gli artefatti minori comprendono una lieve ondulazione lungo i bordi (artefatti del box che si accumulano nelle iterazioni) e una gestione dei confini leggermente diversa rispetto alla gaussiana. Monitorare gli istogrammi dell'output alla ricerca di distribuzioni multimodali che indichino uno smussamento sufficiente. Applicare nelle pipeline di pre-elaborazione delle immagini in cui la velocità giustifica piccoli errori di approssimazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma gaussiano approssimato (>=1.8 consigliato, default 1.8)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "flip_image": {
            "name": "Capovolgi immagine",
            "description": "Capovolge un'immagine verticalmente, orizzontalmente o in entrambe le direzioni.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "direction": {
                "label": "Direzione",
                "description": "Direzione di capovolgimento: vertical (default), horizontal o both."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "frangi_filter": {
            "name": "Filtro di Frangi",
            "description": "Esegue un miglioramento multiscala della vesselness di Frangi per rilevare strutture simili a vasi (tubolari) a più scale. Si basa sull'analisi degli autovalori della matrice hessiana. Risponde fortemente agli elementi lineari (vasi, strade, fiumi) e debolmente alle strutture a forma di blob. L'analisi multiscala (provando più valori di sigma) rileva automaticamente vasi di diverse larghezze. Ampiamente usato nell'imaging medico e nel telerilevamento per il rilevamento di elementi lineari. La vesselness di Frangi usa le curvature principali (autovalori hessiani) per classificare la struttura locale: vesselness alta per gli elementi lineari, bassa per altopiani o blob. L'implementazione multiscala applica il filtro a più valori di sigma (larghezza) e ne combina le risposte. Eccellente per rilevare strade, fiumi e reti di vasi. Computazionalmente moderato per scale multiple. Output altamente interpretabile: risponde a elementi riconoscibili. Applicazioni: (1) rilevamento delle strade in immagini satellitari, (2) estrazione della rete fluviale/dei corsi d'acqua, (3) rilevamento di elementi lineari in generale, (4) rilevamento dei vasi (imaging medico), (5) rilevamento di strutture multiscala.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "scales": {
                "label": "Scale",
                "description": "Elenco di scale di tipo gaussiano in pixel (default [1.0, 2.0, 3.0])."
              },
              "beta": {
                "label": "Beta",
                "description": "Parametro beta di Frangi per la soppressione dei blob (default 0.5)."
              },
              "c": {
                "label": "C",
                "description": "Parametro c di Frangi per la sensibilità alla struttura (default 15.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "gabor_filter_bank": {
            "name": "Banco di filtri di Gabor",
            "description": "Esegue un filtraggio della risposta di Gabor multiorientamento: analisi direzionale della tessitura. Applica un banco di filtri di Gabor a più orientamenti (tipicamente 0°, 45°, 90°, 135°) per estrarre caratteristiche di tessitura direzionali. Le risposte di Gabor indicano l'intensità e l'orientamento della tessitura. Utile per il rilevamento di elementi direzionali, la caratterizzazione della tessitura e l'analisi di pattern orientati. Ciascun orientamento viene prodotto in uscita separatamente. Il filtraggio di Gabor estrae la tessitura direzionale tramite convoluzione con wavelet specifiche per orientamento. Ciascun orientamento rivela gli elementi allineati con quella direzione. Produce più bande in uscita (una per orientamento) che rivelano la direzione e l'intensità della tessitura locale. Le risposte di Gabor sono fondamentali per l'estrazione di caratteristiche di tessitura e il rilevamento di oggetti nella computer vision. Il banco di filtri consente un'analisi direzionale completa. Applicazioni: (1) analisi direzionale della tessitura, (2) rilevamento di elementi orientati (creste, valli, strutture lineari), (3) mappatura direzionale di erosione/deposizione, (4) rilevamento di strade/corsi d'acqua (elementi lineari), (5) classificazione basata sulla tessitura.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma dell'inviluppo gaussiano in pixel (default 2.0)."
              },
              "frequency": {
                "label": "Frequenza",
                "description": "Frequenza spaziale della sinusoide in cicli/pixel (default 0.2)."
              },
              "orientations": {
                "label": "Orientamenti",
                "description": "Numero di orientamenti nel banco di filtri (default 6)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "gaussian_filter": {
            "name": "Filtro gaussiano",
            "description": "Smussamento gaussiano matematicamente ottimale con kernel pesato sulla distanza. Fondamentale per l'analisi multiscala, il rilevamento dei bordi e il filtraggio passa-banda. Il parametro sigma controlla l'intensità dello smussamento; supporta RGB.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Deviazione standard gaussiana in pixel (0.5-20.0, default 0.75)."
              },
              "treat_as_rgb": {
                "label": "Tratta come RGB",
                "description": "Impostare true per forzare il comportamento nello spazio di intensità RGB."
              },
              "assume_three_band_rgb": {
                "label": "Assumi RGB a tre bande",
                "description": "Se true (default), i raster uint8/uint16 a 3 bande possono essere trattati come RGB se mancano metadati espliciti."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "glcm_texture": {
            "name": "Tessitura GLCM",
            "description": "L'analizzatore di tessitura con matrice di co-occorrenza dei livelli di grigio (GLCM) estrae misure statistiche di tessitura del secondo ordine che quantificano le relazioni spaziali tra i livelli di grigio dei pixel a distanze e direzioni di spostamento specificate, consentendo una classificazione sofisticata della tessitura che distingue pattern di vegetazione agricola, strutture dell'ambiente costruito e formazioni geologiche. La GLCM calcola matrici di probabilità che catturano la frequenza con cui coppie di livelli di grigio si presentano a offset fissi, calcolando quattro statistiche canoniche di Haralick: contrasto (misura della variazione locale), correlazione (misura della dipendenza lineare), omogeneità (misura della vicinanza alla diagonale) ed energia (misura dell'uniformità). Lo strumento supporta otto offset direzionali (0°, 45°, 90°, 135° e i loro opposti), consentendo una sensibilità direzionale della tessitura per rilevare pattern orientati come filari nei campi, allineamenti di edifici o strutture geologiche. Le caratteristiche principali comprendono un'analisi multidirezionale che rivela le proprietà anisotrope della tessitura, la regolazione del parametro di spostamento che ottimizza la sensibilità alla scala, il calcolo simultaneo di più misure di tessitura che riduce il carico di elaborazione e la capacità intrinseca di distinguere proprietà superficiali visivamente sottili. I casi d'uso spaziano dall'agricoltura di precisione (classificazione dei tipi di coltura, rilevamento dei confini dei campi, valutazione dello stress delle colture), all'analisi urbana (mappatura della densità edilizia, estrazione delle superfici impermeabili) e al telerilevamento geologico (discriminazione dei tipi di roccia, riconoscimento di pattern strutturali). Le applicazioni comprendono la classificazione della copertura del suolo che combina caratteristiche spettrali e di tessitura, l'analisi delle immagini basata su oggetti che migliora l'accuratezza della classificazione, il controllo di qualità che rileva artefatti strumentali nelle immagini satellitari e il rilevamento dei cambiamenti che isola le alterazioni significative dal rumore del sensore. L'interpretazione dell'output richiede di comprendere il significato di ciascuna statistica: un contrasto alto indica tessiture ruvide/variate; una correlazione alta indica pattern lineari; un'omogeneità alta indica tessiture uniformi; un'energia alta indica pattern ordinati e ripetitivi. Le bande in uscita possono essere combinate in indici di tessitura (ad es. l'omogeneità GLCM divisa per il contrasto esalta le aree omogenee). Le modalità di aggregazione direzionale (media/min/max/separate) influiscono sulla dimensionalità e sull'interpretazione dell'output. L'analisi tipica della tessitura usa più misure GLCM simultaneamente per una classificazione robusta.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster a banda singola in ingresso."
              },
              "window_size": {
                "label": "Dimensione della finestra",
                "description": "Dimensione dispari della finestra mobile in pixel (default 7)."
              },
              "distance": {
                "label": "Distanza",
                "description": "Distanza in pixel per gli offset delle coppie di co-occorrenza (default 1)."
              },
              "angles": {
                "label": "Angoli",
                "description": "Angoli separati da virgole tra 0,45,90,135 (default '0,45,90,135')."
              },
              "features": {
                "label": "Caratteristiche",
                "description": "Caratteristiche separate da virgole: contrast,dissimilarity,homogeneity,asm,energy,entropy,mean,variance,correlation."
              },
              "direction_aggregation": {
                "label": "Aggregazione delle direzioni",
                "description": "Modalità di aggregazione delle direzioni: mean (default), min, max, range, separate."
              },
              "levels": {
                "label": "Livelli",
                "description": "Numero di livelli di quantizzazione (default 32; intervallo 8-128)."
              },
              "symmetric": {
                "label": "Simmetrico",
                "description": "Se true (default), costruisce GLCM simmetriche."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita (GeoTIFF multibanda)."
              }
            }
          },
          "guided_filter": {
            "name": "Filtro guidato",
            "description": "Il filtro guidato implementa uno smussamento che preserva i bordi vincolando gli output del filtro a relazioni localmente lineari con un'immagine guida, tipicamente l'originale o un layer di riferimento correlato. L'implementazione suddivide l'immagine in regioni rettangolari sovrapposte, calcolando i parametri di regressione lineare all'interno di ciascuna regione per imporre la levigatezza dell'output rispettando la struttura dell'immagine guida. La formulazione matematica minimizza ||Fᵢ - a·Gᵢ - b||² + ε||a||², dove Fᵢ è l'output filtrato, Gᵢ è l'immagine guida e (a, b) sono i parametri localmente lineari. Le caratteristiche principali comprendono la flessibilità (l'immagine guida può essere indipendente dall'immagine filtrata), un'efficienza computazionale grazie all'implementazione separabile O(N), il controllo dei parametri che consente di regolare l'intensità della preservazione dei bordi e l'efficacia con una guida a banda singola o multispettrale. Il filtraggio guidato eccelle nei flussi di lavoro di fusione multisensore in cui i dati ottici guidano la rimozione del rumore SAR, nell'affinamento delle classificazioni LiDAR usando ortofoto coincidenti, nella rimozione di ombre/nuvole nei mosaici satellitari usando immagini di riferimento temporali e nel miglioramento dei dettagli nelle attività di regolarizzazione delle mappe. L'interpretazione dell'output rivela che le regioni filtrate restano localmente simili alla struttura dell'immagine guida, mentre la media delle intensità procede all'interno delle regioni omogenee. Il raggio di smussamento controlla l'estensione spaziale (raggio maggiore = smussamento maggiore); il parametro di regolarizzazione ε bilancia la levigatezza con la fedeltà alla struttura (ε maggiore = più liscio, ε minore = più dettaglio). Gli intervalli dell'output corrispondono a quelli dell'input; il confronto visivo con l'immagine guida convalida la fedeltà della preservazione dei bordi. Gli artefatti comuni comprendono un eccesso di smussamento in corrispondenza di forti discontinuità (scegliere parametri appropriati) e uno smussamento insufficiente nelle regioni povere di guida (verificare la qualità dell'immagine guida). Monitorare la correlazione incrociata tra l'output filtrato e l'immagine guida per valutare la qualità dell'allineamento. Applicare in modo strategico nei flussi di lavoro di fusione, nitidezza e ricostruzione delle immagini in cui le informazioni sui bordi di una fonte guidano il filtraggio di un'altra.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "radius": {
                "label": "Raggio",
                "description": "Raggio della finestra del filtro guidato in pixel (default 4)."
              },
              "epsilon": {
                "label": "Epsilon",
                "description": "Parametro di regolarizzazione per la varianza locale (default 0.01)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "high_pass_bilateral_filter": {
            "name": "Filtro bilaterale passa-alto",
            "description": "Calcola un residuo passa-alto sottraendo lo smussamento bilaterale dal raster in ingresso.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "sigma_dist": {
                "label": "Sigma di distanza",
                "description": "Deviazione standard del kernel gaussiano spaziale (di distanza), in pixel (0.5–20.0, default 0.75)."
              },
              "sigma_int": {
                "label": "Sigma di intensità",
                "description": "Deviazione standard del kernel gaussiano di intensità, in unità di valore del raster (default 1.0)."
              },
              "treat_as_rgb": {
                "label": "Tratta come RGB",
                "description": "Impostare true per forzare il filtraggio dell'intensità HSI sui raster RGB impacchettati prima della differenza passa-alto."
              },
              "assume_three_band_rgb": {
                "label": "Assumi RGB a tre bande",
                "description": "Se true (default), e in assenza di metadati espliciti sul colore, consente l'interpretazione RGB dei raster uint8/uint16 a 3 bande."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file in uscita. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "high_pass_filter": {
            "name": "Filtro passa-alto",
            "description": "Il filtro passa-alto isola le componenti spaziali ad alta frequenza delle immagini sottraendo dall'immagine originale una sua versione a bassa frequenza (smussata). Matematicamente, ciò si ottiene tramite la convoluzione dell'immagine con un kernel progettato per enfatizzare i gradienti e sopprimere le variazioni tonali ampie. L'implementazione usa la convoluzione diretta o l'elaborazione nel dominio della frequenza, a seconda della dimensione del kernel e delle dimensioni dell'immagine. Il filtro esalta i bordi, i dettagli fini della tessitura e le variazioni a piccola scala, rimuovendo le tendenze di illuminazione a grande scala. Le caratteristiche distintive principali comprendono la preservazione del contrasto dei bordi senza artefatti ai confini, un'attenuazione selettiva delle frequenze basata sul raggio del kernel e l'applicabilità diretta a immagini sia in scala di grigi sia multispettrali. Il filtraggio passa-alto è prezioso per l'analisi del terreno quando occorre esaltare elementi topografici sottili, per aumentare la nitidezza delle immagini satellitari per l'interpretazione visiva, per rilevare strutture geologiche a piccola scala e per pre-elaborare i dati per la classificazione con machine learning. È inoltre essenziale per preparare le ortofoto al rilevamento dei cambiamenti e per migliorare i prodotti derivati da LiDAR. L'interpretazione dell'output richiede di comprendere che i valori positivi indicano massimi locali (bordi chiari) e i valori negativi minimi locali (bordi scuri). L'intervallo tipico è ±100 per immagini a 8 bit; un output a media nulla indica un'estrazione riuscita delle alte frequenze. Gli artefatti comuni comprendono il ringing in corrispondenza di forti discontinuità e l'amplificazione del rumore se le immagini sorgente sono rumorose. L'interpretazione della scala dipende dal raggio del kernel: kernel più piccoli esaltano la tessitura fine (singoli pixel), mentre kernel più grandi enfatizzano gli elementi a scala moderata (variazioni del terreno su decine di pixel). Monitorare le statistiche dell'output; una centratura sullo zero eccessiva indica una possibile sovraelaborazione. Applicare insieme ai risultati passa-basso complementari per ricostruire l'originale o per flussi di lavoro di scomposizione multiscala.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza della finestra in pixel (intero dispari, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza della finestra in pixel (intero dispari, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "high_pass_median_filter": {
            "name": "Filtro mediano passa-alto",
            "description": "Esegue un filtraggio passa-alto sottraendo la mediana locale dai valori centrali: output = pixel - median_neighborhood. Combina il filtraggio passa-alto (esalta i dettagli) con la robustezza della mediana (rimuove il rumore). Output centrato sullo zero (negativo = più scuro dei dintorni, positivo = più chiaro). Robusto ai valori anomali rispetto al passa-alto basato sulla gaussiana. Il residuo passa-alto rivela le deviazioni locali dalla tendenza mediana. Particolarmente robusto per dati rumorosi: la mediana è più stabile della media in presenza di valori anomali. L'output enfatizza la variazione a scala fine. Spesso applicato a versioni smussate con gaussiana (crea un filtro passa-banda). Utile per il miglioramento della tessitura e l'estrazione di caratteristiche da immagini rumorose. Applicazioni: (1) miglioramento della tessitura da dati rumorosi, (2) estrazione dei dettagli prima della classificazione, (3) rilevamento robusto di elementi, (4) pre-elaborazione per la segmentazione basata sulla tessitura, (5) pre-elaborazione SAR.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dell'intorno in pixel (intero dispari, default 11)."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dell'intorno in pixel (intero dispari, default 11)."
              },
              "sig_digits": {
                "label": "Cifre significative",
                "description": "Cifre significative usate per la classificazione dell'istogramma (default 2)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "integral_image_transform": {
            "name": "Trasformata a immagine integrale",
            "description": "Calcola una trasformazione ad area sommata (immagine integrale) per ciascuna banda.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "k_nearest_mean_filter": {
            "name": "Filtro di media dei K vicini",
            "description": "Esegue uno smussamento della media k-nearest neighbor che preserva i bordi: ordina l'intorno in base alla distanza dal valore centrale e calcola la media dei k valori più vicini. Approccio ibrido che preserva i bordi tramite una ponderazione basata sulla similarità. Viene calcolata la media del pixel centrale e dei k-1 vicini più simili. Più sofisticato del semplice k-NN (considera sia la similarità spaziale sia quella di intensità). Computazionalmente efficiente rispetto al filtro bilaterale. L'approccio k-nearest seleziona i vicini in modo adattivo: si calcola la media dei valori dei pixel vicini al centro, ignorando i pixel dissimili. Il parametro k controlla lo smussamento: k=1 (nessuno smussamento), k=n (tutti i vicini = filtro di media). Tipicamente k=n/2 (metà dell'intorno). Alternativa efficiente al filtro bilaterale: preservazione dei bordi simile con un costo computazionale inferiore. Particolarmente utile per immagini con forti discontinuità di intensità. Applicazioni: (1) smussamento che preserva i bordi (alternativa al bilaterale), (2) pre-elaborazione rapida per la classificazione, (3) pre-elaborazione in cui l'efficienza è critica, (4) filtraggio di immagini multibanda. Parametri tipici: k=neighborhood_size/2 fino a 3/4.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dell'intorno in pixel (intero dispari, default 3)."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dell'intorno in pixel (intero dispari, default 3)."
              },
              "k": {
                "label": "K",
                "description": "Numero di vicini più prossimi da mediare (default 5)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "kuwahara_filter": {
            "name": "Filtro di Kuwahara",
            "description": "Il filtro di Kuwahara implementa uno smussamento non lineare che preserva i bordi suddividendo l'intorno di ciascun pixel in quattro quadranti, calcolando le statistiche all'interno di ciascun quadrante e selezionando come valore di uscita quello del quadrante con la varianza più bassa. L'implementazione suddivide una finestra (2k+1)×(2k+1) in quattro sottofinestre k×k sovrapposte, calcola la media e la varianza di ciascun quadrante e restituisce la media del quadrante con varianza minima. Questo approccio basato sul rango smussa le regioni omogenee e contemporaneamente accentua i bordi. Le caratteristiche principali comprendono una vera preservazione dei bordi tramite la selezione dei quadranti (i bordi tra i quadranti impediscono la sfocatura dell'output), una semplicità computazionale che richiede solo il calcolo di media e varianza, il controllo dei parametri tramite la dimensione del quadrante k e l'efficacia su immagini ottiche, radar e termiche. Il filtraggio di Kuwahara eccelle nello smussamento di DEM derivati da LiDAR preservando scarpate e terrazzi, nell'estrazione della rete stradale da immagini ad alta risoluzione mantenendo la nitidezza delle linee d'asse, nella delimitazione delle impronte degli edifici da foto aeree e nel rilevamento dei confini delle chiazze di petrolio nelle immagini SAR. L'interpretazione dell'output rivela che nelle regioni omogenee viene restituito il quadrante che media naturalmente (varianza più bassa); sui bordi viene restituito il quadrante contenente la struttura uniforme più vicina al bordo, ancorando di fatto l'output al lato più pulito. La dimensione del quadrante k controlla la preservazione dei dettagli: k=1 (smussamento minimo) preserva i bordi fini; k=3-4 fornisce un equilibrio tra smussamento e preservazione dei bordi; k>5 rischia la perdita di dettagli. I valori in uscita corrispondono esattamente ai valori dei pixel in ingresso dei quadranti selezionati (nessuna interpolazione). Monitorare gli istogrammi dell'output alla ricerca di distribuzioni bimodali (bordi e regioni omogenee chiaramente separati); distribuzioni unimodali suggeriscono una sfocatura dei bordi. Applicare un aumento di nitidezza complementare in caso di smussamento eccessivo. Gli artefatti comuni comprendono un bias direzionale che dipende dall'allineamento dei quadranti e un effetto a blocchi vicino ai bordi deboli. Usare nella pre-elaborazione per la segmentazione, dove la preservazione dei bordi garantisce un'estrazione accurata dei confini.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "radius": {
                "label": "Raggio",
                "description": "Raggio dei quadranti di Kuwahara in pixel (default 2)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "lee_filter": {
            "name": "Filtro di Lee",
            "description": "Il filtro di Lee esegue la riduzione dello speckle SAR usando il modello moltiplicativo di Lee, assumendo che i ritorni radar seguano un rumore moltiplicativo: I = S·N, dove S è il segnale e N è il rumore moltiplicativo. L'implementazione calcola medie e varianze locali, stima la varianza dello speckle e quindi filtra tramite: F = μ + (1 - σₙ²/σ_I²)·(I - μ), dove σₙ² è la varianza dello speckle e σ_I² è la varianza totale. Questo approccio basato su modello preserva gli elementi ad alta coerenza sopprimendo lo speckle. Le caratteristiche principali comprendono un modello di rumore specifico per il SAR (moltiplicativo anziché gaussiano), la preservazione degli obiettivi puntuali e dei bordi, un'interpretazione semplice dei parametri (la dimensione della finestra controlla la misura della coerenza) e un'efficacia comprovata su SAR a polarizzazione singola e multipla. Il filtraggio di Lee eccelle nella pre-elaborazione SAR per il monitoraggio agricolo, la classificazione forestale, il monitoraggio della superficie oceanica e i flussi di lavoro di mappatura delle alluvioni. L'interpretazione dell'output mostra che le regioni ad alta coerenza (obiettivi puntuali, bordi forti) vengono filtrate minimamente, mentre le regioni a bassa coerenza (rumore speckle, confini deboli) vengono filtrate in modo aggressivo. La stima della varianza dello speckle influisce sull'output: una stima accurata richiede un numero sufficiente di pixel omogenei; una varianza sottostimata produce uno smussamento insufficiente; una varianza sovrastimata causa uno smussamento eccessivo. La dimensione della finestra controlla la risoluzione della misura della coerenza: finestre piccole (3×3) preservano i dettagli fini; finestre grandi (7×7) migliorano la stima della varianza ma rischiano la perdita di dettagli. La scala dell'output corrisponde a quella dell'input; una visualizzazione logaritmica ne migliora la leggibilità. La riduzione tipica del rumore raggiunge una diminuzione della varianza di 5-10 dB a seconda del numero di look. Monitorare l'istogramma dell'output alla ricerca della firma di speckle residua; distribuzioni lisce suggeriscono un filtraggio adeguato. Gli artefatti comprendono una possibile sfocatura dei bordi nelle regioni a debole coerenza e un bias direzionale negli elementi lineari. Applicare in modo strategico nella classificazione SAR che richiede la soppressione dello speckle mantenendo l'integrità delle caratteristiche usate per la classificazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dell'intorno in pixel (intero dispari, default 11)."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dell'intorno in pixel (intero dispari, default 11)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Semi-ampiezza di inclusione dell'intensità attorno al valore centrale (default 10.0)."
              },
              "m_value": {
                "label": "Valore M",
                "description": "Numero minimo di campioni nell'intervallo prima della media di ripiego (default 5.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "line_detection_filter": {
            "name": "Filtro di rilevamento delle linee",
            "description": "Il filtro di rilevamento delle linee è un rilevatore di bordi specializzato progettato per esaltare gli elementi lineari (strade, fiumi, linee elettriche e lineamenti geologici) lungo quattro direzioni principali (orizzontale, verticale ed entrambe le diagonali), applicando kernel di convoluzione direzionali ottimizzati per la connettività e la continuità delle linee. Questo filtro impiega kernel 3×3 che enfatizzano le strutture lineari allineate con ciascuna direzione principale sopprimendo il rumore perpendicolare e le variazioni casuali degli elementi. L'approccio direzionale separa i rilevamenti per orientamento, consentendo alle applicazioni a valle di distinguere le infrastrutture orizzontali (condotte, confini dei campi) dalle strutture verticali (filari di alberi, corridoi di servizi). Le caratteristiche principali comprendono una scomposizione multidirezionale che genera bande separate di magnitudo e direzione, una regolazione adattiva della sensibilità per le variazioni di larghezza e contrasto delle linee e prestazioni eccezionali su elementi lineari sottili inseriti in terreni complessi. I casi d'uso spaziano dalla mappatura delle infrastrutture (strade, ferrovie, linee elettriche), all'estrazione di elementi naturali (corsi d'acqua, creste, faglie) e alla delimitazione dei confini di uso del suolo. Le applicazioni comprendono la pre-elaborazione per la conversione vettoriale nella digitalizzazione catastale, l'estrazione della rete dei trasporti da ortofoto, la mappatura delle strutture geologiche da immagini satellitari e il riconoscimento di pattern nell'analisi di telerilevamento. L'interpretazione dell'output richiede di comprendere che ciascuna componente direzionale rivela l'intensità delle linee in quello specifico orientamento: esaminare tutti e quattro gli output direzionali per identificare le direzioni prevalenti degli elementi. Valori di magnitudo più alti indicano una maggiore continuità delle linee; valori bassi suggeriscono rumore o interruzioni. L'output è naturalmente sparso ed evidenzia solo i pixel che rappresentano elementi lineari; le aree di sfondo restano prossime allo zero. L'output multidirezionale consente una post-classificazione in cui le strade (tipicamente orizzontali/verticali nelle aree edificate) vengono distinte dai lineamenti naturali (orientamento arbitrario). Combinare le componenti direzionali per generare una mappa unificata delle linee oppure analizzare ciascuna direzione separatamente per la mappatura delle strutture orientate.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "variant": {
                "label": "Variante",
                "description": "Variante di direzione della linea: v, h, 45 o 135."
              },
              "abs_values": {
                "label": "Valori assoluti",
                "description": "Se true, emette i valori di risposta in valore assoluto."
              },
              "clip_tails": {
                "label": "Ritaglia le code",
                "description": "Percentuale opzionale di ritaglio simmetrico delle code (0-40)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "line_thinning": {
            "name": "Assottigliamento delle linee",
            "description": "Riduce gli elementi connessi di un raster binario a linee di scheletro larghe una cella.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "lidar_ground_point_filter": {
            "name": "Filtro dei punti a terra LiDAR",
            "description": "Separa il terreno dai punti fuori suolo: classificazione/filtraggio basato sulla pendenza che usa la geometria del piano locale e soglie di altezza. Segmentazione efficiente del suolo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio di ricerca dell'intorno (default 2.0)."
              },
              "min_neighbours": {
                "label": "Vicini minimi",
                "description": "Numero minimo di vicini obiettivo (default 0)."
              },
              "slope_threshold": {
                "label": "Soglia di pendenza",
                "description": "Soglia di pendenza in gradi (default 45.0, max 88)."
              },
              "height_threshold": {
                "label": "Soglia di altezza",
                "description": "Separazione verticale minima per segnalare i punti fuori terra (default 1.0)."
              },
              "classify": {
                "label": "Classifica",
                "description": "Se true classifica i punti (terreno=2, fuori terra=1); altrimenti filtra i punti fuori terra."
              },
              "slope_norm": {
                "label": "Normalizzazione della pendenza",
                "description": "Se true, applica la normalizzazione top-hat del terreno prima del test di pendenza (default true)."
              },
              "height_above_ground": {
                "label": "Altezza dal suolo",
                "description": "Se true, emette i valori z come altezza locale sopra il vicino inferiore più prossimo."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita per la modalità a ingresso singolo."
              }
            }
          },
          "majority_filter": {
            "name": "Filtro di maggioranza",
            "description": "Calcola la moda in una finestra mobile (valore/classe più frequente) per ciascun pixel. Filtro non lineare che preserva i confini categoriali e i pattern dominanti. Particolarmente utile per le immagini classificate, in cui l'output deve restare all'interno dell'insieme di classi originale (a differenza del filtro di media, che crea valori interpolati). Essenziale per la pulizia morfologica degli output di classificazione.\n\nIl filtraggio di maggioranza è l'equivalente basato sulla moda del filtraggio mediano. Per i dati categoriali (immagini classificate, copertura del suolo), la maggioranza preserva le definizioni delle classi smussando il rumore. Per i dati continui, la maggioranza può rivelare picchi locali nella distribuzione dei valori. Spesso è seguito dall'eliminazione delle classi minoritarie (pulizia post-classificazione) per rimuovere gli artefatti di classificazione \"sale e pepe\".\n\nApplicazioni: (1) smussamento post-classificazione (rimuove piccole macchie di classi spurie), (2) mappa della classe di maggioranza da più output classificati, (3) pulizia di dati vettoriali (disaggregazione delle classi), (4) soppressione del rumore in immagini sogliate, (5) smussamento degli attributi negli output di segmentazione. Flusso di lavoro tipico: classificazione→filtro di maggioranza→eliminazione delle minoranze→mappa finale ripulita.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza della finestra in pixel (intero dispari, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza della finestra in pixel (intero dispari, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "maximum_filter": {
            "name": "Filtro di massimo",
            "description": "Calcola il valore massimo in una finestra mobile, rivelando picchi e creste locali. Operatore di dilatazione nell'elaborazione morfologica delle immagini. Utile per rilevare picchi, linee di cresta ed elementi di ampiezza massima. Sensibile a un singolo valore anomalo (un solo valore alto nella finestra produce un output alto).\n\nIl filtro di massimo è l'operatore morfologico di \"dilatazione\": espande le regioni chiare e restringe quelle scure. Applicato ripetutamente (dilatazione a più passaggi), crea picchi smussati e fa crescere gli elementi isolati fino a riempire i loro intorni. Combinato con il filtro di minimo consente la chiusura (dilatazione seguita da erosione) e l'apertura (erosione seguita da dilatazione). Essenziale per il rilevamento morfologico di elementi e l'analisi multiscala.\n\nApplicazioni: (1) dilatazione morfologica per il filtraggio basato sulla dimensione, (2) chiusura tramite dilatazione→erosione per riempire piccoli fori, (3) identificazione di picchi/creste nel terreno e nelle immagini, (4) livello massimo locale in batimetria/DEM, (5) analisi multiscala degli elementi (confronto della dilatazione a diverse scale). Flusso di lavoro tipico: massimo→confronto con il minimo→chiusura o apertura a seconda del tipo di elemento.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza della finestra in pixel (intero dispari, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza della finestra in pixel (intero dispari, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "mean_filter": {
            "name": "Filtro di media",
            "description": "Calcola la media in una finestra mobile per ciascun pixel. Operazione di smussamento fondamentale che riduce il rumore locale sfocando le transizioni nette. L'output rappresenta la tendenza centrale locale. Ampiamente usato per la pre-elaborazione, la riduzione del rumore e l'analisi multiscala.\n\nIl filtraggio di media è l'operazione di smussamento passa-basso più comune. È molto sensibile ai valori anomali (i valori estremi possono distorcere i risultati), per cui il filtro mediano è preferibile per i dati rumorosi. Computazionalmente efficiente. La dimensione del filtro controlla l'entità dello smussamento: piccola (3×3) preserva i dettagli, grande (31×31+) crea una superficie fortemente smussata. Spesso applicato iterativamente o a più scale per l'analisi multirisoluzione.\n\nApplicazioni: (1) riduzione di base del rumore, (2) pre-elaborazione prima del rilevamento di elementi (smussa i falsi positivi), (3) analisi multiscala (applicare a 3×3, 11×11, 31×31), (4) smussamento temporale (combinazione di scene), (5) base per altre operazioni statistiche. Confrontare con la mediana (non lineare, preserva i bordi) per una migliore preservazione dei bordi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza della finestra in pixel (intero dispari, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza della finestra in pixel (intero dispari, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "median_filter": {
            "name": "Filtro mediano",
            "description": "Calcola il valore mediano in una finestra mobile per ciascun pixel, sostituendolo con il 50° percentile dell'intorno. Filtro del rumore robusto che preserva i bordi (non lineare). Particolarmente efficace per la rimozione del rumore impulsivo (sale e pepe) mantenendo i confini netti. I valori in uscita sono valori effettivi dei pixel dell'intorno (non interpolati).\n\nIl filtraggio mediano è non lineare: un vantaggio fondamentale rispetto al filtraggio di media per la riduzione del rumore, perché non crea nuovi valori né sfoca i bordi. Filtri di grandi dimensioni smussano fortemente preservando le transizioni nette. Ampiamente usato nel telerilevamento, nell'imaging medico e nell'elaborazione di immagini SAR. Il costo computazionale aumenta con la dimensione del filtro, ma è generalmente più rapido dei filtri bilaterali o guidati.\n\nApplicazioni: (1) riduzione dello speckle nelle immagini SAR (particolarmente efficace per la coerenza di fase), (2) rimozione del rumore sale e pepe, (3) pre-elaborazione prima del rilevamento dei bordi (riduce i falsi bordi), (4) preservazione dei confini nella pre-elaborazione per la classificazione, (5) correzione radiometrica dei valori anomali. Flusso di lavoro tipico: applicare la mediana→output con bordi esaltati→soglia per l'estrazione degli elementi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza della finestra in pixel (intero dispari, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza della finestra in pixel (intero dispari, default = filter_size_x). Alias: filtery."
              },
              "sig_digits": {
                "label": "Cifre significative",
                "description": "Numero di cifre significative usate per il filtraggio quantizzato per rango (default 2)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "minimum_filter": {
            "name": "Filtro di minimo",
            "description": "Calcola il valore minimo in una finestra mobile, rivelando minimi e avvallamenti locali. Operatore di erosione nell'elaborazione morfologica delle immagini. Utile per rilevare fondovalle, depressioni ed elementi di altitudine minima. Sensibile a un singolo valore anomalo (un solo valore basso nella finestra produce un output basso).\n\nIl filtro di minimo è l'operatore morfologico di \"erosione\": restringe le regioni chiare ed espande quelle scure. Applicato ripetutamente (erosione a più passaggi), crea valli smussate e fa scomparire gli elementi isolati. Combinato con il filtro di massimo (dilatazione) consente le operazioni di apertura (erosione seguita da dilatazione) e di chiusura (dilatazione seguita da erosione). Spesso usato nella scomposizione multiscala: confrontare il minimo a 3×3, 11×11, 31×31 per identificare le scale degli elementi.\n\nApplicazioni: (1) erosione morfologica per il filtraggio basato sulla dimensione, (2) apertura tramite erosione→dilatazione per rimuovere piccoli oggetti di rumore, (3) identificazione di depressioni/valli nel terreno, (4) livello minimo locale in batimetria/DEM, (5) analisi multiscala degli elementi (confronto dell'erosione a diverse scale). Flusso di lavoro tipico: minimo→confronto con il massimo→apertura o chiusura a seconda del tipo di elemento.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza della finestra in pixel (intero dispari, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza della finestra in pixel (intero dispari, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "non_local_means_filter": {
            "name": "Filtro non-local means",
            "description": "Il filtraggio non-local means esegue una potente rimozione del rumore calcolando la media di patch simili identificate nell'intera immagine anziché dei pixel vicini, sfruttando l'autosimilarità dell'immagine per sopprimere il rumore preservando le strutture. L'implementazione identifica le patch simili a ciascuna patch obiettivo tramite la distanza euclidea nello spazio delle patch, pesa esponenzialmente le patch simili in base alla similarità e ne calcola la media pesata. L'algoritmo calcola: Fᵢ = (1/Z) Σⱼ exp(-d(Pᵢ, Pⱼ)²/h²) · Iⱼ, dove d misura la distanza tra patch, h controlla la larghezza di banda e Z normalizza. Le caratteristiche principali comprendono una rimozione del rumore superiore grazie alla ricerca per similarità anziché alla sola prossimità spaziale, l'efficacia su tessiture complesse e dettagli fini, l'applicabilità a qualsiasi tipo di dato e prestazioni comprovate su immagini mediche, satellitari e fotografiche. Il filtraggio non-local means eccelle nel restauro dettagliato di immagini satellitari preservando tessitura e strutture fini, nella media di stack multitemporali per la preparazione al rilevamento dei cambiamenti, nella rimozione del rumore da dati di rilievo molto rumorosi (ultrasonici, iperspettrali) e nel miglioramento di immagini di rilievi archeologici/aerei. L'interpretazione dell'output richiede di comprendere che le regioni simili in tutta l'immagine contribuiscono a ciascun pixel in uscita, mentre le regioni localmente dissimili contribuiscono in modo trascurabile. La dimensione della patch controlla la preservazione degli elementi (patch più grandi = risultati più lisci, patch più fini = più dettaglio); la larghezza di banda h controlla la ponderazione della similarità (h maggiore = più patch incluse, h minore = requisiti di similarità più rigorosi). Gli intervalli dell'output corrispondono a quelli dell'input; le statistiche si spostano verso le medie regionali mentre le strutture fini restano. Il costo computazionale cresce con la dimensione dell'immagine e il raggio della patch; l'esecuzione tipica richiede un tempo di elaborazione considerevole per immagini di grandi dimensioni. Monitorare l'avanzamento del filtraggio tramite il PSNR o l'ispezione visiva. Gli artefatti comuni comprendono un eccesso di smussamento delle tessiture fini (aumentare con cautela la dimensione della patch) e uno smussamento insufficiente nelle regioni molto rumorose (aumentare la larghezza di banda). Applicare in modo strategico nei flussi di lavoro che richiedono la massima riduzione del rumore preservando gli elementi a scala fine.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio della finestra di ricerca in pixel (default 5)."
              },
              "patch_radius": {
                "label": "Raggio della patch",
                "description": "Raggio della patch in pixel (default 1)."
              },
              "h": {
                "label": "H",
                "description": "Parametro di intensità del filtraggio (default 10.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "opening": {
            "name": "Apertura",
            "description": "Esegue un'operazione morfologica di apertura usando un elemento strutturante rettangolare.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dispari dell'intorno (default 11)."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dispari dell'intorno (default uguale a filter_size_x)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "olympic_filter": {
            "name": "Filtro olimpico",
            "description": "L'Olympic Filter implementa uno smussamento basato sul rango rimuovendo il singolo valore più alto e il singolo valore più basso dall'intorno di ciascun pixel e calcolando poi la media dei pixel restanti. Questo approccio di filtraggio robusto elimina i valori anomali estremi (probabilmente rumore o valori spuri) preservando la tendenza centrale. Formulazione matematica: F = (1/(N-2)) Σ(I_sorted[2:N-1]), dove i valori ordinati dell'intorno escludono il più alto e il più basso. L'implementazione richiede l'ordinamento di piccoli intorni (computazionalmente efficiente) ma produce una riduzione del rumore efficace. Le caratteristiche principali comprendono una strategia semplice di rimozione dei valori anomali, una riduzione efficace del rumore sale e pepe, un filtraggio consapevole dei bordi (i bordi appaiono spesso come estremi) e l'applicabilità a qualsiasi tipo di dato. Il filtraggio Olympic eccelle nella pre-elaborazione di immagini satellitari ottiche (rimuove pixel isolati di nuvole luminose e ombre scure), nello smussamento di DEM riducendo gli artefatti di rumore del rilievo, nella rimozione del rumore da immagini termiche (rimuove i valori anomali del sensore) e nella pre-elaborazione di immagini radar. L'interpretazione dell'output rivela che distribuzioni del rumore simmetriche (numero uguale di valori anomali alti e bassi) vengono filtrate in modo simmetrico; distribuzioni asimmetriche (più valori alti o bassi) producono un filtraggio direzionale. La dimensione dell'intorno controlla l'entità dello smussamento: una finestra 3×3 rimuove 2 estremi su 9 pixel (filtraggio lieve); finestre più grandi filtrano in modo più aggressivo. I valori in uscita restano entro l'intervallo dell'input (l'output è la media di valori effettivi dell'intorno). Le statistiche mostrano una riduzione controllata della varianza mirata specificamente ai valori anomali. Le immagini differenza (originale - filtrata) evidenziano i valori anomali rimossi; regioni concentrate di valori alti indicano un isolamento efficace del rumore. Gli artefatti comuni comprendono uno smussamento insufficiente se la frequenza dei valori anomali è bassa e la sfocatura dei bordi se i pixel di bordo risultano sistematicamente come estremi. Più iterazioni consentono uno smussamento progressivo: un singolo passaggio fornisce la riduzione del rumore; passaggi ripetuti intensificano lo smussamento. Applicare nei flussi di lavoro di riduzione rapida del rumore che richiedono un filtraggio semplice e interpretabile; particolarmente efficace per il rumore sale e pepe nei mosaici multisensore.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dell'intorno in pixel (intero dispari, default 11)."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dell'intorno in pixel (intero dispari, default 11)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "percentile_filter": {
            "name": "Filtro di percentile",
            "description": "Calcola il rango percentile locale dell'elevazione/valore della cella centrale all'interno di una finestra mobile (0-100%). Analogo a Elevation Percentile per dati raster generici. Misura la posizione relativa: output=0 indica un minimo locale, output=100 indica un massimo locale, output=50 indica la mediana. Rivela la posizione locale nella distribuzione indipendentemente dai valori assoluti.\n\nIl filtraggio percentile consente un'analisi relativa alla posizione. Utile per l'analisi a strati: le celle con percentile alto (>80) in tutte le bande indicano elementi \"chiari\"; quelle con percentile basso (<20) indicano elementi \"scuri\". Particolarmente utile per la pre-elaborazione della classificazione: separa la posizione del terreno/della tessitura anziché la sola magnitudo. Spesso combinato con filtri statistici per una caratterizzazione multimetrica.\n\nApplicazioni: (1) classificazione della luminosità/oscurità relativa, (2) caratterizzazione della tessitura (varianza del percentile alta = ruvido, varianza bassa = liscio), (3) miglioramento del contrasto locale (normalizzazione basata sul percentile), (4) identificazione delle forme del rilievo analoga all'Elevation Percentile, (5) analisi multibanda della tessitura (applicare il percentile a ciascuna banda e confrontare i pattern).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza della finestra in pixel (intero dispari, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza della finestra in pixel (intero dispari, default = filter_size_x). Alias: filtery."
              },
              "sig_digits": {
                "label": "Cifre significative",
                "description": "Numero di cifre significative usate per il filtraggio quantizzato per rango (default 2)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "range_filter": {
            "name": "Filtro di intervallo",
            "description": "Calcola l'intervallo in una finestra mobile (massimo - minimo), rivelando la dispersione locale dei valori indipendentemente dal livello medio. Semplice metrica di eterogeneità: intervallo alto = valori diversificati, intervallo basso = valori uniformi. Più semplice della deviazione standard ma altrettanto informativo per molte applicazioni, e più robusto rispetto alla forma della distribuzione.\n\nL'intervallo è computazionalmente efficiente (richiede solo due confronti). Particolarmente utile per rilevare transizioni/confini in cui i picchi dell'intervallo indicano zone di contrasto. Meno sensibile alla forma della distribuzione rispetto alla deviazione standard (la deviazione standard enfatizza i valori anomali, l'intervallo usa solo gli estremi). L'intervallo normalizzato (intervallo/media) consente il confronto tra bande, così come il coefficiente di variazione consente il confronto tra scale.\n\nApplicazioni: (1) mappatura della tessitura/del contrasto (interpretazione semplice: intervallo alto = ruvido/contrastato), (2) rilevamento dei confini tramite i picchi dell'intervallo, (3) alternativa computazionalmente efficiente alla deviazione standard, (4) controllo di qualità (sfondo uniforme con intervallo basso, aree con elementi con intervallo alto), (5) rugosità/variabilità in dati generici. Flusso di lavoro tipico: calcolare l'intervallo→applicare una soglia per identificare le zone di transizione→vettorializzare i confini ad alto intervallo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza della finestra in pixel (intero dispari, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza della finestra in pixel (intero dispari, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "remove_spurs": {
            "name": "Rimuovi speroni",
            "description": "Rimuove i brevi artefatti a sperone dagli elementi di un raster binario tramite potatura iterativa.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "max_iterations": {
                "label": "Iterazioni massime",
                "description": "Numero massimo di iterazioni di potatura (default 10)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "savitzky_golay_2d_filter": {
            "name": "Filtro Savitzky-Golay 2D",
            "description": "Esegue uno smussamento 2D di Savitzky-Golay: un filtro basato sull'adattamento polinomiale che preserva gli elementi polinomiali locali. Adatta un polinomio locale all'intorno e sostituisce il centro con il valore adattato. Preserva picchi/valli meglio della gaussiana. Utile per dati rumorosi in cui è importante preservare gli elementi. Minore sfocatura rispetto alla gaussiana per polinomi di ordine basso; lo smussamento aumenta con l'ordine del polinomio. Il filtraggio di Savitzky-Golay adatta un polinomio locale (tipicamente quadratico/cubico) all'intorno con i minimi quadrati. Il valore centrale viene sostituito con il valore del polinomio. Diverso da mediana/gaussiana: preserva gli elementi che si presentano come strutture polinomiali (picchi, valli, creste). Computazionalmente semplice ma più lento della semplice convoluzione. L'ordine del polinomio controlla il compromesso tra smussamento e preservazione. Applicazioni: (1) smussare dati rumorosi preservando le strutture di picco, (2) elaborazione di griglie di elevazione (preserva la topografia di creste/valli), (3) smussamento di dati spettrali (preserva le caratteristiche di assorbimento), (4) pre-elaborazione che preserva gli elementi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "window_size": {
                "label": "Dimensione della finestra",
                "description": "Dimensione dispari della finestra (default 5). Attualmente supporta 5 per l'ordine polinomiale 2."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "scharr_filter": {
            "name": "Filtro di Scharr",
            "description": "Il filtro di Scharr è un operatore di rilevamento dei bordi che migliora il filtro di Sobel usando coefficienti del kernel ottimizzati, progettati specificamente per ridurre il bias direzionale e fornire un'invarianza alla rotazione superiore. L'operatore di Scharr impiega kernel di convoluzione 3×3 con coefficienti interi (3, 10, 3) ottimizzati empiricamente per le direzioni dei bordi a 0°, 45°, 90° e 135°, fornendo una stima del gradiente più accurata rispetto ai filtri di Sobel tradizionali, specialmente per elementi circolari e bordi ruotati. Il filtro calcola simultaneamente sia la componente orizzontale sia la magnitudo del gradiente, consentendo una localizzazione robusta dei bordi. I vantaggi principali comprendono un'accuratezza superiore per i gradienti direzionali, un bias rotazionale ridotto rispetto a Sobel e un calcolo efficiente con kernel 3×3 che richiede un carico di memoria minimo. L'output comprende sia la magnitudo sia componenti direzionali opzionali. Il filtro di Scharr eccelle nei flussi di lavoro di estrazione di caratteristiche, rilevamento dei confini e controllo di qualità che richiedono un'elevata accuratezza direzionale. I casi d'uso comprendono l'estrazione delle impronte degli edifici da immagini aeree, il rilevamento delle reti stradali, la delimitazione dei confini dei corpi idrici con una distorsione minima e l'identificazione dei lineamenti geologici nei dati satellitari. Il filtro offre prestazioni eccezionali nella mappatura urbana, nel rilevamento dei confini agricoli e nelle applicazioni di navigazione autonoma. L'interpretazione dell'output richiede di comprendere che i valori di magnitudo rappresentano l'intensità del bordo: valori più alti indicano transizioni più nette tra classi spettrali distinte. Le componenti direzionali rivelano l'orientamento prevalente dei bordi (orizzontale, diagonale o verticale), utile per l'analisi dei lineamenti. Per i raster multibanda, applicarlo separatamente a ciascuna banda o usare un indice calcolato. I valori di sfondo appaiono scuri nell'output; i bordi forti appaiono chiari. Il confronto dell'RMSE con bordi di riferimento convalida le prestazioni del filtro. Scalare l'output a 0-255 per la visualizzazione standard o mantenere i valori in virgola mobile per l'analisi quantitativa.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "clip_tails": {
                "label": "Ritaglia le code",
                "description": "Percentuale opzionale di ritaglio simmetrico delle code (0-40)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "standard_deviation_filter": {
            "name": "Filtro di deviazione standard",
            "description": "Calcola la deviazione standard in una finestra mobile, misurando la variazione/dispersione locale dei valori. Deviazione standard alta = valori diversificati (ruvido/eterogeneo), deviazione standard bassa = valori uniformi (liscio/omogeneo). Rivela pattern di tessitura, rugosità e variabilità. Fondamentale per la quantificazione dell'incertezza e la valutazione della qualità.\n\nLa deviazione standard è più robusta dell'intervallo per caratterizzare la variazione locale (non è distorta da un singolo valore anomalo). Consente di classificare le aree in base alla tessitura: pendii ripidi (deviazione standard alta), pendii dolci (deviazione standard bassa); foreste (deviazione standard alta), praterie (deviazione standard bassa). Spesso normalizzata (coefficiente di variazione = deviazione standard/media) per consentire il confronto tra dati con intervalli di valori diversi. Può essere calcolata dall'istogramma (varianza = media dei quadrati - quadrato della media).\n\nApplicazioni: (1) mappatura della tessitura (analisi di rugosità/eterogeneità), (2) quantificazione dell'incertezza in dati rumorosi, (3) valutazione della qualità (sfondo uniforme = deviazione standard bassa, aree ricche di elementi = alta), (4) confidenza della classificazione (deviazione standard alta = classi miste/incerte), (5) eterogeneità multibanda (impilare le deviazioni standard di ciascuna banda). Flusso di lavoro tipico: calcolare la deviazione standard a più scale→confrontare le variazioni dei pattern tra le scale→identificare le scale caratteristiche.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza della finestra in pixel (intero dispari, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza della finestra in pixel (intero dispari, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "thicken_raster_line": {
            "name": "Ispessisci le linee raster",
            "description": "Ispessisce i segmenti di linea diagonali di un raster per evitare fuoriuscite in diagonale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "tophat_transform": {
            "name": "Trasformata top-hat",
            "description": "Esegue una trasformazione morfologica top-hat bianca o nera.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dispari dell'intorno (default 11)."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dispari dell'intorno (default uguale a filter_size_x)."
              },
              "variant": {
                "label": "Variante",
                "description": "Variante top-hat: white (default) o black."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "total_filter": {
            "name": "Filtro somma",
            "description": "Calcola la somma in una finestra mobile (totale) dei valori dei pixel nell'intorno. Integra l'intensità del segnale locale. Le applicazioni dipendono dalla semantica dei dati: per conteggi/densità, il totale rivela pattern di densità locale; per le precipitazioni, il totale rivela l'accumulo a scala di bacino; per la riflettanza, il totale è proporzionale alla dimensione locale dell'obiettivo.\n\nIl filtraggio del totale ha interpretazioni diverse a seconda del dominio. Nei dati di conteggio/popolazione, il totale rivela raggruppamenti e hotspot. Nei dati di elevazione, il totale è usato raramente (la somma non ha significato geomorfologico). Nell'analisi spettrale, il totale può rivelare l'intensità del segnale multibanda. Spesso usato come passaggio intermedio (ad es. dividere per il numero di celle dell'intorno per calcolare la media, o confrontare con i totali vicini per rilevare l'eterogeneità locale).\n\nApplicazioni: (1) rilevamento di hotspot nei dati di conteggio (totale alto = raggruppamenti), (2) modelli di accumulo a scala di bacino/bacino idrografico, (3) integrazione di misure distribuite, (4) calcolo intermedio (totale/N = media), (5) aggregazione dell'intensità del segnale in mosaici multisensore.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza della finestra in pixel (intero dispari, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza della finestra in pixel (intero dispari, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "unsharp_masking": {
            "name": "Maschera di contrasto",
            "description": "L'unsharp masking aumenta la nitidezza dell'immagine sottraendo dall'immagine originale una sua versione smussata (passa-basso), esaltando i bordi e i dettagli fini. La trasformazione matematica è I_sharp = I_original + w·(I_original - I_smooth), dove w è il peso di nitidezza che controlla l'intensità del miglioramento. Il processo isola le componenti ad alta frequenza e le amplifica, separando di fatto il dettaglio dalle variazioni tonali ampie. Le caratteristiche principali comprendono un controllo flessibile dei parametri (raggio di sfocatura e peso che consentono di controllare il dettaglio), un'efficienza computazionale grazie al riuso dello smussamento gaussiano, un miglioramento interpretabile (peso=0 restituisce l'originale; peso=1 fornisce un vero passa-alto; peso>1 fornisce una nitidezza aggressiva) e l'efficacia sui dati multispettrali. L'unsharp masking eccelle nella preparazione di immagini satellitari per l'interpretazione manuale (esalta terreno, vegetazione e infrastrutture sottili), nel miglioramento di prodotti derivati da LiDAR (aumenta la nitidezza di DEM e metriche della vegetazione), nel miglioramento della qualità delle ortofoto per la visibilità degli elementi e nel miglioramento di immagini archeologiche/di rilievo. L'interpretazione dell'output richiede di comprendere che i valori resi più nitidi si concentrano sui bordi; le regioni omogenee restano invariate. Il parametro di peso controlla l'entità del miglioramento: w=0.5-1.0 fornisce un miglioramento sottile; w=1.0-2.0 fornisce una nitidezza moderata; w>2.0 produce risultati aggressivi, potenzialmente ricchi di artefatti. Il raggio di sfocatura controlla la scala degli elementi: un raggio più piccolo (3-5 pixel) esalta la tessitura fine; un raggio più grande (10-20 pixel) esalta gli elementi moderati. I valori in uscita possono superare l'intervallo dell'input; di solito è necessario un troncamento. Gli artefatti comprendono aloni attorno ai bordi forti (più pronunciati con peso o raggio maggiori), l'amplificazione del rumore se la sorgente è rumorosa e possibili falsi colori nella nitidezza multispettrale. Verificare il miglioramento tramite immagini differenza. Applicare in modo selettivo nei flussi di lavoro di visualizzazione; evitare prima di analisi automatizzate sensibili alle variazioni dell'intervallo dell'output.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma gaussiano usato dalla maschera di sfocatura (0.5-20.0, default 0.75)."
              },
              "amount": {
                "label": "Quantità",
                "description": "Moltiplicatore della quantità di nitidezza applicato al residuo (default 100.0)."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Residuo minimo in valore assoluto da rendere nitido (default 0.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "user_defined_weights_filter": {
            "name": "Filtro con pesi definiti dall'utente",
            "description": "Il filtro a pesi definiti dall'utente offre la massima flessibilità per l'analisi di convoluzione personalizzata, accettando coefficienti ponderati arbitrari per i pixel dell'intorno e consentendo l'implementazione di operatori specializzati, kernel specifici per dominio e algoritmi di livello di ricerca senza richiedere modifiche allo strumento o software specializzati. Gli utenti specificano le dimensioni del kernel (tipicamente 3×3 o 5×5), assegnano pesi in virgola mobile a ciascuna posizione e, facoltativamente, indicano i metodi di gestione dei bordi (riflessione, avvolgimento, riempimento costante). Questo filtro applica il kernel personalizzato all'intero raster tramite la matematica standard della convoluzione: ciascun pixel in uscita è uguale alla somma dei vicini pesati, consentendo sia i filtri tradizionali di elaborazione delle immagini sia kernel analitici personalizzati. Le caratteristiche principali comprendono una personalizzazione completa per le applicazioni di ricerca, il supporto per operazioni sia di miglioramento sia di analisi, la compatibilità con kernel normalizzati e non normalizzati e la preservazione della precisione in virgola mobile durante tutto il calcolo. I casi d'uso spaziano dal filtraggio spaziale avanzato per indici spettrali specializzati, all'implementazione di operatori sperimentali per la validazione di algoritmi, a kernel personalizzati di analisi della tessitura, ad aggregazioni pesate dell'intorno per l'analisi multicriterio e all'applicazione standardizzata di kernel su dataset diversi. Le applicazioni comprendono la prototipazione per la ricerca accademica, la valutazione di algoritmi in ambito industriale, la personalizzazione regionale delle pipeline di elaborazione e gli studi di confronto delle prestazioni. L'interpretazione dell'output dipende interamente dai coefficienti definiti dall'utente; kernel diversi producono risultati fondamentalmente diversi. I kernel normalizzati (somma dei pesi pari a 1.0) preservano gli intervalli di valori, utili per lo smussamento; i kernel non normalizzati (tipicamente a somma nulla) enfatizzano le differenze, utili per il rilevamento di bordi/derivate. Gli utenti devono validare le proprietà del kernel (segno, magnitudo e somma dei coefficienti) prima dell'applicazione in produzione. La documentazione delle specifiche del kernel è essenziale per flussi di lavoro riproducibili. Gli intervalli dei valori in uscita dipendono dalla progettazione del kernel; la documentazione dovrebbe specificare le caratteristiche attese dell'output e i requisiti di scalatura.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "weights": {
                "label": "Pesi",
                "description": "Pesi del kernel 2D come array annidati."
              },
              "kernel_center": {
                "label": "Centro del kernel",
                "description": "Modalità del centro del kernel: center, upper-left, upper-right, lower-left, lower-right."
              },
              "normalize_weights": {
                "label": "Normalizza i pesi",
                "description": "Se true, normalizza per la somma locale dei pesi attivi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "wiener_filter": {
            "name": "Filtro di Wiener",
            "description": "Il filtro di Wiener esegue una riduzione adattiva del rumore minimizzando l'errore quadratico medio tra l'output filtrato e il segnale vero, assumendo la conoscenza delle proprietà statistiche del segnale e del rumore. L'implementazione stima le varianze locali del segnale e del rumore all'interno di finestre mobili, calcolando coefficienti del filtro che bilanciano la soppressione del rumore con la preservazione dei dettagli: F = μ + (σ² - σₙ²)/σ² · (I - μ), dove μ è la media locale, σ² è la varianza del segnale e σₙ² è la varianza del rumore. Questo adattamento guidato dai dati fa sì che l'intensità del filtraggio risponda alle caratteristiche locali dell'immagine. Le caratteristiche principali comprendono l'adattamento automatico alle statistiche locali (le regioni piatte vengono smussate in modo aggressivo; le regioni dettagliate preservano la struttura), un'efficacia comprovata su immagini ottiche e SAR, parametri interpretabili basati sulle ipotesi del modello di rumore e la fattibilità computazionale tramite approssimazioni separabili. Il filtraggio di Wiener eccelle nella pre-elaborazione di immagini satellitari in cui il rumore varia spazialmente, nella riduzione dello speckle SAR preservando gli obiettivi puntuali, nei dati multispettrali privi di speckle per la mappatura della vegetazione e nella rimozione del rumore nella fusione radar-ottico. L'interpretazione dell'output mostra che le regioni ad alta varianza (dettagliate) vengono filtrate minimamente, mentre quelle a bassa varianza (rumorose) vengono filtrate in modo aggressivo. La stima della varianza del rumore influisce sull'output: una varianza del rumore sottostimata produce uno smussamento insufficiente; una varianza sovrastimata causa uno smussamento eccessivo e la perdita di dettagli. Gli intervalli dell'output si avvicinano a quelli dell'input; esaminare le immagini differenza (originale - filtrata) per verificare la riduzione del rumore. Il rapporto segnale/rumore di picco (PSNR) e l'indice di similarità strutturale (SSIM) quantificano l'efficacia del filtraggio. Le soglie di varianza locale indicano l'impatto dell'elaborazione: le regioni con un rapporto di varianza rilevato > 5 vengono filtrate in modo sostanziale; rapporti < 1 vengono filtrati minimamente. Le insidie comuni comprendono una stima imprecisa della varianza del rumore (eseguire un'analisi dark-frame o di regioni omogenee per la stima) e la scelta della dimensione della finestra che influisce sulla localizzazione. Applicare prima della classificazione o dell'estrazione di caratteristiche per ridurre le errate classificazioni dovute al rumore.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "radius": {
                "label": "Raggio",
                "description": "Raggio della finestra locale di Wiener in pixel (default 2)."
              },
              "noise_variance": {
                "label": "Varianza del rumore",
                "description": "Varianza opzionale del rumore additivo. Se omessa, è stimata dalla mappa della varianza locale."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "cloude_pottier_decomposition": {
            "name": "Decomposizione di Cloude-Pottier",
            "description": "La scomposizione di Cloude-Pottier diagonalizza la matrice di coerenza dei dati SAR quad-polarimetrici, estraendo autovalori e autovettori che caratterizzano i meccanismi di scattering. Entropia, anisotropia e angolo alfa medio, calcolati dagli autovettori, caratterizzano rispettivamente il disordine dello scattering, la dominanza del meccanismo e il tipo di scattering. Lo spazio dei parametri H-alfa consente una classificazione fisica dei meccanismi di scattering indipendente dalle variazioni di ampiezza, sfruttando le informazioni di fase polarimetriche. Caratteristiche principali: scomposizione SAR quad-polarimetrica; sfruttamento delle informazioni di fase; parametri di scattering fisicamente significativi; separazione dei meccanismi di scattering; robustezza allo speckle dell'ampiezza; possibilità di classificazione e interpretazione degli obiettivi. Casi d'uso: riconoscimento di obiettivi SAR; stima della biomassa forestale; caratterizzazione delle zone umide; rilevamento di navi/veicoli; classificazione della copertura del suolo; interpretazione di dati SAR polarimetrici. Interpretazione dell'output: l'output comprende l'entropia (grado di disordine; 0=scattering ordinato, 1=casuale), l'anisotropia (dominanza del meccanismo, 0-1) e l'angolo alfa (tipo di scattering: ~45°=dipolo, ~30°=superficie, ~60°=volume). I grafici di dispersione H-alfa rivelano pattern di raggruppamento che indicano i tipi di scattering. Il doppio rimbalzo (aree urbane) presenta un alfa alto; lo scattering superficiale (acqua) presenta un alfa basso; lo scattering di volume (foresta) presenta valori intermedi.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Raster della matrice: diag3 [m11,m22,m33], full3x3 compatto [m11,m22,m33,m12,m13,m23] o 9 raster completi in ordine di riga."
              },
              "matrix_format": {
                "label": "Formato della matrice",
                "description": "Formato della matrice in ingresso: diag3 (default con 3 raster) o full3x3."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster opzionale a 3 bande in uscita [H, A, alpha_deg]."
              }
            }
          },
          "enhanced_lee_filter": {
            "name": "Filtro di Lee migliorato",
            "description": "Il filtro Enhanced Lee combina il modello moltiplicativo di Lee con una stima raffinata della varianza e un'elaborazione multiscala, ottenendo una riduzione dello speckle superiore e preservando i dettagli fini e i bordi nelle immagini SAR. L'implementazione impiega statistiche locali calcolate tramite finestre di dimensione adattiva, incorpora un rilevamento dei bordi basato sul laplaciano e applica parametri del filtro spazialmente variabili. La formulazione migliorata applica: F = μ + w·(I - μ), dove w si adatta alla prossimità dei bordi: w→0 vicino ai bordi (filtraggio minimo), w→1 nelle regioni omogenee (filtraggio aggressivo). Le caratteristiche principali comprendono un'elaborazione adattiva ai bordi (che preserva i confini), un adattamento multiscala dei parametri, una migliore preservazione degli obiettivi rispetto al Lee standard e l'efficacia su SAR molto rumorosi. Il filtraggio Enhanced Lee eccelle in scene SAR complesse con numerosi elementi, nelle applicazioni di mappatura delle alluvioni in cui la localizzazione dei bordi è fondamentale, nel rilevamento degli edifici da SAR urbano e nell'analisi multitemporale dei cambiamenti. L'interpretazione dell'output rivela la preservazione dei bordi tramite un filtraggio ridotto vicino alle transizioni: i pixel di confine mantengono una varianza maggiore rispetto ai pixel lontani. L'adattamento multiscala diventa evidente tramite l'analisi dell'istogramma, che mostra picchi pronunciati corrispondenti alle classi della scena. Gli intervalli dell'output corrispondono a quelli dell'input; il confronto con il Lee standard mostra una ridotta sfocatura dei bordi e una nitidezza degli obiettivi mantenuta. La qualità del rilevamento dei bordi influisce direttamente sull'output: bordi forti consentono una buona preservazione dei confini; bordi deboli possono indurre uno smussamento eccessivo. Le statistiche mostrano una riduzione controllata della varianza che bilancia la soppressione del rumore con la preservazione dei dettagli. Gli artefatti comuni comprendono un possibile aspetto a blocchi se le transizioni multiscala diventano visibili e una preservazione eccessiva se il rilevamento dei bordi è troppo aggressivo. Monitorare la qualità della mappa dei bordi per convalidare il comportamento del filtraggio. Applicare in pipeline complete di analisi SAR in cui occorre preservare molteplici elementi e mantenere nitidi i bordi, aspetto particolarmente importante per la pre-elaborazione di machine learning che richiede dati di addestramento con confini degli elementi chiari.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dell'intorno in pixel (intero dispari, default 11)."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dell'intorno in pixel (intero dispari, default 11)."
              },
              "enl": {
                "label": "ENL",
                "description": "Parametro del numero equivalente di look per la ponderazione del rapporto sigma (default 4.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "freeman_durden_decomposition": {
            "name": "Decomposizione di Freeman-Durden",
            "description": "La scomposizione di Freeman-Durden quantifica i contributi dei meccanismi di scattering dei dati SAR quad-polarimetrici tramite una scomposizione su base ortogonale nelle componenti di riflessione superficiale, doppio rimbalzo (urbano/diedro) e volume (vegetazione/mezzi casuali). L'ottimizzazione ai minimi quadrati non negativi vincola le frazioni di potenza garantendone la realizzabilità fisica e l'interpretabilità. Le mappe di potenza in uscita sono direttamente legate alle proprietà del terreno: un'elevata dominanza superficiale indica suolo nudo/acqua, un doppio rimbalzo elevato indica strutture urbane, un volume elevato indica foresta/vegetazione. Caratteristiche principali: componenti di scattering fisicamente interpretabili; firme specifiche del terreno; ottimizzazione vincolata; supporto per SAR quad-polarimetrici; robustezza allo speckle; possibilità di classificazione specifica per obiettivo. Casi d'uso: classificazione urbano-rurale; stima della biomassa forestale; rilevamento dell'umidità del suolo; rilevamento delle alluvioni; monitoraggio della fenologia delle colture; mappatura della copertura del suolo. Interpretazione dell'output: la potenza superficiale indica la riflessione speculare da terreno asciutto/acqua; la potenza di doppio rimbalzo indica strutture artificiali/aree urbane; la potenza di volume indica vegetazione/foresta. Le combinazioni di componenti consentono la discriminazione della copertura del suolo: volume alto + doppio rimbalzo basso indica foresta; doppio rimbalzo alto + volume basso indica area urbana; superficie/volume bilanciati indicano un terreno misto.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Raster della matrice: diag3 [m11,m22,m33], full3x3 compatto [m11,m22,m33,m12,m13,m23] o 9 raster completi in ordine di riga."
              },
              "matrix_format": {
                "label": "Formato della matrice",
                "description": "Formato della matrice in ingresso: diag3 (default con 3 raster) o full3x3."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster opzionale a 3 bande in uscita [surface, double_bounce, volume]."
              },
              "output_clip_mask": {
                "label": "Maschera di ritaglio in uscita",
                "description": "Raster opzionale della maschera di ritaglio in uscita (1 dove si è verificato un ritaglio/rinormalizzazione non fisico)."
              }
            }
          },
          "frost_filter": {
            "name": "Filtro di Frost",
            "description": "Il filtro di Frost implementa la riduzione dello speckle SAR usando un modello di rumore moltiplicativo e statistiche locali adattive, ed è progettato specificamente per le immagini radar in cui lo speckle segue una distribuzione Gamma anziché un rumore gaussiano. L'implementazione calcola la media e la varianza locali, quindi applica una ponderazione moltiplicativa adattiva: F = I · exp(-variance/(2·mean²)·distance²), dove distance misura la deviazione del pixel dalla media locale. Questa formulazione riduce l'intensità dello speckle in modo inversamente proporzionale alla coerenza stimata. Le caratteristiche principali comprendono un adattamento specifico per il SAR (modello di rumore moltiplicativo anziché additivo), la preservazione degli obiettivi puntuali e dei bordi (elementi coerenti), un adattamento guidato dalla varianza locale che consente di regolare l'intensità e un'efficacia comprovata su dati SAR a polarizzazione singola e multipla. Il filtraggio di Frost eccelle nella pre-elaborazione di immagini SAR per la classificazione (monitoraggio agricolo, mappatura dell'uso del suolo), nella fusione SAR-ottico pesata sulla coerenza, nella mappatura delle alluvioni da radar in presenza di copertura nuvolosa e nei flussi di lavoro di rilevamento dei cambiamenti con radar ad apertura sintetica. L'interpretazione dell'output mostra che le regioni ad alta varianza (potenziali obiettivi coerenti) vengono filtrate minimamente, mentre quelle a bassa varianza (dominate dallo speckle) vengono filtrate in modo aggressivo. Gli intervalli tipici dell'output corrispondono a quelli dell'input; per la visualizzazione si applica spesso una scala logaritmica (decibel) prima o dopo il filtraggio. Il rapporto varianza/media controlla direttamente l'intensità del filtro: un rapporto > 0.5 indica probabile speckle; un rapporto < 0.1 suggerisce obiettivi coerenti. Gli artefatti dell'output comprendono una possibile perdita di dettagli se la stima della varianza è inaffidabile e un bias direzionale negli elementi orientati. La verifica tramite mappe di coerenza conferma la preservazione dei bordi nelle zone ad alta coerenza. Monitorare le statistiche dell'output: la media dovrebbe stabilizzarsi nelle iterazioni di filtraggio; la varianza dovrebbe diminuire in modo sostanziale. Applicare prima della classificazione per migliorare l'accuratezza categoriale. Combinare con una post-elaborazione morfologica per affinare i confini degli oggetti e rimuovere i frammenti di speckle residui.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "radius": {
                "label": "Raggio",
                "description": "Raggio della finestra locale in pixel (default 2)."
              },
              "damping_factor": {
                "label": "Fattore di smorzamento",
                "description": "Fattore di smorzamento di Frost che controlla il decadimento esponenziale (default 2.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "gamma_map_filter": {
            "name": "Filtro Gamma MAP",
            "description": "Il filtro Gamma Map esegue la riduzione dello speckle SAR usando un modello statistico a distribuzione Gamma, tenendo conto esplicitamente delle caratteristiche moltiplicative dello speckle del segnale radar tramite un adattamento parametrico. L'implementazione stima i parametri locali della distribuzione Gamma (forma α e scala β) dalle statistiche dell'immagine, quindi filtra tramite una funzione di ponderazione che rispetta la distribuzione: F = I · [1 - (1-L/N)/(1 + L/N)·√(1 + N/L²)], dove L è il numero equivalente di look (misura della coerenza) e N è il parametro stimato. Le caratteristiche principali comprendono statistiche SAR teoricamente rigorose (la distribuzione Gamma è lo standard per il radar), la stima automatica del numero di look che richiede un input minimo dell'utente, una preservazione dei bordi superiore rispetto ai filtri uniformi e l'applicabilità a SAR single-look e multi-look. Il filtraggio Gamma Map eccelle nella rimozione del rumore da stack SAR multitemporali per il rilevamento dei cambiamenti su serie temporali, nel miglioramento della coerenza di fase del SAR interferometrico (InSAR), nella pre-elaborazione per la scomposizione SAR polarimetrica e nella normalizzazione del backscatter SAR in ambito forestale. L'interpretazione dell'output rivela che l'intensità del filtro si adatta alla coerenza della scena: le regioni ad alta coerenza (α grande) vengono filtrate delicatamente, preservando gli obiettivi; le regioni a bassa coerenza (α piccolo) vengono filtrate in modo aggressivo, sopprimendo lo speckle. Il numero equivalente di look L indica l'efficacia del filtraggio: L=1 (filtraggio minimo) preserva tutti i dettagli; L>5 produce uno smussamento sostanziale. La scala dell'output resta nelle unità dell'input; la conversione logaritmica facilita la visualizzazione. Le riduzioni tipiche della varianza dell'output variano tra il 50 e l'80% a seconda del carattere della scena e della scelta del numero di look. Monitorare gli istogrammi dell'output alla ricerca della firma di speckle residua; distribuzioni bimodali suggeriscono una buona separazione delle componenti della scena. Gli artefatti comprendono possibili striature negli elementi orientati o un lieve degrado della tessitura se L è sovrastimato. Convalidare il filtraggio rispetto alla verità a terra nelle aree di addestramento. Applicare in modo strategico nella classificazione SAR polarimetrica o nel filtraggio di fase InSAR che richiedono un miglioramento pesato sulla coerenza.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "radius": {
                "label": "Raggio",
                "description": "Raggio della finestra locale in pixel (default 2)."
              },
              "enl": {
                "label": "ENL",
                "description": "Numero equivalente di look (default 1.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "h_alpha_wisart_classification": {
            "name": "Classificazione H-Alpha Wisart",
            "description": "La classificazione H/α/A-Wisart combina una zonizzazione non supervisionata tramite la partizione dello spazio dei parametri H/α/A con il clustering statistico di Wishart per classificare automaticamente i dati SAR polarimetrici in 9 zone fisicamente significative corrispondenti a classi di meccanismi di scattering. L'algoritmo riceve i parametri di entropia (H), anisotropia (A) e alfa (α) dalla scomposizione di Cloude-Pottier e suddivide lo spazio delle caratteristiche 3D (H,A,α) in 9 regioni usando soglie fisse: la Zona 1 (H basso, α~20°) rappresenta la riflessione di Bragg su superfici asciutte; la Zona 5 (H~0.7, α~45°) indica lo scattering di volume isotropo nelle foreste; la Zona 9 (H alto, α~80°) rappresenta lo scattering diedro (doppio rimbalzo) da strutture urbane. All'interno di ciascuna zona, il clustering di Wishart affina facoltativamente la classificazione calcolando distanze statistiche nello spazio polarimetrico multivariato, migliorando la discriminazione di meccanismi simili. Le caratteristiche principali comprendono una classificazione automatica e non supervisionata che non richiede campioni di addestramento; 9 classi fisicamente interpretabili con definizioni standardizzate che consentono la confrontabilità a livello globale; un funzionamento opzionale in doppia modalità (solo soglie per la velocità, soglie+Wishart per l'accuratezza); e metriche di confidenza integrate basate sulla distanza dai confini delle zone e sulla verosimiglianza di Wishart. Lo strumento accetta immagini (H,A,α) precalcolate oppure richiama automaticamente la scomposizione di Cloude-Pottier se vengono fornite le matrici grezze. I principali casi d'uso comprendono la segmentazione di immagini SAR e la generazione di mappe da dati polarimetrici, la classificazione non supervisionata dei tipi di copertura del suolo (acqua, agricoltura, foresta, aree urbane) direttamente dalle matrici di coerenza SAR, la valutazione rapida della qualità dei dati polarimetrici tramite le distribuzioni di occupazione delle zone e il rilevamento dei cambiamenti che rivela transizioni dei meccanismi di scattering indicative di alterazioni della copertura del suolo. Interpretazione dell'output: la mappa a 9 classi corrisponde direttamente ai tipi di terreno; le zone possono essere aggregate in categorie più ampie (acqua/speculare = zone 1-2, vegetazione/volume = zone 4-6, urbano/diedro = zone 7-9). I pixel non classificati (classe 0) indicano firme polarimetriche insolite che richiedono approfondimenti.",
            "params": {
              "h_raster": {
                "label": "Raster H",
                "description": "Raster di entropia (H) in ingresso dalla decomposizione di Cloude-Pottier (intervallo 0-1)."
              },
              "alpha_raster": {
                "label": "Raster Alpha",
                "description": "Raster alpha (α) in ingresso dalla decomposizione di Cloude-Pottier (gradi, 0-90)."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta alpha per corrispondere a H quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster opzionale in uscita con etichette a 9 classi (1-9)."
              }
            }
          },
          "kuan_filter": {
            "name": "Filtro di Kuan",
            "description": "Esegue il filtraggio dello speckle di Kuan per immagini SAR/radar usando un approccio parametrico che stima le medie e la varianza locali. Ponderazione adattiva basata sulla varianza del rumore e sulla varianza locale dell'immagine. Simile a Lee ma con ipotesi statistiche diverse. Metodo di elaborazione SAR operativo ampiamente usato. Equilibrio tra efficienza computazionale e buoni risultati su dati SAR diversi. Il filtraggio di Kuan assume statistiche gaussiane con un modello di speckle moltiplicativo. Si adatta alla varianza locale, distinguendo tra variazione del segnale e speckle. Particolarmente efficace per immagini SAR eterogenee (elementi chiari e scuri misti). Computazionalmente ragionevole. Rappresenta un compromesso pratico tra sofisticazione e costo computazionale. Standard in molti sistemi di elaborazione SAR. Applicazioni: (1) rimozione operativa dello speckle SAR, (2) pre-elaborazione SAR con backscatter misto, (3) pre-elaborazione RadarSat/Sentinel-1, (4) elaborazione SAR di routine. Parametri tipici: filter_size=da 5×7 a 7×7.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "radius": {
                "label": "Raggio",
                "description": "Raggio della finestra locale in pixel (default 2)."
              },
              "enl": {
                "label": "ENL",
                "description": "Numero equivalente di look (default 1.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "refined_lee_filter": {
            "name": "Filtro di Lee raffinato",
            "description": "Il filtro Refined Lee migliora il filtraggio di Lee standard tramite una stima avanzata della coerenza e adattamenti che preservano i bordi, usando statistiche locali raffinate e un'analisi direzionale per una riduzione dello speckle superiore. L'implementazione estende il modello di Lee rilevando l'orientamento dei bordi, applicando finestre direzionali allineate ai confini e calcolando stime raffinate della coerenza. Matematicamente: F = μ + √(σ_p²/(σ_I²))·(I - μ) con un calcolo della varianza allineato direzionalmente. Questo affinamento migliora la preservazione dei bordi mantenendo la soppressione dello speckle. Le caratteristiche principali comprendono la sensibilità direzionale (adatta la direzione del filtraggio alle strutture dell'immagine), una migliore stima della coerenza (usa finestre anisotrope), una preservazione dei bordi superiore rispetto al Lee standard e l'efficacia su scene SAR complesse. Il filtraggio Refined Lee eccelle nel rilevamento dei cambiamenti che richiede confini netti, nella preparazione di mappe di coerenza InSAR, nell'elaborazione SAR polarimetrica in cui la preservazione degli obiettivi è fondamentale e nell'analisi SAR forestale che distingue gli alberi dallo sfondo. L'interpretazione dell'output rivela che il filtraggio rispetta l'orientamento dei bordi: i bordi orizzontali vengono filtrati orizzontalmente, quelli verticali verticalmente e quelli diagonali diagonalmente. Questo adattamento direzionale riduce al minimo il filtraggio attraverso i veri confini. Le stime della coerenza sono tipicamente più accurate rispetto al Lee standard, riducendo gli artefatti di filtraggio. Gli intervalli dell'output corrispondono a quelli dell'input; l'adattamento direzionale diventa evidente all'ispezione visiva (i bordi restano più nitidi rispetto al Lee standard). Le statistiche mostrano una maggiore preservazione delle regioni ad alto contrasto. Le componenti direzionali rivelano l'orientamento della struttura della scena; un forte bias direzionale indica un orientamento prevalente degli elementi. Gli artefatti comuni si riducono rispetto al Lee standard, in particolare vicino ai bordi e agli elementi complessi. Gli artefatti comprendono un possibile adattamento eccessivo se la stima direzionale fallisce e artefatti delle finestre direzionali in corrispondenza di confini deboli. Monitorare le mappe di coerenza per convalidare l'accuratezza del rilevamento dei bordi. Applicare in modo strategico nella classificazione SAR in cui occorre preservare strutture direzionali (ad es. foreste, campi agricoli allineati).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dell'intorno in pixel (intero dispari, default 11)."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dell'intorno in pixel (intero dispari, default 11)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "wisart_iterative_clustering": {
            "name": "Clustering iterativo Wisart",
            "description": "Il clustering iterativo di Wishart esegue una classificazione non supervisionata dei dati SAR polarimetrici affinando iterativamente i centri dei cluster tramite la metrica della distanza statistica complessa di Wishart, che misura la similarità nelle distribuzioni di probabilità polarimetriche multivariate. L'algoritmo si inizializza dalle zone della scomposizione H/α (che forniscono 9 cluster seme con un'interpretazione fisica nota), quindi entra in un ciclo simile all'expectation-maximization: (1) calcola la distanza di Wishart dalla matrice di coerenza stimata di ciascun pixel a ciascun prototipo di cluster; (2) riassegna i pixel al cluster più vicino; (3) aggiorna i prototipi dei cluster calcolando la media delle matrici dei pixel assegnati; (4) itera fino alla convergenza (tasso di riassegnazione dei pixel <convergence_threshold) o al raggiungimento di max_iterations. Le caratteristiche principali comprendono un quadro statistico a valori complessi che gestisce correttamente la struttura dei dati polarimetrici, a differenza della distanza euclidea; l'inizializzazione automatica da zone H/α interpretabili che riduce la dipendenza da semi casuali; il monitoraggio della convergenza per pixel che consente un'iterazione adattiva mirata; l'input opzionale di (H,α) precalcolati o il calcolo automatico delle matrici da input di coerenza grezzi; e una robustezza integrata allo speckle single-look grazie alla compatibilità con l'elaborazione multi-look. Lo strumento supporta sia formati di matrice convenzionali sia compatti. I principali casi d'uso comprendono la classificazione di immagini SAR polarimetriche che produce mappe della copertura del suolo più raffinate rispetto alla partizione H/α in 9 zone, l'affinamento iterativo di una classificazione non supervisionata iniziale per la cartografia, la valutazione automatizzata della qualità dei dati polarimetrici tramite metriche di stabilità dei cluster e la classificazione SAR di serie temporali che consente il rilevamento dei cambiamenti temporali tramite l'analisi delle transizioni tra cluster. Interpretazione dell'output: mappa raffinata dei cluster (tipicamente 3-9 classi a seconda della convergenza) che mostra gruppi di meccanismi di scattering ben separati. La cronologia della convergenza fornisce una metrica di confidenza: una convergenza iniziale rapida indica una separazione stabile delle classi; una convergenza lenta suggerisce pixel ambigui che trarrebbero vantaggio da un'analisi multi-vista o di rilevamento dei cambiamenti. L'integrazione con le zone H/α consente lo sviluppo della legenda: mantenere ove possibile la corrispondenza con le zone H/α per preservare l'interpretabilità.",
            "params": {
              "h_raster": {
                "label": "Raster H",
                "description": "Raster di entropia (H) in ingresso (intervallo 0-1)."
              },
              "alpha_raster": {
                "label": "Raster Alpha",
                "description": "Raster alpha (α) in ingresso (gradi, 0-90)."
              },
              "max_iterations": {
                "label": "Iterazioni massime",
                "description": "Numero massimo di iterazioni di clustering (default 10)."
              },
              "convergence_threshold": {
                "label": "Soglia di convergenza",
                "description": "Criterio di convergenza: frazione di pixel invariati (default 0.99)."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta alpha per corrispondere a H quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster opzionale delle etichette dei cluster in uscita."
              }
            }
          },
          "yamaguchi_4component_decomposition": {
            "name": "Decomposizione di Yamaguchi a 4 componenti",
            "description": "La scomposizione SAR a 4 componenti di Yamaguchi scompone i dati radar ad apertura sintetica a doppia polarizzazione in componenti fisicamente interpretabili che rappresentano lo scattering superficiale, lo scattering a doppio rimbalzo (volume), lo scattering elicoidale e lo scattering di volume, usando un'analisi polarimetrica basata su modello con l'integrazione opzionale di un DEM. La scomposizione separa i diversi meccanismi di retrodiffusione tramite l'analisi degli autovalori delle matrici di covarianza polarimetriche, interpretando le componenti come riflessione superficiale (scattering di Bragg), riflessione a doppio rimbalzo da riflettori angolari, rotazione elicoidale della polarizzazione (poco comune) e scattering di volume diffuso da vegetazione o superfici rugose. L'integrazione di un DEM esterno stima il contributo topografico allo scattering, consentendo una migliore discriminazione del vero scattering di volume dagli effetti topografici. Le caratteristiche principali comprendono un'interpretazione fisica basata su modello che consente l'estrazione di parametri geofisici significativi, una correzione topografica opzionale basata sul DEM che migliora l'accuratezza delle componenti sul terreno, vincoli di non negatività delle componenti che evitano risultati di scomposizione non fisici e la gestione automatica delle lacune nei dati e delle regioni di layover. Le applicazioni comprendono la stima della biomassa forestale dalla componente di scattering di volume, la mappatura urbana che sfrutta la dominanza del doppio rimbalzo nelle aree edificate, la stima dell'umidità del suolo dal comportamento dello scattering superficiale e il rilevamento di frane/cambiamenti tramite le variazioni dei rapporti tra componenti. L'output della scomposizione di Yamaguchi consente l'interpretazione geofisica. L'output comprende immagini a quattro componenti (potenza di scattering superficiale, a doppio rimbalzo, elicoidale e di volume), metriche di qualità della scomposizione che quantificano l'accuratezza dell'adattamento, indici del tipo di scattering medio che facilitano la caratterizzazione della copertura del suolo e diagnostiche opzionali di coerenza/entropia che orientano la valutazione della qualità dei dati.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Raster della matrice: 6 compatti [m11,m22,m33,m12,m13,m23] o 9 elementi completi della matrice complessa 3x3 in ordine di riga."
              },
              "matrix_format": {
                "label": "Formato della matrice",
                "description": "Formato della matrice in ingresso: full3x3 (default) per matrici hermitiane con parti reale/immaginaria."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster opzionale a 4 bande in uscita [surface, double_bounce, volume, helix]."
              }
            }
          },
          "ascii_to_las": {
            "name": "Da ASCII a LAS",
            "description": "Conversione di formato: elaborazione batch CSV→LAS. Analizza file di testo delimitati da spazi/virgole/tabulazioni (x,y,z,intensity,class,returns,angle,time) e li converte in LAS con metadati EPSG.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di percorsi dei file ASCII in ingresso."
              },
              "pattern": {
                "label": "Pattern",
                "description": "Pattern dei campi, es. 'x,y,z,i,c,rn,nr,sa'."
              },
              "epsg_code": {
                "label": "Codice EPSG",
                "description": "Codice EPSG per i metadati del CRS del LAS in uscita."
              },
              "output_directory": {
                "label": "Cartella di uscita",
                "description": "Cartella di uscita opzionale per i file LAS generati."
              }
            }
          },
          "las_to_ascii": {
            "name": "Da LAS ad ASCII",
            "description": "Conversione di formato: output LAS→CSV. Esporta tutti gli attributi dei punti in testo delimitato per l'importazione in fogli di calcolo/database o per lo scripting.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR opzionale in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso CSV opzionale in uscita (solo modalità a ingresso singolo)."
              }
            }
          },
          "las_to_shapefile": {
            "name": "Da LAS a shapefile",
            "description": "Converte nuvole di punti LAS/LAZ in shapefile vettoriali puntuali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR opzionale in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita per la modalità a ingresso singolo."
              },
              "output_multipoint": {
                "label": "Multipunto in uscita",
                "description": "Se true emette una geometria multipunto con una sola geometria; altrimenti emette una geometria puntuale per punto."
              }
            }
          },
          "lidar_colourize": {
            "name": "Colora LiDAR",
            "description": "Assegna i colori ai punti da un'immagine: campiona l'ortofoto/immagine georeferenziata sovrapposta nella posizione di ciascun punto e memorizza il valore come RGB. Visualizzazione fotorealistica della nuvola di punti.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "image": {
                "label": "Immagine",
                "description": "Percorso del raster dell'immagine in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "lidar_join": {
            "name": "Unisci LiDAR",
            "description": "Unisce più file LiDAR: concatena le nuvole di punti preservando gli attributi e la coerenza dell'intestazione. Elaborazione batch su raccolte di tessere.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di percorsi LiDAR in ingresso o oggetti LiDAR tipizzati."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "lidar_shift": {
            "name": "Trasla LiDAR",
            "description": "Trasla le coordinate della nuvola di punti: offset x/y/z per spostamenti di datum, correzioni di registrazione o trasformazioni del sistema di coordinate. Regolazione massiva delle coordinate.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "x_shift": {
                "label": "Traslazione X",
                "description": "Traslazione da aggiungere alle coordinate x."
              },
              "y_shift": {
                "label": "Traslazione Y",
                "description": "Traslazione da aggiungere alle coordinate y."
              },
              "z_shift": {
                "label": "Traslazione Z",
                "description": "Traslazione da aggiungere alle coordinate z."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "lidar_tile": {
            "name": "Suddividi LiDAR in tessere",
            "description": "Suddivide la nuvola di punti in tessere a griglia regolare: partiziona in base all'estensione x/y con dimensioni configurabili e soglia minima di punti. Distribuzione ed elaborazione standard dei dati.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "tile_width": {
                "label": "Larghezza della tessera",
                "description": "Larghezza della tessera in unità x (default 1000)."
              },
              "tile_height": {
                "label": "Altezza della tessera",
                "description": "Altezza della tessera in unità y (default 1000)."
              },
              "origin_x": {
                "label": "Origine X",
                "description": "Coordinata x dell'origine della griglia (default 0)."
              },
              "origin_y": {
                "label": "Origine Y",
                "description": "Coordinata y dell'origine della griglia (default 0)."
              },
              "min_points_in_tile": {
                "label": "Punti minimi per tessera",
                "description": "Punti minimi richiesti per scrivere una tessera (default 2)."
              },
              "output_laz_format": {
                "label": "Formato LAZ in uscita",
                "description": "Se true, scrive uscite .laz; altrimenti .las (default true)."
              },
              "output_directory": {
                "label": "Cartella di uscita",
                "description": "Cartella opzionale in cui scrivere le tessere in uscita; per impostazione predefinita <input_dir>/<input_stem>/."
              }
            }
          },
          "lidar_tophat_transform": {
            "name": "Trasformata top-hat LiDAR",
            "description": "Estrae l'altezza sul suolo tramite top-hat bianco morfologico: erosione + dilatazione approssimano il suolo locale, il residuo = altezza. Normalizzazione senza suolo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno usato per erosione e dilatazione."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "recover_flightline_info": {
            "name": "Recupera informazioni sulle linee di volo",
            "description": "Ricostruisce gli ID delle strisciate di volo dalle interruzioni del tempo GPS: deduce i confini delle strisciate di volo e li marca in point-source-ID/user-data/RGB. Recupero della traiettoria di volo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "max_time_diff": {
                "label": "Differenza di tempo massima",
                "description": "Intervallo massimo di tempo GPS all'interno della linea di volo prima di iniziare una nuova linea di volo."
              },
              "pt_src_id": {
                "label": "ID sorgente del punto",
                "description": "Se true, scrive gli ID delle linee di volo inferiti in point_source_id."
              },
              "user_data": {
                "label": "Dati utente",
                "description": "Se true, scrive gli ID delle linee di volo inferiti in user_data (modulo 256)."
              },
              "rgb": {
                "label": "RGB",
                "description": "Se true, assegna un colore casuale per ogni linea di volo inferita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "select_tiles_by_polygon": {
            "name": "Seleziona tessere per poligono",
            "description": "Selezione batch delle tessere: copia le tessere LAS/LAZ da una directory all'output quando i punti campione della tessera intersecano i confini dei poligoni. Estrazione dei dati basata sull'area di interesse.",
            "params": {
              "input_directory": {
                "label": "Cartella di ingresso",
                "description": "Cartella di ingresso contenente le tessere LiDAR."
              },
              "output_directory": {
                "label": "Cartella di uscita",
                "description": "Cartella di uscita per le tessere LiDAR selezionate."
              },
              "polygons": {
                "label": "Poligoni",
                "description": "Percorso del vettoriale poligonale in ingresso o oggetto vettoriale tipizzato."
              }
            }
          },
          "sort_lidar": {
            "name": "Ordina LiDAR",
            "description": "Ordina i punti secondo più criteri: x/y/z con dimensioni dei bin, più attributi derivati. Ottimizza la coerenza spaziale per la compressione e l'elaborazione a tessere.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "sort_criteria": {
                "label": "Criteri di ordinamento",
                "description": "Espressione dei criteri di ordinamento, es. 'x 100, y 100, z 10, scan_angle'."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "split_lidar": {
            "name": "Dividi LiDAR",
            "description": "Suddivide i punti in file separati in base a un attributo: raggruppa per classe, source-id, finestra temporale, bin spaziale o numero di punti. Stratificazione e distribuzione dei dati.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "split_criterion": {
                "label": "Criterio di divisione",
                "description": "Criterio di raggruppamento: num_pts, x, y, z, intensity, class, user_data, point_source_id, scan_angle o time."
              },
              "interval": {
                "label": "Intervallo",
                "description": "Dimensione delle classi per i criteri numerici; per num_pts è il numero di punti per file in uscita."
              },
              "min_pts": {
                "label": "Punti minimi",
                "description": "Punti minimi necessari prima di scrivere un file di divisione in uscita (default 5)."
              },
              "output_directory": {
                "label": "Cartella di uscita",
                "description": "Cartella opzionale per le uscite divise."
              }
            }
          },
          "classify_buildings_in_lidar": {
            "name": "Classifica edifici nel LiDAR",
            "description": "Marca i punti all'interno delle impronte degli edifici: assegna la classe 6 a tutti i punti che si trovano spazialmente entro i confini dei poligoni. Estrazione degli edifici basata su vettoriali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "buildings": {
                "label": "Edifici",
                "description": "Percorso del vettoriale poligonale delle impronte degli edifici in ingresso o oggetto vettoriale tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "classify_lidar": {
            "name": "Classifica LiDAR",
            "description": "Classificazione automatizzata dei punti: suolo, vegetazione, edifici tramite la geometria locale (linearità, planarità) e l'adattamento di piani RANSAC. Segmentazione basata sulla geometria.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno (default 2.5)."
              },
              "grd_threshold": {
                "label": "Soglia GRD",
                "description": "Altezza sopra il minimo locale considerata terreno (default 0.1)."
              },
              "oto_threshold": {
                "label": "Soglia OTO",
                "description": "Altezza sopra il minimo locale considerata oggetto fuori terra (default 1.0)."
              },
              "linearity_threshold": {
                "label": "Soglia di linearità",
                "description": "Soglia di linearità usata nella selezione finale dei punti non classificati (default 0.5)."
              },
              "planarity_threshold": {
                "label": "Soglia di planarità",
                "description": "Soglia di planarità usata nella segmentazione e nel raffinamento (default 0.85)."
              },
              "num_iter": {
                "label": "Numero di iterazioni",
                "description": "Numero di iterazioni RANSAC locali per le stime di planarità/linearità (default 30)."
              },
              "facade_threshold": {
                "label": "Soglia delle facciate",
                "description": "Distanza dai vicini usata nell'etichettatura delle facciate degli edifici (default 0.5)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "classify_overlap_points": {
            "name": "Classifica punti di sovrapposizione",
            "description": "Identifica le sovrapposizioni tra strisciate di volo: rileva le celle della griglia con più point-source ID, segnala o rimuove i punti in sovrapposizione. Controllo di qualità per la validazione dell'acquisizione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Dimensione della cella della griglia usata per l'analisi della sovrapposizione."
              },
              "overlap_criterion": {
                "label": "Criterio di sovrapposizione",
                "description": "max scan angle, not min point source id, not min time, o più ID di sorgente dei punti."
              },
              "filter": {
                "label": "Filtro",
                "description": "Se true, rimuove i punti sovrapposti; altrimenti classifica i punti sovrapposti come classe 12."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "clip_lidar_to_polygon": {
            "name": "Ritaglia LiDAR su poligono",
            "description": "Sottoinsieme spaziale della nuvola di punti: mantiene i punti all'interno dei confini dei poligoni. Selezione dei punti basata su vettoriali per l'estrazione dell'area di studio.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "polygons": {
                "label": "Poligoni",
                "description": "Percorso del vettoriale poligonale in ingresso o oggetto vettoriale tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "erase_polygon_from_lidar": {
            "name": "Cancella poligono dal LiDAR",
            "description": "Rimuove i punti LiDAR che ricadono all'interno della geometria dei poligoni.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "polygons": {
                "label": "Poligoni",
                "description": "Percorso del vettoriale poligonale in ingresso o oggetto vettoriale tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "filter_lidar": {
            "name": "Filtra LiDAR",
            "description": "Rimuove i punti tramite un'espressione: logica booleana sugli attributi (class, elevation, return_number, scan_angle, noise_flag, ecc.). Selezione flessibile dei punti.",
            "params": {
              "statement": {
                "label": "Istruzione",
                "description": "Espressione booleana, es. '!is_noise && class == 2' o 'NOT is_noise AND class == 2'."
              },
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita per la modalità a ingresso singolo."
              }
            }
          },
          "filter_lidar_by_percentile": {
            "name": "Filtra LiDAR per percentile",
            "description": "Seleziona il punto di rango percentile per cella: mantiene un punto per blocco della griglia al percentile di elevazione specificato. Decimazione con campione rappresentativo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "percentile": {
                "label": "Percentile",
                "description": "Percentile in [0, 100] (0=più basso, 100=più alto)."
              },
              "block_size": {
                "label": "Dimensione del blocco",
                "description": "Dimensione del blocco della griglia per la selezione del percentile locale (default 1.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "filter_lidar_by_reference_surface": {
            "name": "Filtra LiDAR per superficie di riferimento",
            "description": "Estrae i punti rispetto a una superficie di riferimento: z<superficie, z>superficie o entro una soglia. Identifica la vegetazione sopra il DTM o i punti sotto la superficie.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "ref_surface": {
                "label": "Superficie di riferimento",
                "description": "Percorso del raster di riferimento o oggetto raster tipizzato."
              },
              "query": {
                "label": "Interrogazione",
                "description": "Tipo di interrogazione: within, <, <=, >, >= (default within)."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Soglia di distanza z in valore assoluto usata da query=within."
              },
              "classify": {
                "label": "Classifica",
                "description": "Se true classifica i punti; altrimenti filtra e mantiene solo le corrispondenze."
              },
              "true_class_value": {
                "label": "Valore della classe vera",
                "description": "Valore di classe assegnato ai punti corrispondenti in modalità classificazione."
              },
              "false_class_value": {
                "label": "Valore della classe falsa",
                "description": "Valore di classe assegnato ai punti non corrispondenti in modalità classificazione."
              },
              "preserve_classes": {
                "label": "Mantieni le classi",
                "description": "Se true preserva le classi non corrispondenti in modalità classificazione."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "filter_lidar_classes": {
            "name": "Filtra classi LiDAR",
            "description": "Rimuove i punti in base alla classificazione: esclude le classi LAS indesiderate (rumore, acqua, edifici, ecc.). Pre-elaborazione essenziale per i flussi di lavoro di condizionamento del terreno.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "excluded_classes": {
                "label": "Classi escluse",
                "description": "Classi da escludere (array o stringa delimitata da virgole)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "filter_lidar_noise": {
            "name": "Filtra rumore LiDAR",
            "description": "Rimuove le classi di rumore ASPRS: esclude la classe 7 (rumore basso) e la classe 18 (rumore alto). Pulizia standard della nuvola di punti per dati conformi a LAS 1.4.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "filter_lidar_scan_angles": {
            "name": "Filtra angoli di scansione LiDAR",
            "description": "Rimuove i ritorni LiDAR obliqui: filtra i punti in base a una soglia dell'angolo di scansione. Migliora l'accuratezza verticale rimuovendo i ritorni ad angolo radente affetti da errore di posizione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Angolo di scansione massimo in valore assoluto (unità LAS intere; 1 unità = 0.006°). Obbligatorio."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "height_above_ground": {
            "name": "Altezza dal suolo",
            "description": "Normalizza tramite la geometria della nuvola di punti: calcola l'altezza di ciascun punto sopra il vicino più prossimo di classe suolo situato più in basso. Superficie del terreno locale senza riferimento raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "improved_ground_point_filter": {
            "name": "Filtro dei punti a terra migliorato",
            "description": "Pipeline di filtraggio dei punti del suolo in più fasi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso."
              },
              "block_size": {
                "label": "Dimensione del blocco",
                "description": "Dimensione della cella della griglia in unità xy."
              },
              "max_building_size": {
                "label": "Dimensione massima degli edifici",
                "description": "Larghezza massima attesa degli edifici in unità xy."
              },
              "slope_threshold": {
                "label": "Soglia di pendenza",
                "description": "Pendenza minima dei bordi in gradi."
              },
              "elev_threshold": {
                "label": "Soglia di elevazione",
                "description": "Soglia di distanza di elevazione."
              },
              "classify": {
                "label": "Classifica",
                "description": "Classifica anziché filtrare i punti."
              },
              "preserve_classes": {
                "label": "Mantieni le classi",
                "description": "Preserva le classi esistenti in modalità classificazione."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "individual_tree_segmentation": {
            "name": "Segmentazione dei singoli alberi",
            "description": "Segmenta i punti della vegetazione in chiome di alberi: clustering mean-shift con larghezza di banda adattiva derivata dalla geometria locale della chioma. Delimitazione degli alberi a livello di inventario.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "only_use_veg": {
                "label": "Usa solo la vegetazione",
                "description": "Se true, elabora solo le classi di vegetazione (default true)."
              },
              "veg_classes": {
                "label": "Classi di vegetazione",
                "description": "Classi di vegetazione come testo delimitato da virgole o array di interi (default '3,4,5')."
              },
              "min_height": {
                "label": "Altezza minima",
                "description": "Altezza minima dei punti per la segmentazione (default 2.0)."
              },
              "max_height": {
                "label": "Altezza massima",
                "description": "Altezza massima opzionale dei punti."
              },
              "bandwidth_min": {
                "label": "Larghezza di banda minima",
                "description": "Larghezza di banda orizzontale minima (default 1.0)."
              },
              "bandwidth_max": {
                "label": "Larghezza di banda massima",
                "description": "Larghezza di banda orizzontale massima (default 6.0)."
              },
              "adaptive_bandwidth": {
                "label": "Larghezza di banda adattiva",
                "description": "Stima la larghezza di banda orizzontale per seme dalla geometria locale della chioma (default true)."
              },
              "adaptive_neighbors": {
                "label": "Vicini adattivi",
                "description": "Numero di vicini usato per la scala di densità locale adattiva (default 24)."
              },
              "adaptive_sector_count": {
                "label": "Numero di settori adattivi",
                "description": "Numero di settori angolari per la stima locale del raggio della chioma (default 8)."
              },
              "grid_acceleration": {
                "label": "Accelerazione a griglia",
                "description": "Usa l'approssimazione a griglia in stile MeanShift++ per aggiornamenti delle mode più veloci (default false)."
              },
              "grid_cell_size": {
                "label": "Dimensione della cella della griglia",
                "description": "Dimensione della cella della griglia per gli aggiornamenti accelerati delle mode (default 0.5)."
              },
              "grid_refine_exact": {
                "label": "Raffinamento esatto della griglia",
                "description": "Esegue un breve raffinamento con vicini esatti dopo l'accelerazione a griglia (default false)."
              },
              "grid_refine_iterations": {
                "label": "Iterazioni di raffinamento della griglia",
                "description": "Limite di iterazioni del raffinamento esatto dopo gli aggiornamenti delle mode a griglia (default 2)."
              },
              "tile_size": {
                "label": "Dimensione della tessera",
                "description": "Dimensione opzionale delle tessere per la pianificazione dei semi; <=0 disabilita la suddivisione in tessere (default 0.0)."
              },
              "tile_overlap": {
                "label": "Sovrapposizione delle tessere",
                "description": "Larghezza di sovrapposizione delle tessere per la pianificazione dei semi a tessere (default 0.0)."
              },
              "vertical_bandwidth": {
                "label": "Larghezza di banda verticale",
                "description": "Larghezza di banda del kernel verticale (default 5.0)."
              },
              "max_iterations": {
                "label": "Iterazioni massime",
                "description": "Numero massimo di iterazioni di mean-shift per seme (default 30)."
              },
              "convergence_tol": {
                "label": "Tolleranza di convergenza",
                "description": "Tolleranza di convergenza per la magnitudine dello spostamento (default 0.05)."
              },
              "min_cluster_points": {
                "label": "Punti minimi per cluster",
                "description": "Punti minimi per cluster di alberi mantenuto (default 50)."
              },
              "mode_merge_dist": {
                "label": "Distanza di fusione delle mode",
                "description": "Soglia di distanza per la fusione delle mode convergenti (default 0.8)."
              },
              "threads": {
                "label": "Thread",
                "description": "Override del numero di thread (0 usa il pool Rayon predefinito)."
              },
              "simd": {
                "label": "SIMD",
                "description": "Abilita l'aritmetica assistita da SIMD nei cicli di ponderazione (default true)."
              },
              "output_id_mode": {
                "label": "Modalità ID in uscita",
                "description": "Codifica dell'ID segmento in uscita {rgb|user_data|point_source_id|rgb+user_data|rgb+point_source_id} (default rgb)."
              },
              "output_sidecar_csv": {
                "label": "CSV ausiliario in uscita",
                "description": "Se true, scrive un CSV point_index,segment_id accanto all'uscita lidar."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme deterministico per la mappatura dei colori (default 1)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "lidar_classify_subset": {
            "name": "Classifica sottoinsieme LiDAR",
            "description": "Trasferisce la classificazione: marca i punti di base che corrispondono alle posizioni della nuvola di sottoinsieme. Consente una riclassificazione spaziale basata su insiemi di punti ausiliari.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Percorso LiDAR di base o oggetto LiDAR tipizzato."
              },
              "subset": {
                "label": "Sottoinsieme",
                "description": "Percorso LiDAR del sottoinsieme o oggetto LiDAR tipizzato."
              },
              "subset_class_value": {
                "label": "Valore di classe del sottoinsieme",
                "description": "Valore di classificazione assegnato ai punti del sottoinsieme corrispondenti (0-18)."
              },
              "nonsubset_class_value": {
                "label": "Valore di classe fuori sottoinsieme",
                "description": "Classe opzionale per i punti non corrispondenti (0-18). Usare 255 per preservare le classi esistenti."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Tolleranza di abbinamento del vicino più prossimo 3D in unità di mappa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "lidar_elevation_slice": {
            "name": "Sezione altimetrica LiDAR",
            "description": "Estrae i punti di una fascia di elevazione: filtra o riclassifica i punti entro un intervallo di z. Isola strati specifici (suolo, sottobosco, chioma) o zone di elevazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "minz": {
                "label": "Z minimo",
                "description": "Limite inferiore della fetta di elevazione (default -infinito)."
              },
              "maxz": {
                "label": "Z massimo",
                "description": "Limite superiore della fetta di elevazione (default +infinito)."
              },
              "classify": {
                "label": "Classifica",
                "description": "Se true, riclassifica i punti invece di filtrarli (default false)."
              },
              "in_class_value": {
                "label": "Valore di classe in ingresso",
                "description": "Classificazione assegnata ai punti dentro la fetta quando classify=true (default 2)."
              },
              "out_class_value": {
                "label": "Valore di classe in uscita",
                "description": "Classificazione assegnata ai punti fuori dalla fetta quando classify=true (default 1)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "lidar_remove_outliers": {
            "name": "Rimuovi valori anomali LiDAR",
            "description": "Rileva i punti anomali tramite i residui di elevazione locali: confronta il punto con la media/mediana dell'intorno e segnala le anomalie. Rimuove errori grossolani irregolari e rumore.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno per il calcolo del residuo locale (default 2.0)."
              },
              "elev_diff": {
                "label": "Differenza di elevazione",
                "description": "Soglia del residuo di elevazione in valore assoluto per il rilevamento dei valori anomali (default 50.0)."
              },
              "use_median": {
                "label": "Usa la mediana",
                "description": "Usa la mediana invece della media dell'elevazione dell'intorno."
              },
              "classify": {
                "label": "Classifica",
                "description": "Se true, classifica i valori anomali come classe 7/18 invece di rimuoverli."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "lidar_segmentation": {
            "name": "Segmentazione LiDAR",
            "description": "Partiziona la nuvola di punti: l'adattamento di piani RANSAC + l'accrescimento di regioni crea componenti connesse. Assegna ID di segmento memorizzati in RGB. Clustering dei punti basato sulla forma.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno per la crescita delle regioni."
              },
              "num_iterations": {
                "label": "Numero di iterazioni",
                "description": "Numero di iterazioni RANSAC usate per rilevare i modelli planari locali."
              },
              "num_samples": {
                "label": "Numero di campioni",
                "description": "Numero di punti campionati per ogni adattamento del modello RANSAC locale."
              },
              "inlier_threshold": {
                "label": "Soglia degli inlier",
                "description": "Soglia del residuo usata per classificare i punti come inlier del piano locale."
              },
              "acceptable_model_size": {
                "label": "Dimensione accettabile del modello",
                "description": "Numero minimo di inlier richiesto per un modello di piano locale accettato."
              },
              "max_planar_slope": {
                "label": "Pendenza planare massima",
                "description": "Pendenza planare massima accettata in gradi."
              },
              "norm_diff_threshold": {
                "label": "Soglia di differenza delle normali",
                "description": "Differenza angolare massima (gradi) tra le normali planari vicine durante la crescita."
              },
              "max_z_diff": {
                "label": "Differenza Z massima",
                "description": "Differenza Z massima consentita durante la crescita di un segmento."
              },
              "classes": {
                "label": "Classi",
                "description": "Se true, non attraversa i confini di classe durante la crescita dei segmenti."
              },
              "ground": {
                "label": "Terreno",
                "description": "Se true, assegna class=2 al segmento più grande e class=1 agli altri punti segmentati."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "lidar_segmentation_based_filter": {
            "name": "Filtro LiDAR basato sulla segmentazione",
            "description": "Filtraggio del suolo tramite segmentazione a basso rilievo: fa crescere componenti connesse a partire da regioni localmente piatte, separando il terreno dalla vegetazione. Separazione robusta del suolo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno per la crescita delle componenti connesse."
              },
              "norm_diff_threshold": {
                "label": "Soglia di differenza delle normali",
                "description": "Parametro di compatibilità per le verifiche legacy sull'angolo delle normali."
              },
              "max_z_diff": {
                "label": "Differenza Z massima",
                "description": "Differenza massima di elevazione per la crescita connessa."
              },
              "classify_points": {
                "label": "Classifica i punti",
                "description": "Se true, classifica i punti invece di filtrarli."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "modify_lidar": {
            "name": "Modifica LiDAR",
            "description": "Aggiorna gli attributi dei punti tramite assegnazioni: z=z+offset, class=reclassify_expr, intensity=scale_factor. Trasformazioni flessibili a livello di punto.",
            "params": {
              "statement": {
                "label": "Istruzione",
                "description": "Una o più espressioni di assegnazione separate da punti e virgola, es. 'z = z + 1; class = if(z > 5, 2, class)'."
              },
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita per la modalità a ingresso singolo."
              }
            }
          },
          "normalize_lidar": {
            "name": "Normalizza LiDAR",
            "description": "Converte le elevazioni LiDAR assolute in altezza sul suolo: sottrae il DTM (DEM raster) dai valori z dei punti. Crea una nuvola di punti normalizzata per l'analisi della struttura.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "dtm": {
                "label": "DTM",
                "description": "Percorso del raster DTM in ingresso o oggetto raster tipizzato."
              },
              "no_negatives": {
                "label": "Nessun valore negativo",
                "description": "Limita a zero le altezze normalizzate negative."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "remove_duplicates": {
            "name": "Rimuovi duplicati",
            "description": "Deduplica la nuvola di punti: rimuove i punti con x/y identici (facoltativamente z). Gestisce le sovrapposizioni di più scansioni e migliora l'efficienza dell'elaborazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "include_z": {
                "label": "Includi Z",
                "description": "Se true, il rilevamento dei duplicati include z; altrimenti usa solo x/y."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "flightline_overlap": {
            "name": "Sovrapposizione delle linee di volo",
            "description": "Rileva le sovrapposizioni di acquisizione: conta i point-source ID distinti per cella. Visualizzazione delle sovrapposizioni basata su griglia per la valutazione della copertura delle strisciate di volo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR opzionale in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Risoluzione della griglia usata per contare le linee di volo distinte per cella."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "lidar_block_maximum": {
            "name": "Massimo per blocco LiDAR",
            "description": "Raster dal valore massimo di un attributo LiDAR: valore della cella = ritorno del punto più alto (elevazione, intensità, classe, ecc.). Generazione di DSM, estrazione della sommità della chioma, statistiche degli impulsi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Dimensione della cella di uscita."
              },
              "interpolation_parameter": {
                "label": "Parametro di interpolazione",
                "description": "Attributo dei punti (elevation/intensity/class/return_number/number_of_returns/scan_angle/time/rgb/user_data)."
              },
              "returns_included": {
                "label": "Ritorni inclusi",
                "description": "Modalità di filtraggio dei ritorni: all, first o last."
              },
              "excluded_classes": {
                "label": "Classi escluse",
                "description": "Classi da escludere (array o stringa delimitata da virgole)."
              },
              "min_elev": {
                "label": "Elevazione minima",
                "description": "Soglia di elevazione minima usata per il filtraggio di inclusione dei punti."
              },
              "max_elev": {
                "label": "Elevazione massima",
                "description": "Soglia di elevazione massima usata per il filtraggio di inclusione dei punti."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "lidar_block_minimum": {
            "name": "Minimo per blocco LiDAR",
            "description": "Raster dal valore minimo di un attributo LiDAR: valore della cella = ritorno del punto più basso (elevazione, intensità, classe). Generazione di DEM, estrazione della superficie del suolo, definizione della base del terreno.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Dimensione della cella di uscita."
              },
              "interpolation_parameter": {
                "label": "Parametro di interpolazione",
                "description": "Attributo dei punti (elevation/intensity/class/return_number/number_of_returns/scan_angle/time/rgb/user_data)."
              },
              "returns_included": {
                "label": "Ritorni inclusi",
                "description": "Modalità di filtraggio dei ritorni: all, first o last."
              },
              "excluded_classes": {
                "label": "Classi escluse",
                "description": "Classi da escludere (array o stringa delimitata da virgole)."
              },
              "min_elev": {
                "label": "Elevazione minima",
                "description": "Soglia di elevazione minima usata per il filtraggio di inclusione dei punti."
              },
              "max_elev": {
                "label": "Elevazione massima",
                "description": "Soglia di elevazione massima usata per il filtraggio di inclusione dei punti."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "lidar_construct_vector_tin": {
            "name": "Costruisci TIN vettoriale LiDAR",
            "description": "Crea una mesh 3D: la triangolazione di Delaunay dai punti filtrati viene prodotta in uscita come layer vettoriale poligonale. Rappresentazione della superficie e analisi topografica.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR opzionale in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita; in modalità batch ogni ingresso scrive un file _tin.shp accanto."
              },
              "returns": {
                "label": "Ritorni",
                "description": "Filtro dei ritorni: all, first o last."
              },
              "excluded_classes": {
                "label": "Classi escluse",
                "description": "Valori di classe opzionali da escludere."
              },
              "min_elev": {
                "label": "Elevazione minima",
                "description": "Elevazione minima consentita dei punti."
              },
              "max_elev": {
                "label": "Elevazione massima",
                "description": "Elevazione massima consentita dei punti."
              },
              "max_triangle_edge_length": {
                "label": "Lunghezza massima del lato del triangolo",
                "description": "Lunghezza massima opzionale consentita per i lati dei triangoli."
              }
            }
          },
          "lidar_contour": {
            "name": "Isoipse LiDAR",
            "description": "Estrae linee vettoriali di contorno: generazione di curve di livello basata su TIN con interpolazione per elevazione, intensità, tempo. Intervalli configurabili e filtraggio per lunghezza dei lati.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR opzionale in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (.shp/.geojson). In modalità batch ogni ingresso scrive un file .shp accanto."
              },
              "interval": {
                "label": "Intervallo",
                "description": "Intervallo delle isolinee (deve essere > 0)."
              },
              "base_contour": {
                "label": "Isolinea di base",
                "description": "Valore di offset dell'isolinea di base."
              },
              "smooth": {
                "label": "Liscia",
                "description": "Parametro di lisciatura di compatibilità (accettato per parità della forma di chiamata)."
              },
              "interpolation_parameter": {
                "label": "Parametro di interpolazione",
                "description": "Uno tra elevation, intensity, scan_angle, time o user_data."
              },
              "returns": {
                "label": "Ritorni",
                "description": "Filtro dei ritorni: all, first o last."
              },
              "excluded_classes": {
                "label": "Classi escluse",
                "description": "Valori di classe opzionali da escludere."
              },
              "min_elev": {
                "label": "Elevazione minima",
                "description": "Elevazione minima consentita dei punti."
              },
              "max_elev": {
                "label": "Elevazione massima",
                "description": "Elevazione massima consentita dei punti."
              },
              "max_triangle_edge_length": {
                "label": "Lunghezza massima del lato del triangolo",
                "description": "Lunghezza massima opzionale dei lati dei triangoli; i triangoli più lunghi vengono saltati."
              }
            }
          },
          "lidar_digital_surface_model": {
            "name": "Modello digitale di superficie LiDAR",
            "description": "Genera un DSM dai ritorni della superficie superiore LiDAR tramite TIN: usa i candidati localmente più alti entro un raggio, quindi la triangolazione. Rappresentazione della chioma della vegetazione e della sommità degli elementi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Dimensione della cella di uscita."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno per la selezione dei candidati della superficie superiore."
              },
              "min_elev": {
                "label": "Elevazione minima",
                "description": "Soglia di elevazione minima usata per il filtraggio di inclusione dei punti."
              },
              "max_elev": {
                "label": "Elevazione massima",
                "description": "Soglia di elevazione massima usata per il filtraggio di inclusione dei punti."
              },
              "max_triangle_edge_length": {
                "label": "Lunghezza massima del lato del triangolo",
                "description": "Lunghezza massima opzionale dei lati dei triangoli per sopprimere le facce a lati lunghi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "lidar_hex_bin": {
            "name": "Binning esagonale LiDAR",
            "description": "Aggrega i punti in esagoni: griglia di binning con sintesi per cella (conteggio, z media, intensità). Campionamento uniforme e binning statistico.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "width": {
                "label": "Larghezza",
                "description": "Larghezza dell'esagono (distanza tra i lati opposti)."
              },
              "orientation": {
                "label": "Orientamento",
                "description": "Orientamento della griglia: h (vertice in alto) o v (lato in alto)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita."
              }
            }
          },
          "lidar_hillshade": {
            "name": "Ombreggiatura del rilievo LiDAR",
            "description": "Visualizza la superficie LiDAR tramite ombreggiatura del rilievo: calcola le normali alla superficie per punto dall'adattamento di un piano locale, quindi ombreggia in base all'angolo di illuminazione. Memorizza il risultato come RGB per la visualizzazione 3D.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno per la stima locale delle normali. Valori <= 0 usano la spaziatura nominale stimata."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut dell'illuminazione in gradi."
              },
              "altitude": {
                "label": "Altitudine",
                "description": "Altitudine dell'illuminazione in gradi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "lidar_idw_interpolation": {
            "name": "Interpolazione IDW LiDAR",
            "description": "Grigliatura LiDAR pesata sulla distanza: assegna il valore della cella dalla media pesata dei punti circostanti (potenza dell'inverso della distanza). Superfici lisce, controllate tramite il parametro esponente.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Dimensione della cella di uscita."
              },
              "weight": {
                "label": "Peso",
                "description": "Esponente IDW (potenza)."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno; <=0 passa alla modalità k più vicini."
              },
              "interpolation_parameter": {
                "label": "Parametro di interpolazione",
                "description": "Attributo dei punti da interpolare (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Ritorni inclusi",
                "description": "Modalità di filtraggio dei ritorni: all, first o last."
              },
              "excluded_classes": {
                "label": "Classi escluse",
                "description": "Classi da escludere (array o stringa delimitata da virgole)."
              },
              "min_elev": {
                "label": "Elevazione minima",
                "description": "Soglia di elevazione minima usata per il filtraggio di inclusione dei punti."
              },
              "max_elev": {
                "label": "Elevazione massima",
                "description": "Soglia di elevazione massima usata per il filtraggio di inclusione dei punti."
              },
              "min_points": {
                "label": "Punti minimi",
                "description": "Numero minimo di punti per il ripiego sui k più vicini."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "lidar_nearest_neighbour_gridding": {
            "name": "Grigliatura al vicino più prossimo LiDAR",
            "description": "Grigliatura LiDAR rapida: assegna il valore della cella dal punto più vicino entro il raggio di ricerca. Bias di interpolazione minimo, efficiente per nuvole di punti ad alta densità. Generazione rapida di DSM/DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Dimensione della cella di uscita."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Distanza massima dal vicino più prossimo; le celle oltre questa diventano NoData."
              },
              "interpolation_parameter": {
                "label": "Parametro di interpolazione",
                "description": "Attributo dei punti da interpolare (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Ritorni inclusi",
                "description": "Modalità di filtraggio dei ritorni: all, first o last."
              },
              "excluded_classes": {
                "label": "Classi escluse",
                "description": "Classi da escludere (array o stringa delimitata da virgole)."
              },
              "min_elev": {
                "label": "Elevazione minima",
                "description": "Soglia di elevazione minima usata per il filtraggio di inclusione dei punti."
              },
              "max_elev": {
                "label": "Elevazione massima",
                "description": "Soglia di elevazione massima usata per il filtraggio di inclusione dei punti."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "lidar_radial_basis_function_interpolation": {
            "name": "Interpolazione con funzioni a base radiale LiDAR",
            "description": "Superficie LiDAR liscia tramite RBF: le funzioni a base radiale catturano la curvatura locale e la microtopografia. Grigliatura di alta qualità con derivate continue attraverso i confini.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Dimensione della cella di uscita."
              },
              "num_points": {
                "label": "Numero di punti",
                "description": "Numero minimo di vicini usati per l'interpolazione locale."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno; <=0 usa solo la modalità k più vicini."
              },
              "func_type": {
                "label": "Tipo di funzione",
                "description": "Tipo di base RBF (thinplatespline, polyharmonic, gaussian, multiquadric, inversemultiquadric)."
              },
              "poly_order": {
                "label": "Ordine del polinomio",
                "description": "Ordine della tendenza polinomiale usata per la correzione locale (none, constant, quadratic)."
              },
              "weight": {
                "label": "Peso",
                "description": "Parametro di forma/esponente della base a seconda di func_type."
              },
              "interpolation_parameter": {
                "label": "Parametro di interpolazione",
                "description": "Attributo dei punti da interpolare (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Ritorni inclusi",
                "description": "Modalità di filtraggio dei ritorni: all, first o last."
              },
              "excluded_classes": {
                "label": "Classi escluse",
                "description": "Classi da escludere (array o stringa delimitata da virgole)."
              },
              "min_elev": {
                "label": "Elevazione minima",
                "description": "Soglia di elevazione minima usata per il filtraggio di inclusione dei punti."
              },
              "max_elev": {
                "label": "Elevazione massima",
                "description": "Soglia di elevazione massima usata per il filtraggio di inclusione dei punti."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "lidar_sibson_interpolation": {
            "name": "Interpolazione di Sibson LiDAR",
            "description": "Grigliatura LiDAR natural-neighbour: interpolazione basata su Voronoi con pesi dei vicini naturali. Superfici lisce e dall'aspetto naturale, senza artefatti di pendenza in corrispondenza dei punti.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Dimensione della cella di uscita."
              },
              "interpolation_parameter": {
                "label": "Parametro di interpolazione",
                "description": "Attributo dei punti da interpolare (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Ritorni inclusi",
                "description": "Modalità di filtraggio dei ritorni: all, first o last."
              },
              "excluded_classes": {
                "label": "Classi escluse",
                "description": "Classi da escludere (array o stringa delimitata da virgole)."
              },
              "min_elev": {
                "label": "Elevazione minima",
                "description": "Soglia di elevazione minima usata per il filtraggio di inclusione dei punti."
              },
              "max_elev": {
                "label": "Elevazione massima",
                "description": "Soglia di elevazione massima usata per il filtraggio di inclusione dei punti."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "lidar_thin": {
            "name": "Assottiglia LiDAR",
            "description": "Decima la densità della nuvola di punti: mantiene ≤1 punto per cella della griglia usando la strategia primo/ultimo/più basso/più alto/più vicino. Riduce lo spazio di archiviazione preservando la copertura e la complessità topografica.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Dimensione della cella della griglia per lo sfoltimento (default 1.0)."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di selezione dei punti per cella: first, last, lowest, highest, nearest (default 'first')."
              },
              "save_filtered": {
                "label": "Salva i punti filtrati",
                "description": "Se true, scrive anche i punti filtrati e restituisce il loro localizzatore in outputs.filtered_path."
              },
              "filtered_output": {
                "label": "Uscita filtrata",
                "description": "Percorso di uscita opzionale per i punti filtrati (modalità a ingresso singolo)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "lidar_thin_high_density": {
            "name": "Assottiglia LiDAR ad alta densità",
            "description": "Decimazione adattiva della densità: riduce il numero di punti nelle zone troppo dense preservando le regioni sparse. Uniforma il campionamento tra pattern variabili di sovrapposizione delle strisciate di volo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "density": {
                "label": "Densità",
                "description": "Soglia di densità dei punti obiettivo in punti per unità quadrata."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Risoluzione della griglia usata per la classificazione x/y e z (default 1.0)."
              },
              "save_filtered": {
                "label": "Salva i punti filtrati",
                "description": "Se true, scrive i punti filtrati e restituisce outputs.filtered_path."
              },
              "filtered_output": {
                "label": "Uscita filtrata",
                "description": "Percorso di uscita opzionale per i punti filtrati in modalità a ingresso singolo."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "lidar_tile_footprint": {
            "name": "Ingombro delle tessere LiDAR",
            "description": "Genera le impronte: riquadri di delimitazione allineati agli assi o inviluppi convessi per ciascuna nuvola di punti. Output vettoriale poligonale per l'indicizzazione spaziale e il catalogo dei dati.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR opzionale in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue su tutti i file LiDAR della cartella corrente."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita per le impronte."
              },
              "output_hulls": {
                "label": "Involucri in uscita",
                "description": "Se true scrive impronte a involucro convesso; altrimenti scrive riquadri di delimitazione allineati agli assi."
              }
            }
          },
          "lidar_tin_gridding": {
            "name": "Grigliatura TIN LiDAR",
            "description": "Interpolazione LiDAR esatta tramite TIN: costruisce una triangolazione di Delaunay dai punti e interpola i valori delle celle dai piani dei triangoli. Rispetta le altezze dei punti, eccellente per coperture irregolari.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Dimensione della cella di uscita."
              },
              "max_triangle_edge_length": {
                "label": "Lunghezza massima del lato del triangolo",
                "description": "Lunghezza massima opzionale dei lati dei triangoli per sopprimere le facce a lati lunghi."
              },
              "interpolation_parameter": {
                "label": "Parametro di interpolazione",
                "description": "Attributo dei punti da interpolare (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Ritorni inclusi",
                "description": "Modalità di filtraggio dei ritorni: all, first o last."
              },
              "excluded_classes": {
                "label": "Classi escluse",
                "description": "Classi da escludere (array o stringa delimitata da virgole)."
              },
              "min_elev": {
                "label": "Elevazione minima",
                "description": "Soglia di elevazione minima usata per il filtraggio di inclusione dei punti."
              },
              "max_elev": {
                "label": "Elevazione massima",
                "description": "Soglia di elevazione massima usata per il filtraggio di inclusione dei punti."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              },
              "triangulation_backend": {
                "label": "Backend di triangolazione",
                "description": "Selezione del backend di triangolazione: auto, delaunator o wbtopology."
              },
              "triangulation_auto_threshold": {
                "label": "Soglia automatica di triangolazione",
                "description": "Quando backend=auto, passa a wbtopology a questo numero di campioni (default disabilitato; impostare esplicitamente per abilitare)."
              },
              "triangulation_epsilon": {
                "label": "Epsilon di triangolazione",
                "description": "Epsilon usato dal backend wbtopology per la gestione dei duplicati (default 1e-12)."
              },
              "triangulation_thin_cell_size": {
                "label": "Dimensione della cella di sfoltimento per la triangolazione",
                "description": "Dimensione della cella opzionale di pre-sfoltimento per i campioni di triangolazione; valori > 0 abilitano lo sfoltimento e 0 lo disabilita."
              },
              "triangulation_thin_method": {
                "label": "Metodo di sfoltimento per la triangolazione",
                "description": "Metodo del punto rappresentativo per lo sfoltimento: nearest_center, min_value o max_value."
              }
            }
          },
          "colourize_based_on_class": {
            "name": "Colora in base alla classe",
            "description": "Colora i punti in base alla classe: colori standard ASPRS (verde=vegetazione, marrone=suolo, grigio=edificio, ecc.). Fonde con l'intensità per il contrasto. Visualizzazione della classificazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "intensity_blending_amount": {
                "label": "Quantità di fusione dell'intensità",
                "description": "Percentuale di fusione [0,100] tra il colore della classe e l'intensità."
              },
              "clr_str": {
                "label": "Stringa dei colori",
                "description": "Override opzionali dei colori delle classi, es. '2:(184,167,108);5:#9ab86c'."
              },
              "use_unique_clrs_for_buildings": {
                "label": "Usa colori unici per gli edifici",
                "description": "Se true, assegna colori unici ai cluster di edifici connessi."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno usato per la colorazione dei cluster di edifici."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "colourize_based_on_point_returns": {
            "name": "Colora in base ai ritorni del punto",
            "description": "Colora i punti in base all'ordine di ritorno: i ritorni primo/intermedio/ultimo usano colori distinti. Visualizzazione della struttura degli impulsi a ritorni multipli per la validazione dell'elaborazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "intensity_blending_amount": {
                "label": "Quantità di fusione dell'intensità",
                "description": "Percentuale di fusione [0,100] tra il colore del ritorno e l'intensità."
              },
              "only_ret_colour": {
                "label": "Colore per ritorno unico",
                "description": "Colore per i punti a ritorno unico."
              },
              "first_ret_colour": {
                "label": "Colore per primo ritorno",
                "description": "Colore per i punti di primo ritorno negli impulsi a ritorni multipli."
              },
              "intermediate_ret_colour": {
                "label": "Colore per ritorno intermedio",
                "description": "Colore per i punti di ritorno intermedio."
              },
              "last_ret_colour": {
                "label": "Colore per ultimo ritorno",
                "description": "Colore per i punti di ultimo ritorno negli impulsi a ritorni multipli."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "find_flightline_edge_points": {
            "name": "Trova i punti di bordo della linea di volo",
            "description": "Filtra i punti di bordo del volo: estrae solo i punti ai confini della fascia di acquisizione. Controllo di qualità per la sovrapposizione delle strisciate e gli effetti di bordo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "individual_tree_detection": {
            "name": "Rilevamento dei singoli alberi",
            "description": "Identifica le cime degli alberi: massimi locali nella nuvola di punti filtrata per altezza con raggio di ricerca adattivo. Restituisce uno shapefile vettoriale puntuale delle potenziali posizioni dei fusti.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "min_search_radius": {
                "label": "Raggio di ricerca minimo",
                "description": "Raggio di ricerca minimo in unità di mappa (default 1.0)."
              },
              "min_height": {
                "label": "Altezza minima",
                "description": "Altezza minima per considerare i punti (default 0.0)."
              },
              "max_search_radius": {
                "label": "Raggio di ricerca massimo",
                "description": "Raggio di ricerca massimo; se non impostato usa min_search_radius."
              },
              "max_height": {
                "label": "Altezza massima",
                "description": "Altezza massima; se non impostata usa min_height."
              },
              "only_use_veg": {
                "label": "Usa solo la vegetazione",
                "description": "Se true, elabora solo le classi di vegetazione (default true)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso dello shapefile vettoriale in uscita."
              }
            }
          },
          "lidar_eigenvalue_features": {
            "name": "Caratteristiche degli autovalori LiDAR",
            "description": "Ricava caratteristiche PCA: autovalori/autovettori dagli intorni. Descrittori di forma (planarità, linearità, varianza dell'altezza) per l'analisi delle nuvole di punti.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR opzionale in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "num_neighbours": {
                "label": "Numero di vicini",
                "description": "Dimensione obiettivo opzionale dell'intorno (escluso il punto stesso)."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio di ricerca massimo opzionale per la raccolta dell'intorno."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso .eigen opzionale in uscita in modalità a ingresso singolo."
              }
            }
          },
          "lidar_histogram": {
            "name": "Istogramma LiDAR",
            "description": "Calcola la distribuzione degli attributi: istogramma di frequenza per elevazione, intensità, angolo di scansione, classe. Percentili troncati per la soppressione dei valori anomali. Visualizzazione HTML.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso HTML opzionale in uscita per il rapporto dell'istogramma."
              },
              "parameter": {
                "label": "Parametro",
                "description": "Uno tra elevation, intensity, scan angle, class o time."
              },
              "clip_percent": {
                "label": "Percentuale di ritaglio",
                "description": "Quantità di ritaglio per percentile in [0,50] per le code inferiore/superiore."
              }
            }
          },
          "lidar_info": {
            "name": "Informazioni LiDAR",
            "description": "Genera un report di sintesi dei metadati: numero di punti, estensione, intervallo di intensità, istogramma delle classi, distribuzione dei ritorni. Output HTML/testo per la documentazione dei dati.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del rapporto in uscita (.html/.txt)."
              },
              "show_point_density": {
                "label": "Mostra la densità dei punti",
                "description": "Se true include metriche approssimate di densità dei punti nel riquadro di delimitazione."
              },
              "show_vlrs": {
                "label": "Mostra i VLR",
                "description": "Flag di compatibilità; riservato per una futura uscita dettagliata dei metadati."
              },
              "show_geokeys": {
                "label": "Mostra le chiavi geografiche",
                "description": "Flag di compatibilità; riservato per una futura uscita dettagliata delle chiavi CRS."
              }
            }
          },
          "lidar_kappa": {
            "name": "Kappa LiDAR",
            "description": "Calcola un report di accordo kappa tra due nuvole LiDAR classificate e scrive un raster di accordo delle classi.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Percorso LiDAR della classificazione o oggetto LiDAR tipizzato."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso LiDAR di riferimento o oggetto LiDAR tipizzato."
              },
              "report": {
                "label": "Rapporto",
                "description": "Percorso del rapporto HTML in uscita."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Risoluzione della griglia per l'uscita spaziale di concordanza delle classi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              },
              "output_class_accuracy": {
                "label": "Accuratezza per classe in uscita",
                "description": "Flag di compatibilità mantenuto per parità legacy; il raster di concordanza viene sempre prodotto."
              }
            }
          },
          "lidar_point_density": {
            "name": "Densità di punti LiDAR",
            "description": "Mappa l'intensità di campionamento LiDAR: numero di punti per unità di area (conteggi entro un raggio per cella). Valutazione della qualità dei dati, analisi della copertura, visualizzazione del pattern di acquisizione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Dimensione della cella di uscita."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno per il conteggio dei punti."
              },
              "returns_included": {
                "label": "Ritorni inclusi",
                "description": "Modalità di filtraggio dei ritorni: all, first o last."
              },
              "excluded_classes": {
                "label": "Classi escluse",
                "description": "Classi da escludere (array o stringa delimitata da virgole)."
              },
              "min_elev": {
                "label": "Elevazione minima",
                "description": "Soglia di elevazione minima usata per il filtraggio di inclusione dei punti."
              },
              "max_elev": {
                "label": "Elevazione massima",
                "description": "Soglia di elevazione massima usata per il filtraggio di inclusione dei punti."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "lidar_point_return_analysis": {
            "name": "Analisi dei ritorni dei punti LiDAR",
            "description": "Strumento di controllo di qualità: verifica la validità della sequenza dei ritorni (coerenza multiplo/primo/ultimo). Genera un report + un output classificato che marca le anomalie dei ritorni. Controllo dell'integrità dei dati.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "create_output": {
                "label": "Crea l'uscita",
                "description": "Se true scrive un'uscita LiDAR QC classificata."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita usato quando create_output=true."
              },
              "report": {
                "label": "Rapporto",
                "description": "Percorso opzionale del rapporto di testo in uscita."
              }
            }
          },
          "lidar_point_stats": {
            "name": "Statistiche dei punti LiDAR",
            "description": "Crea griglie raster di statistiche: numero di punti, numero di impulsi, punti medi per impulso, intervallo di z/intensità, classe predominante per cella. Analisi con più output.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR opzionale in ingresso o oggetto LiDAR tipizzato. Se omesso, esegue in modalità batch sui file LiDAR della cartella corrente."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Risoluzione della griglia di uscita."
              },
              "num_points": {
                "label": "Numero di punti",
                "description": "Crea il raster del conteggio dei punti."
              },
              "num_pulses": {
                "label": "Numero di impulsi",
                "description": "Crea il raster del conteggio degli impulsi a ritorno precoce."
              },
              "avg_points_per_pulse": {
                "label": "Punti medi per impulso",
                "description": "Crea il raster dei punti medi per impulso."
              },
              "z_range": {
                "label": "Intervallo Z",
                "description": "Crea il raster dell'intervallo di elevazione."
              },
              "intensity_range": {
                "label": "Intervallo di intensità",
                "description": "Crea il raster dell'intervallo di intensità."
              },
              "predominant_class": {
                "label": "Classe predominante",
                "description": "Crea il raster della classe predominante."
              },
              "output_directory": {
                "label": "Cartella di uscita",
                "description": "Cartella di uscita opzionale per i raster generati."
              }
            }
          },
          "lidar_ransac_planes": {
            "name": "Piani RANSAC LiDAR",
            "description": "Identifica i punti LiDAR localmente planari tramite l'adattamento di piani RANSAC nell'intorno.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno per l'adattamento del piano locale."
              },
              "num_iterations": {
                "label": "Numero di iterazioni",
                "description": "Numero di iterazioni RANSAC per punto."
              },
              "num_samples": {
                "label": "Numero di campioni",
                "description": "Numero di punti vicini campionati per iterazione RANSAC."
              },
              "inlier_threshold": {
                "label": "Soglia degli inlier",
                "description": "Residuo massimo punto-piano per gli inlier."
              },
              "acceptable_model_size": {
                "label": "Dimensione accettabile del modello",
                "description": "Numero minimo di punti inlier richiesto per un modello planare."
              },
              "max_planar_slope": {
                "label": "Pendenza planare massima",
                "description": "Pendenza massima accettata del piano in gradi."
              },
              "classify": {
                "label": "Classifica",
                "description": "Se true classifica i punti planari e non planari invece di filtrarli."
              },
              "only_last_returns": {
                "label": "Solo ultimi ritorni",
                "description": "Se true, usa solo i ritorni tardivi nell'adattamento del modello."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "lidar_rooftop_analysis": {
            "name": "Analisi delle coperture LiDAR",
            "description": "Identifica i segmenti planari dei tetti all'interno delle impronte degli edifici e produce in uscita poligoni dei segmenti con attributi del tetto.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Percorsi LiDAR in ingresso o oggetti LiDAR tipizzati."
              },
              "building_footprints": {
                "label": "Impronte degli edifici",
                "description": "Layer poligonale delle impronte degli edifici."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno per l'analisi locale dei tetti."
              },
              "inlier_threshold": {
                "label": "Soglia degli inlier",
                "description": "Residuo massimo per il supporto planare locale."
              },
              "acceptable_model_size": {
                "label": "Dimensione accettabile del modello",
                "description": "Dimensione minima dei segmenti."
              },
              "max_planar_slope": {
                "label": "Pendenza planare massima",
                "description": "Pendenza massima per le falde dei tetti in gradi."
              },
              "norm_diff_threshold": {
                "label": "Soglia di differenza delle normali",
                "description": "Differenza angolare massima tra le normali vicine in gradi."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut dell'illuminazione per l'illuminazione delle facce in stile ombreggiatura."
              },
              "altitude": {
                "label": "Altitudine",
                "description": "Altitudine dell'illuminazione per l'illuminazione delle facce in stile ombreggiatura."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita."
              }
            }
          },
          "normal_vectors": {
            "name": "Vettori normali",
            "description": "Calcola le normali alla superficie per punto: la PCA sull'intorno locale stima l'orientamento del piano. Le normali vengono memorizzate nei record dei punti e nella visualizzazione RGB.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso LiDAR in ingresso o oggetto LiDAR tipizzato."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno per l'adattamento del piano locale. Valori <= 0 usano una spaziatura nominale stimata."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita."
              }
            }
          },
          "snap_events_to_routes": {
            "name": "Aggancia eventi alle rotte",
            "description": "Aggancia i punti evento alle linee dei percorsi e riporta diagnostiche di misura/offset del percorso.",
            "params": {
              "routes": {
                "label": "Percorsi",
                "description": "Layer lineare dei percorsi in ingresso."
              },
              "events": {
                "label": "Eventi",
                "description": "Layer puntuale degli eventi in ingresso."
              },
              "max_offset_distance": {
                "label": "Distanza massima di offset",
                "description": "Distanza massima opzionale di offset dal percorso in unità di mappa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale degli eventi agganciati in uscita."
              }
            }
          },
          "locate_points_along_routes": {
            "name": "Localizza punti lungo le rotte",
            "description": "Localizza gli elementi puntuali lungo le linee dei percorsi e scrive gli attributi di misura del percorso.",
            "params": {
              "routes": {
                "label": "Percorsi",
                "description": "Layer lineare dei percorsi in ingresso."
              },
              "points": {
                "label": "Punti",
                "description": "Layer puntuale in ingresso da localizzare lungo i percorsi."
              },
              "max_offset_distance": {
                "label": "Distanza massima di offset",
                "description": "Distanza massima opzionale di offset punto-percorso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita."
              }
            }
          },
          "points_along_lines": {
            "name": "Punti lungo le linee",
            "description": "Genera elementi puntuali a spaziatura regolare lungo le polilinee in ingresso per il monitoraggio delle infrastrutture, il campionamento ambientale e l'analisi spaziale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer lineare in ingresso."
              },
              "spacing": {
                "label": "Spaziatura",
                "description": "Distanza di spaziatura tra i punti."
              },
              "include_end": {
                "label": "Includi l'estremità",
                "description": "Includi le estremità delle linee (default true)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita."
              }
            }
          },
          "route_calibrate": {
            "name": "Calibra rotta",
            "description": "Calibra le misure iniziali/finali dei percorsi a partire da punti di controllo con misure note.",
            "params": {
              "routes": {
                "label": "Percorsi",
                "description": "Layer lineare dei percorsi in ingresso."
              },
              "control_points": {
                "label": "Punti di controllo",
                "description": "Layer dei punti di controllo in ingresso."
              },
              "control_measure_field": {
                "label": "Campo misura dei punti di controllo",
                "description": "Campo dei punti di controllo contenente i valori di misura noti."
              },
              "route_id_field": {
                "label": "Campo ID percorso",
                "description": "Campo opzionale identificatore di percorso in routes. Per impostazione predefinita il FID della geometria."
              },
              "control_route_id_field": {
                "label": "Campo ID percorso dei punti di controllo",
                "description": "Campo opzionale identificatore di percorso nei punti di controllo. Per impostazione predefinita il FID della geometria."
              },
              "from_measure_field": {
                "label": "Campo misura iniziale",
                "description": "Campo in uscita per la misura iniziale del percorso (default 'from_measure')."
              },
              "to_measure_field": {
                "label": "Campo misura finale",
                "description": "Campo in uscita per la misura finale del percorso (default 'to_measure')."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Distanza massima di offset dei punti di controllo dalla geometria del percorso (default 1.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer dei percorsi calibrati in uscita."
              }
            }
          },
          "route_event_lines_from_layer": {
            "name": "Linee di eventi di rotta da layer",
            "description": "Crea eventi lineari di rotta da un layer vettoriale di eventi usando le misure from/to.",
            "params": {
              "routes": {
                "label": "Percorsi",
                "description": "Layer lineare dei percorsi in ingresso."
              },
              "events": {
                "label": "Eventi",
                "description": "Layer vettoriale degli eventi in ingresso."
              },
              "event_route_field": {
                "label": "Campo percorso dell'evento",
                "description": "Campo del layer degli eventi contenente gli identificatori di percorso."
              },
              "from_measure_field": {
                "label": "Campo misura iniziale",
                "description": "Campo del layer degli eventi contenente le misure iniziali."
              },
              "to_measure_field": {
                "label": "Campo misura finale",
                "description": "Campo del layer degli eventi contenente le misure finali."
              },
              "route_id_field": {
                "label": "Campo ID percorso",
                "description": "Campo opzionale del layer dei percorsi contenente gli identificatori di percorso. Per impostazione predefinita il FID della geometria."
              },
              "write_event_fid": {
                "label": "Scrivi FID dell'evento",
                "description": "Scrive EVENT_FID per preservare gli ID delle geometrie degli eventi sorgente (default true)."
              },
              "write_event_xy": {
                "label": "Scrivi XY dell'evento",
                "description": "Scrive gli attributi X/Y della geometria dell'evento sorgente (default false)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare in uscita."
              }
            }
          },
          "route_event_lines_from_table": {
            "name": "Linee di eventi di rotta da tabella",
            "description": "Crea eventi lineari di rotta da una tabella CSV di eventi e da un layer dei percorsi usando le misure from/to.",
            "params": {
              "routes": {
                "label": "Percorsi",
                "description": "Layer lineare dei percorsi in ingresso."
              },
              "events": {
                "label": "Eventi",
                "description": "Percorso della tabella CSV degli eventi in ingresso."
              },
              "event_route_field": {
                "label": "Campo percorso dell'evento",
                "description": "Campo CSV contenente gli identificatori di percorso."
              },
              "from_measure_field": {
                "label": "Campo misura iniziale",
                "description": "Campo CSV contenente le misure iniziali."
              },
              "to_measure_field": {
                "label": "Campo misura finale",
                "description": "Campo CSV contenente le misure finali."
              },
              "route_id_field": {
                "label": "Campo ID percorso",
                "description": "Campo opzionale del layer dei percorsi contenente gli identificatori di percorso. Per impostazione predefinita il FID della geometria."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare in uscita."
              }
            }
          },
          "route_event_merge": {
            "name": "Unisci eventi di rotta",
            "description": "Unisce gli eventi di rotta adiacenti compatibili.",
            "params": {
              "events": {
                "label": "Eventi",
                "description": "Layer degli eventi in ingresso contenente gli intervalli di percorso."
              },
              "event_route_field": {
                "label": "Campo percorso dell'evento",
                "description": "Campo identificatore di percorso del layer degli eventi."
              },
              "from_measure_field": {
                "label": "Campo misura iniziale",
                "description": "Campo di inizio intervallo del layer degli eventi."
              },
              "to_measure_field": {
                "label": "Campo misura finale",
                "description": "Campo di fine intervallo del layer degli eventi."
              },
              "group_fields": {
                "label": "Campi di raggruppamento",
                "description": "Campi opzionali delimitati da virgole usati per la compatibilità della fusione. Per impostazione predefinita tutti i campi non di misura."
              },
              "gap_tolerance": {
                "label": "Tolleranza dei vuoti",
                "description": "Vuoto massimo consentito per la fusione per adiacenza (default 0.0)."
              },
              "conflict_mode": {
                "label": "Modalità di conflitto",
                "description": "Modalità di gestione delle sovrapposizioni: error|skip (default error)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer degli eventi fusi in uscita."
              }
            }
          },
          "route_event_overlay": {
            "name": "Sovrapponi eventi di rotta",
            "description": "Sovrappone due layer di eventi di rotta in base alla sovrapposizione degli intervalli.",
            "params": {
              "primary_events": {
                "label": "Eventi primari",
                "description": "Layer degli eventi primari."
              },
              "overlay_events": {
                "label": "Eventi di sovrapposizione",
                "description": "Layer degli eventi di sovrapposizione."
              },
              "primary_route_field": {
                "label": "Campo percorso primario",
                "description": "Campo identificatore di percorso del layer primario."
              },
              "primary_from_measure_field": {
                "label": "Campo misura iniziale primario",
                "description": "Campo di inizio intervallo del layer primario."
              },
              "primary_to_measure_field": {
                "label": "Campo misura finale primario",
                "description": "Campo di fine intervallo del layer primario."
              },
              "overlay_route_field": {
                "label": "Campo percorso di sovrapposizione",
                "description": "Campo identificatore di percorso del layer di sovrapposizione."
              },
              "overlay_from_measure_field": {
                "label": "Campo misura iniziale di sovrapposizione",
                "description": "Campo di inizio intervallo del layer di sovrapposizione."
              },
              "overlay_to_measure_field": {
                "label": "Campo misura finale di sovrapposizione",
                "description": "Campo di fine intervallo del layer di sovrapposizione."
              },
              "min_overlap_length": {
                "label": "Lunghezza minima di sovrapposizione",
                "description": "Lunghezza minima di sovrapposizione da mantenere (default 0.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer di sovrapposizione in uscita."
              }
            }
          },
          "route_event_points_from_layer": {
            "name": "Punti di eventi di rotta da layer",
            "description": "Crea eventi puntuali di rotta da un layer vettoriale di eventi e da un layer dei percorsi.",
            "params": {
              "routes": {
                "label": "Percorsi",
                "description": "Layer lineare dei percorsi in ingresso."
              },
              "events": {
                "label": "Eventi",
                "description": "Layer vettoriale degli eventi in ingresso."
              },
              "event_route_field": {
                "label": "Campo percorso dell'evento",
                "description": "Campo del layer degli eventi contenente gli identificatori di percorso."
              },
              "measure_field": {
                "label": "Campo misura",
                "description": "Campo del layer degli eventi contenente le misure degli eventi puntuali."
              },
              "route_id_field": {
                "label": "Campo ID percorso",
                "description": "Campo opzionale del layer dei percorsi contenente gli identificatori di percorso. Per impostazione predefinita il FID della geometria."
              },
              "write_event_fid": {
                "label": "Scrivi FID dell'evento",
                "description": "Scrive EVENT_FID per preservare gli ID delle geometrie degli eventi sorgente (default true)."
              },
              "write_event_xy": {
                "label": "Scrivi XY dell'evento",
                "description": "Scrive gli attributi X/Y della geometria dell'evento sorgente (default false)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita."
              }
            }
          },
          "route_event_points_from_table": {
            "name": "Punti di eventi di rotta da tabella",
            "description": "Crea eventi puntuali di rotta da una tabella CSV di eventi e da un layer dei percorsi.",
            "params": {
              "routes": {
                "label": "Percorsi",
                "description": "Layer lineare dei percorsi in ingresso."
              },
              "events": {
                "label": "Eventi",
                "description": "Percorso della tabella CSV degli eventi in ingresso."
              },
              "event_route_field": {
                "label": "Campo percorso dell'evento",
                "description": "Campo CSV contenente gli identificatori di percorso."
              },
              "measure_field": {
                "label": "Campo misura",
                "description": "Campo CSV contenente le misure degli eventi puntuali."
              },
              "route_id_field": {
                "label": "Campo ID percorso",
                "description": "Campo opzionale del layer dei percorsi contenente gli identificatori di percorso. Per impostazione predefinita il FID della geometria."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita."
              }
            }
          },
          "route_event_split": {
            "name": "Dividi eventi di rotta",
            "description": "Suddivide gli eventi di rotta in base alle misure di confine per percorso.",
            "params": {
              "events": {
                "label": "Eventi",
                "description": "Layer degli eventi in ingresso contenente gli intervalli di percorso."
              },
              "boundaries": {
                "label": "Confini",
                "description": "Layer dei confini in ingresso contenente i punti di interruzione delle misure di percorso."
              },
              "event_route_field": {
                "label": "Campo percorso dell'evento",
                "description": "Campo identificatore di percorso del layer degli eventi."
              },
              "from_measure_field": {
                "label": "Campo misura iniziale",
                "description": "Campo di inizio intervallo del layer degli eventi."
              },
              "to_measure_field": {
                "label": "Campo misura finale",
                "description": "Campo di fine intervallo del layer degli eventi."
              },
              "boundary_route_field": {
                "label": "Campo percorso dei confini",
                "description": "Campo identificatore di percorso del layer dei confini."
              },
              "boundary_measure_field": {
                "label": "Campo misura dei confini",
                "description": "Campo misura del layer dei confini."
              },
              "min_segment_length": {
                "label": "Lunghezza minima del segmento",
                "description": "Lunghezza minima opzionale dei segmenti divisi da mantenere (default 0.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer degli eventi divisi in uscita."
              }
            }
          },
          "route_measure_qa": {
            "name": "Controllo qualità delle misure di rotta",
            "description": "Diagnostica lacune, sovrapposizioni, sequenze non monotone e misure duplicate negli eventi di rotta.",
            "params": {
              "events": {
                "label": "Eventi",
                "description": "Layer degli eventi in ingresso contenente gli intervalli di percorso."
              },
              "route_field": {
                "label": "Campo percorso",
                "description": "Campo identificatore di percorso."
              },
              "from_measure_field": {
                "label": "Campo misura iniziale",
                "description": "Campo di inizio intervallo."
              },
              "to_measure_field": {
                "label": "Campo misura finale",
                "description": "Campo di fine intervallo."
              },
              "gap_tolerance": {
                "label": "Tolleranza dei vuoti",
                "description": "Tolleranza dei vuoti (default 0.0)."
              },
              "overlap_tolerance": {
                "label": "Tolleranza di sovrapposizione",
                "description": "Tolleranza di sovrapposizione (default 0.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer di diagnostica QA in uscita."
              }
            }
          },
          "route_recalibrate": {
            "name": "Ricalibra rotta",
            "description": "Ricalibra le misure dei percorsi modificati a partire da un layer dei percorsi di riferimento, preservando la continuità delle misure dei percorsi.",
            "params": {
              "original_routes": {
                "label": "Percorsi originali",
                "description": "Percorsi di riferimento contenenti le misure calibrate precedenti."
              },
              "edited_routes": {
                "label": "Percorsi modificati",
                "description": "Percorsi modificati da ricalibrare."
              },
              "route_id_field": {
                "label": "Campo ID percorso",
                "description": "Campo opzionale identificatore di percorso condiviso. Per impostazione predefinita il FID della geometria."
              },
              "from_measure_field": {
                "label": "Campo misura iniziale",
                "description": "Nome del campo di inizio misura (default 'from_measure')."
              },
              "to_measure_field": {
                "label": "Campo misura finale",
                "description": "Nome del campo di fine misura (default 'to_measure')."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer dei percorsi ricalibrati in uscita."
              }
            }
          },
          "build_network_topology": {
            "name": "Costruisci topologia di rete",
            "description": "Costruisce una rete lineare topologica con nodi, con output stabili di archi e nodi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio opzionale usata durante il rilevamento e la divisione delle intersezioni."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale degli archi nodati topologicamente in uscita."
              },
              "nodes_output": {
                "label": "Nodi in uscita",
                "description": "Percorso vettoriale opzionale dei nodi in uscita."
              }
            }
          },
          "closest_facility_network": {
            "name": "Struttura più vicina sulla rete",
            "description": "Trova il percorso di rete a costo minimo da ciascun punto di incidente al punto della struttura raggiungibile più vicino.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "incidents": {
                "label": "Incidenti",
                "description": "Layer puntuale degli incidenti/della domanda."
              },
              "facilities": {
                "label": "Strutture",
                "description": "Layer puntuale delle strutture/dell'offerta."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "max_snap_distance": {
                "label": "Distanza massima di aggancio",
                "description": "Distanza massima opzionale dai punti di incidente/struttura al nodo di rete più vicino."
              },
              "edge_cost_field": {
                "label": "Campo costo dell'arco",
                "description": "Campo numerico opzionale delle linee usato come moltiplicatore di impedenza per la lunghezza del segmento."
              },
              "one_way_field": {
                "label": "Campo senso unico",
                "description": "Campo opzionale delle linee che contrassegna gli archi digitalizzati a senso unico (true/1/yes significa solo dal primo al secondo vertice)."
              },
              "blocked_field": {
                "label": "Campo bloccato",
                "description": "Campo opzionale delle linee che contrassegna gli archi bloccati/chiusi da escludere dall'instradamento (true/1/yes blocca)."
              },
              "barriers": {
                "label": "Barriere",
                "description": "Layer puntuale opzionale delle barriere; i nodi di rete più vicini vengono bloccati all'attraversamento."
              },
              "barrier_snap_distance": {
                "label": "Distanza di aggancio delle barriere",
                "description": "Distanza massima opzionale da ogni punto barriera a un nodo di rete per il blocco."
              },
              "node_cost_points": {
                "label": "Punti di costo dei nodi",
                "description": "Layer puntuale opzionale che fornisce i costi di ingresso per nodo (es. ritardo alle intersezioni)."
              },
              "node_cost_field": {
                "label": "Campo costo dei nodi",
                "description": "Campo numerico in node_cost_points contenente i costi non negativi per nodo."
              },
              "node_cost_snap_distance": {
                "label": "Distanza di aggancio dei costi dei nodi",
                "description": "Distanza massima opzionale da ogni punto di costo dei nodi a un nodo di rete per l'assegnazione."
              },
              "turn_penalty": {
                "label": "Penalità di svolta",
                "description": "Costo additivo opzionale applicato alle svolte non rettilinee ai nodi di rete."
              },
              "u_turn_penalty": {
                "label": "Penalità di inversione a U",
                "description": "Costo additivo opzionale applicato alle transizioni di inversione a U."
              },
              "forbid_u_turns": {
                "label": "Vieta le inversioni a U",
                "description": "Se true, vieta le transizioni di inversione a U."
              },
              "forbid_left_turns": {
                "label": "Vieta le svolte a sinistra",
                "description": "Se true, vieta le transizioni di svolta a sinistra."
              },
              "forbid_right_turns": {
                "label": "Vieta le svolte a destra",
                "description": "Se true, vieta le transizioni di svolta a destra."
              },
              "turn_restrictions_csv": {
                "label": "CSV delle restrizioni di svolta",
                "description": "CSV opzionale delle transizioni di svolta con colonne prev_x,prev_y,node_x,node_y,next_x,next_y. Colonne opzionali: forbidden (default true quando non è fornita la colonna turn_cost) e turn_cost (o penalty/cost/extra_cost) per il costo additivo per svolta."
              },
              "temporal_cost_profile": {
                "label": "Profilo di costo temporale",
                "description": "CSV opzionale che definisce i costi degli archi dipendenti dal tempo (colonne: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo ID arco temporale",
                "description": "Campo opzionale della rete usato per abbinare i valori edge_id di temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Orario di partenza",
                "description": "Orario di partenza opzionale in formato RFC3339 usato per la ricerca nel profilo temporale."
              },
              "temporal_mode": {
                "label": "Modalità temporale",
                "description": "Modalità opzionale di interpretazione temporale: multiplier o absolute."
              },
              "temporal_fallback": {
                "label": "Ripiego temporale",
                "description": "Ripiego opzionale quando manca la riga temporale: static_cost o error."
              },
              "temporal_profile_report": {
                "label": "Rapporto del profilo temporale",
                "description": "Percorso JSON opzionale in uscita per le diagnostiche del profilo temporale (copertura, archi non abbinati, uso del ripiego)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare dei percorsi verso la struttura più vicina in uscita."
              }
            }
          },
          "generate_network_nodes": {
            "name": "Genera nodi di rete",
            "description": "Genera i nodi di rete e le relative diagnostiche dalla topologia delle linee.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale dei nodi in uscita."
              }
            }
          },
          "k_shortest_paths_network": {
            "name": "K percorsi più brevi sulla rete",
            "description": "Trova i k percorsi semplici più brevi tra le coordinate di partenza e di arrivo su una rete lineare.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "start_x": {
                "label": "X iniziale",
                "description": "Coordinata x iniziale."
              },
              "start_y": {
                "label": "Y iniziale",
                "description": "Coordinata y iniziale."
              },
              "end_x": {
                "label": "X finale",
                "description": "Coordinata x finale."
              },
              "end_y": {
                "label": "Y finale",
                "description": "Coordinata y finale."
              },
              "k": {
                "label": "K",
                "description": "Numero di percorsi più brevi da restituire."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "max_snap_distance": {
                "label": "Distanza massima di aggancio",
                "description": "Distanza massima opzionale dalle coordinate iniziali/finali al nodo di rete più vicino."
              },
              "edge_cost_field": {
                "label": "Campo costo dell'arco",
                "description": "Campo numerico opzionale delle linee usato come moltiplicatore di impedenza per la lunghezza del segmento."
              },
              "one_way_field": {
                "label": "Campo senso unico",
                "description": "Campo opzionale delle linee che contrassegna gli archi digitalizzati a senso unico (true/1/yes significa solo dal primo al secondo vertice)."
              },
              "blocked_field": {
                "label": "Campo bloccato",
                "description": "Campo opzionale delle linee che contrassegna gli archi bloccati/chiusi da escludere dall'instradamento (true/1/yes blocca)."
              },
              "barriers": {
                "label": "Barriere",
                "description": "Layer puntuale opzionale delle barriere; i nodi di rete più vicini vengono bloccati all'attraversamento."
              },
              "barrier_snap_distance": {
                "label": "Distanza di aggancio delle barriere",
                "description": "Distanza massima opzionale da ogni punto barriera a un nodo di rete per il blocco."
              },
              "node_cost_points": {
                "label": "Punti di costo dei nodi",
                "description": "Layer puntuale opzionale che fornisce i costi di ingresso per nodo (es. ritardo alle intersezioni)."
              },
              "node_cost_field": {
                "label": "Campo costo dei nodi",
                "description": "Campo numerico in node_cost_points contenente i costi non negativi per nodo."
              },
              "node_cost_snap_distance": {
                "label": "Distanza di aggancio dei costi dei nodi",
                "description": "Distanza massima opzionale da ogni punto di costo dei nodi a un nodo di rete per l'assegnazione."
              },
              "turn_penalty": {
                "label": "Penalità di svolta",
                "description": "Costo additivo opzionale applicato alle svolte non rettilinee ai nodi di rete."
              },
              "u_turn_penalty": {
                "label": "Penalità di inversione a U",
                "description": "Costo additivo opzionale applicato alle transizioni di inversione a U."
              },
              "forbid_u_turns": {
                "label": "Vieta le inversioni a U",
                "description": "Se true, vieta le transizioni di inversione a U."
              },
              "forbid_left_turns": {
                "label": "Vieta le svolte a sinistra",
                "description": "Se true, vieta le transizioni di svolta a sinistra."
              },
              "forbid_right_turns": {
                "label": "Vieta le svolte a destra",
                "description": "Se true, vieta le transizioni di svolta a destra."
              },
              "turn_restrictions_csv": {
                "label": "CSV delle restrizioni di svolta",
                "description": "CSV opzionale delle transizioni di svolta con colonne prev_x,prev_y,node_x,node_y,next_x,next_y. Colonne opzionali: forbidden (default true quando non è fornita la colonna turn_cost) e turn_cost (o penalty/cost/extra_cost) per il costo additivo per svolta."
              },
              "temporal_cost_profile": {
                "label": "Profilo di costo temporale",
                "description": "CSV opzionale che definisce i costi degli archi dipendenti dal tempo (colonne: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo ID arco temporale",
                "description": "Campo opzionale della rete usato per abbinare i valori edge_id di temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Orario di partenza",
                "description": "Orario di partenza opzionale in formato RFC3339 usato per la ricerca nel profilo temporale."
              },
              "temporal_mode": {
                "label": "Modalità temporale",
                "description": "Modalità opzionale di interpretazione temporale: multiplier o absolute."
              },
              "temporal_fallback": {
                "label": "Ripiego temporale",
                "description": "Ripiego opzionale quando manca la riga temporale: static_cost o error."
              },
              "temporal_profile_report": {
                "label": "Rapporto del profilo temporale",
                "description": "Percorso JSON opzionale in uscita per le diagnostiche del profilo temporale (copertura, archi non abbinati, uso del ripiego)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare in uscita."
              }
            }
          },
          "location_allocation_network": {
            "name": "Localizzazione-allocazione sulla rete",
            "description": "Seleziona k strutture e alloca i punti di domanda in base al costo di rete con risoluzione greedy o esatta, capacità opzionali e vincoli sui candidati obbligatori/esclusi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "demand_points": {
                "label": "Punti di domanda",
                "description": "Layer puntuale della domanda da allocare."
              },
              "facilities": {
                "label": "Strutture",
                "description": "Layer puntuale delle strutture candidate."
              },
              "facility_count": {
                "label": "Numero di strutture",
                "description": "Numero di strutture da selezionare (k)."
              },
              "solver_mode": {
                "label": "Modalità del risolutore",
                "description": "Modalità del risolutore: auto, greedy o exact (exact è pensato per problemi più piccoli)."
              },
              "demand_weight_field": {
                "label": "Campo peso della domanda",
                "description": "Campo numerico opzionale del peso della domanda in demand_points (default weight=1)."
              },
              "facility_capacity_field": {
                "label": "Campo capacità della struttura",
                "description": "Campo numerico opzionale della capacità in facilities; la capacità viene consumata dai valori di demand_weight_field."
              },
              "required_facility_field": {
                "label": "Campo struttura obbligatoria",
                "description": "Campo booleano opzionale delle strutture che contrassegna i candidati da selezionare obbligatoriamente."
              },
              "forbidden_facility_field": {
                "label": "Campo struttura vietata",
                "description": "Campo booleano opzionale delle strutture che contrassegna i candidati da non selezionare."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "max_snap_distance": {
                "label": "Distanza massima di aggancio",
                "description": "Distanza massima opzionale dai punti di domanda/struttura al nodo di rete più vicino."
              },
              "edge_cost_field": {
                "label": "Campo costo dell'arco",
                "description": "Campo numerico opzionale delle linee usato come moltiplicatore di impedenza per la lunghezza del segmento."
              },
              "one_way_field": {
                "label": "Campo senso unico",
                "description": "Campo opzionale delle linee che contrassegna gli archi digitalizzati a senso unico (true/1/yes significa solo dal primo al secondo vertice)."
              },
              "blocked_field": {
                "label": "Campo bloccato",
                "description": "Campo opzionale delle linee che contrassegna gli archi bloccati/chiusi da escludere dall'instradamento (true/1/yes blocca)."
              },
              "barriers": {
                "label": "Barriere",
                "description": "Layer puntuale opzionale delle barriere; i nodi di rete più vicini vengono bloccati all'attraversamento."
              },
              "barrier_snap_distance": {
                "label": "Distanza di aggancio delle barriere",
                "description": "Distanza massima opzionale da ogni punto barriera a un nodo di rete per il blocco."
              },
              "node_cost_points": {
                "label": "Punti di costo dei nodi",
                "description": "Layer puntuale opzionale che fornisce i costi di ingresso per nodo (es. ritardo alle intersezioni)."
              },
              "node_cost_field": {
                "label": "Campo costo dei nodi",
                "description": "Campo numerico in node_cost_points contenente i costi non negativi per nodo."
              },
              "node_cost_snap_distance": {
                "label": "Distanza di aggancio dei costi dei nodi",
                "description": "Distanza massima opzionale da ogni punto di costo dei nodi a un nodo di rete per l'assegnazione."
              },
              "turn_penalty": {
                "label": "Penalità di svolta",
                "description": "Costo additivo opzionale applicato alle svolte non rettilinee ai nodi di rete."
              },
              "u_turn_penalty": {
                "label": "Penalità di inversione a U",
                "description": "Costo additivo opzionale applicato alle transizioni di inversione a U."
              },
              "forbid_u_turns": {
                "label": "Vieta le inversioni a U",
                "description": "Se true, vieta le transizioni di inversione a U."
              },
              "forbid_left_turns": {
                "label": "Vieta le svolte a sinistra",
                "description": "Se true, vieta le transizioni di svolta a sinistra."
              },
              "forbid_right_turns": {
                "label": "Vieta le svolte a destra",
                "description": "Se true, vieta le transizioni di svolta a destra."
              },
              "turn_restrictions_csv": {
                "label": "CSV delle restrizioni di svolta",
                "description": "CSV opzionale delle transizioni di svolta con colonne prev_x,prev_y,node_x,node_y,next_x,next_y. Colonne opzionali: forbidden (default true quando non è fornita la colonna turn_cost) e turn_cost (o penalty/cost/extra_cost) per il costo additivo per svolta."
              },
              "temporal_cost_profile": {
                "label": "Profilo di costo temporale",
                "description": "CSV opzionale che definisce i costi degli archi dipendenti dal tempo (colonne: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo ID arco temporale",
                "description": "Campo opzionale della rete usato per abbinare i valori edge_id di temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Orario di partenza",
                "description": "Orario di partenza opzionale in formato RFC3339 usato per la ricerca nel profilo temporale."
              },
              "temporal_mode": {
                "label": "Modalità temporale",
                "description": "Modalità opzionale di interpretazione temporale: multiplier o absolute."
              },
              "temporal_fallback": {
                "label": "Ripiego temporale",
                "description": "Ripiego opzionale quando manca la riga temporale: static_cost o error."
              },
              "temporal_profile_report": {
                "label": "Rapporto del profilo temporale",
                "description": "Percorso JSON opzionale in uscita per le diagnostiche del profilo temporale (copertura, archi non abbinati, uso del ripiego)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare dei percorsi allocati in uscita."
              }
            }
          },
          "map_matching_v1": {
            "name": "Map matching v1",
            "description": "Aggancia i punti della traiettoria a una rete lineare e ricostruisce un percorso dedotto con diagnostiche.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "trajectory_points": {
                "label": "Punti della traiettoria",
                "description": "Layer puntuale della traiettoria in ingresso."
              },
              "timestamp_field": {
                "label": "Campo timestamp",
                "description": "Campo della traiettoria usato per l'ordinamento temporale."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio di ricerca opzionale dei candidati attorno a ogni punto della traiettoria."
              },
              "candidate_k": {
                "label": "K candidati",
                "description": "Numero opzionale di candidati più vicini mantenuti per punto."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "max_snap_distance": {
                "label": "Distanza massima di aggancio",
                "description": "Distanza massima opzionale per l'aggancio dei punti della traiettoria ai nodi di rete."
              },
              "edge_cost_field": {
                "label": "Campo costo dell'arco",
                "description": "Campo numerico opzionale delle linee usato come moltiplicatore di impedenza per la lunghezza del segmento."
              },
              "one_way_field": {
                "label": "Campo senso unico",
                "description": "Campo opzionale delle linee che contrassegna gli archi digitalizzati a senso unico (supporta FT/TF/B più i valori booleani legacy)."
              },
              "blocked_field": {
                "label": "Campo bloccato",
                "description": "Campo opzionale delle linee che contrassegna gli archi bloccati/chiusi da escludere dall'instradamento (true/1/yes blocca)."
              },
              "barriers": {
                "label": "Barriere",
                "description": "Layer puntuale opzionale delle barriere; i nodi di rete più vicini vengono bloccati all'attraversamento."
              },
              "barrier_snap_distance": {
                "label": "Distanza di aggancio delle barriere",
                "description": "Distanza massima opzionale da ogni punto barriera a un nodo di rete per il blocco."
              },
              "node_cost_points": {
                "label": "Punti di costo dei nodi",
                "description": "Layer puntuale opzionale che fornisce i costi di ingresso per nodo (es. ritardo alle intersezioni)."
              },
              "node_cost_field": {
                "label": "Campo costo dei nodi",
                "description": "Campo numerico in node_cost_points contenente i costi non negativi per nodo."
              },
              "node_cost_snap_distance": {
                "label": "Distanza di aggancio dei costi dei nodi",
                "description": "Distanza massima opzionale da ogni punto di costo dei nodi a un nodo di rete per l'assegnazione."
              },
              "turn_penalty": {
                "label": "Penalità di svolta",
                "description": "Costo additivo opzionale applicato alle svolte non rettilinee ai nodi di rete."
              },
              "u_turn_penalty": {
                "label": "Penalità di inversione a U",
                "description": "Costo additivo opzionale applicato alle transizioni di inversione a U."
              },
              "forbid_u_turns": {
                "label": "Vieta le inversioni a U",
                "description": "Se true, vieta le transizioni di inversione a U."
              },
              "forbid_left_turns": {
                "label": "Vieta le svolte a sinistra",
                "description": "Se true, vieta le transizioni di svolta a sinistra."
              },
              "forbid_right_turns": {
                "label": "Vieta le svolte a destra",
                "description": "Se true, vieta le transizioni di svolta a destra."
              },
              "turn_restrictions_csv": {
                "label": "CSV delle restrizioni di svolta",
                "description": "CSV opzionale delle transizioni di svolta con colonne prev_x,prev_y,node_x,node_y,next_x,next_y. Colonne opzionali: forbidden (default true quando non è fornita la colonna turn_cost) e turn_cost (o penalty/cost/extra_cost) per il costo additivo per svolta."
              },
              "matched_points_output": {
                "label": "Punti abbinati in uscita",
                "description": "Percorso vettoriale opzionale in uscita per le diagnostiche per punto."
              },
              "match_report": {
                "label": "Rapporto di abbinamento",
                "description": "Percorso JSON opzionale in uscita per le diagnostiche di riepilogo."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare in uscita per il percorso inferito."
              }
            }
          },
          "multimodal_od_cost_matrix": {
            "name": "Matrice dei costi OD multimodale",
            "description": "Calcola in batch i costi OD multimodali e le sintesi per modalità tra insiemi di punti di origine e di destinazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "origins": {
                "label": "Origini",
                "description": "Layer puntuale delle origini."
              },
              "destinations": {
                "label": "Destinazioni",
                "description": "Layer puntuale delle destinazioni."
              },
              "mode_field": {
                "label": "Campo modalità",
                "description": "Campo attributo delle linee che identifica la modalità di viaggio per segmento."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "max_snap_distance": {
                "label": "Distanza massima di aggancio",
                "description": "Distanza massima opzionale dai punti di origine/destinazione al nodo di rete più vicino."
              },
              "default_mode_speed": {
                "label": "Velocità predefinita della modalità",
                "description": "Velocità predefinita della modalità in unità di coordinate per unità di tempo (default: 1)."
              },
              "mode_speed_overrides": {
                "label": "Velocità specifiche per modalità",
                "description": "Override opzionali modalità:velocità separati da virgole (ad esempio: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Modalità consentite",
                "description": "Elenco opzionale separato da virgole delle modalità consentite da includere nell'instradamento."
              },
              "transfer_penalty": {
                "label": "Penalità di trasferimento",
                "description": "Penalità additiva opzionale applicata ogni volta che il percorso cambia modalità."
              },
              "temporal_cost_profile": {
                "label": "Profilo di costo temporale",
                "description": "CSV opzionale che definisce i costi degli archi dipendenti dal tempo (colonne: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo ID arco temporale",
                "description": "Campo opzionale della rete usato per abbinare i valori edge_id di temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Orario di partenza",
                "description": "Orario di partenza opzionale in formato RFC3339 usato per la ricerca nel profilo temporale."
              },
              "temporal_mode": {
                "label": "Modalità temporale",
                "description": "Modalità opzionale di interpretazione temporale: multiplier o absolute."
              },
              "temporal_fallback": {
                "label": "Ripiego temporale",
                "description": "Ripiego opzionale quando manca la riga temporale: static_cost o error."
              },
              "temporal_profile_report": {
                "label": "Rapporto del profilo temporale",
                "description": "Percorso JSON opzionale in uscita per le diagnostiche del profilo temporale quando si usa un ingresso temporale diretto."
              },
              "scenario_bundle_csv": {
                "label": "CSV del bundle di scenario",
                "description": "CSV opzionale che elenca scenari temporali nominati per un'uscita OD comparativa multi-scenario."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV in uscita."
              }
            }
          },
          "multimodal_routes_from_od": {
            "name": "Percorsi multimodali da OD",
            "description": "Costruisce le geometrie dei percorsi per coppie di punti origine-destinazione multimodali con sintesi delle modalità per percorso.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "origins": {
                "label": "Origini",
                "description": "Layer puntuale delle origini."
              },
              "destinations": {
                "label": "Destinazioni",
                "description": "Layer puntuale delle destinazioni."
              },
              "mode_field": {
                "label": "Campo modalità",
                "description": "Campo attributo delle linee che identifica la modalità di viaggio per segmento."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "max_snap_distance": {
                "label": "Distanza massima di aggancio",
                "description": "Distanza massima opzionale dai punti di origine/destinazione al nodo di rete più vicino."
              },
              "default_mode_speed": {
                "label": "Velocità predefinita della modalità",
                "description": "Velocità predefinita della modalità in unità di coordinate per unità di tempo (default: 1)."
              },
              "mode_speed_overrides": {
                "label": "Velocità specifiche per modalità",
                "description": "Override opzionali modalità:velocità separati da virgole (ad esempio: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Modalità consentite",
                "description": "Elenco opzionale separato da virgole delle modalità consentite da includere nell'instradamento."
              },
              "transfer_penalty": {
                "label": "Penalità di trasferimento",
                "description": "Penalità additiva opzionale applicata ogni volta che il percorso cambia modalità."
              },
              "temporal_cost_profile": {
                "label": "Profilo di costo temporale",
                "description": "CSV opzionale che definisce i costi degli archi dipendenti dal tempo (colonne: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo ID arco temporale",
                "description": "Campo opzionale della rete usato per abbinare i valori edge_id di temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Orario di partenza",
                "description": "Orario di partenza opzionale in formato RFC3339 usato per la ricerca nel profilo temporale."
              },
              "temporal_mode": {
                "label": "Modalità temporale",
                "description": "Modalità opzionale di interpretazione temporale: multiplier o absolute."
              },
              "temporal_fallback": {
                "label": "Ripiego temporale",
                "description": "Ripiego opzionale quando manca la riga temporale: static_cost o error."
              },
              "temporal_profile_report": {
                "label": "Rapporto del profilo temporale",
                "description": "Percorso JSON opzionale in uscita per le diagnostiche del profilo temporale quando si usa un ingresso temporale diretto."
              },
              "scenario_bundle_csv": {
                "label": "CSV del bundle di scenario",
                "description": "CSV opzionale che elenca scenari temporali nominati per un'uscita dei percorsi comparativa multi-scenario."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare dei percorsi in uscita."
              }
            }
          },
          "multimodal_shortest_path": {
            "name": "Percorso multimodale più breve",
            "description": "Trova un percorso più breve che tiene conto delle modalità su una rete lineare, con penalità di trasferimento configurabili.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "start_x": {
                "label": "X iniziale",
                "description": "Coordinata x iniziale."
              },
              "start_y": {
                "label": "Y iniziale",
                "description": "Coordinata y iniziale."
              },
              "end_x": {
                "label": "X finale",
                "description": "Coordinata x finale."
              },
              "end_y": {
                "label": "Y finale",
                "description": "Coordinata y finale."
              },
              "mode_field": {
                "label": "Campo modalità",
                "description": "Campo attributo delle linee che identifica la modalità di viaggio per segmento."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "max_snap_distance": {
                "label": "Distanza massima di aggancio",
                "description": "Distanza massima opzionale dalle coordinate iniziali/finali al nodo di rete più vicino."
              },
              "default_mode_speed": {
                "label": "Velocità predefinita della modalità",
                "description": "Velocità predefinita della modalità in unità di coordinate per unità di tempo (default: 1)."
              },
              "mode_speed_overrides": {
                "label": "Velocità specifiche per modalità",
                "description": "Override opzionali modalità:velocità separati da virgole (ad esempio: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Modalità consentite",
                "description": "Elenco opzionale separato da virgole delle modalità consentite da includere nell'instradamento."
              },
              "transfer_penalty": {
                "label": "Penalità di trasferimento",
                "description": "Penalità additiva opzionale applicata ogni volta che il percorso cambia modalità."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare in uscita."
              }
            }
          },
          "network_accessibility_metrics": {
            "name": "Metriche di accessibilità della rete",
            "description": "Calcola indici di accessibilità per i punti di origine in base alla raggiungibilità delle destinazioni, con soglie di impedenza e funzioni di decadimento opzionali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "origins": {
                "label": "Origini",
                "description": "Layer puntuale delle origini."
              },
              "destinations": {
                "label": "Destinazioni",
                "description": "Layer puntuale delle destinazioni."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "max_snap_distance": {
                "label": "Distanza massima di aggancio",
                "description": "Distanza massima opzionale dai punti di origine/destinazione al nodo di rete più vicino."
              },
              "impedance_cutoff": {
                "label": "Soglia di impedenza",
                "description": "Soglia di distanza massima opzionale per il conteggio delle destinazioni raggiungibili (default: infinita)."
              },
              "decay_function": {
                "label": "Funzione di decadimento",
                "description": "Funzione di decadimento opzionale: 'none' (default), 'linear' o 'exponential' per l'accessibilità ponderata per distanza."
              },
              "decay_parameter": {
                "label": "Parametro di decadimento",
                "description": "Parametro di decadimento opzionale (lambda per exponential, tasso per linear)."
              },
              "edge_cost_field": {
                "label": "Campo costo dell'arco",
                "description": "Campo numerico opzionale delle linee usato come moltiplicatore di impedenza per la lunghezza del segmento."
              },
              "one_way_field": {
                "label": "Campo senso unico",
                "description": "Campo opzionale delle linee che contrassegna gli archi digitalizzati a senso unico (supporta FT/TF/B più i valori booleani legacy)."
              },
              "blocked_field": {
                "label": "Campo bloccato",
                "description": "Campo opzionale delle linee che contrassegna gli archi bloccati/chiusi da escludere dall'instradamento (true/1/yes blocca)."
              },
              "node_cost_points": {
                "label": "Punti di costo dei nodi",
                "description": "Layer puntuale opzionale che fornisce i costi di ingresso per nodo (es. ritardo alle intersezioni)."
              },
              "node_cost_field": {
                "label": "Campo costo dei nodi",
                "description": "Campo numerico in node_cost_points contenente i costi non negativi per nodo."
              },
              "node_cost_snap_distance": {
                "label": "Distanza di aggancio dei costi dei nodi",
                "description": "Distanza massima opzionale da ogni punto di costo dei nodi a un nodo di rete per l'assegnazione."
              },
              "parallel_execution": {
                "label": "Esecuzione parallela",
                "description": "Se true (default), valuta le origini in parallelo per un calcolo dell'accessibilità più veloce."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita (origini con metriche di accessibilità)."
              }
            }
          },
          "network_centrality_metrics": {
            "name": "Metriche di centralità della rete",
            "description": "Calcola le metriche di base di centralità di grado, di vicinanza e di intermediazione per i nodi della rete.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "edge_cost_field": {
                "label": "Campo costo dell'arco",
                "description": "Campo numerico opzionale delle linee usato come moltiplicatore di impedenza per la lunghezza del segmento."
              },
              "one_way_field": {
                "label": "Campo senso unico",
                "description": "Campo opzionale delle linee che contrassegna gli archi digitalizzati a senso unico (supporta FT/TF/B più i valori booleani legacy)."
              },
              "blocked_field": {
                "label": "Campo bloccato",
                "description": "Campo opzionale delle linee che contrassegna gli archi bloccati/chiusi da escludere dalla costruzione del grafo (true/1/yes blocca)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita."
              }
            }
          },
          "network_connected_components": {
            "name": "Componenti connesse della rete",
            "description": "Assegna un ID di componente connessa a ciascun elemento lineare di una rete.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare in uscita."
              }
            }
          },
          "network_node_degree": {
            "name": "Grado dei nodi della rete",
            "description": "Estrae i nodi di rete dagli elementi lineari e calcola il grado e il tipo dei nodi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita."
              }
            }
          },
          "network_od_cost_matrix": {
            "name": "Matrice dei costi OD della rete",
            "description": "Calcola i costi dei percorsi più brevi origine-destinazione su una rete lineare e scrive una matrice CSV.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "origins": {
                "label": "Origini",
                "description": "Layer puntuale delle origini."
              },
              "destinations": {
                "label": "Destinazioni",
                "description": "Layer puntuale delle destinazioni."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "max_snap_distance": {
                "label": "Distanza massima di aggancio",
                "description": "Distanza massima opzionale dai punti di origine/destinazione al nodo di rete più vicino."
              },
              "edge_cost_field": {
                "label": "Campo costo dell'arco",
                "description": "Campo numerico opzionale delle linee usato come moltiplicatore di impedenza per la lunghezza del segmento."
              },
              "one_way_field": {
                "label": "Campo senso unico",
                "description": "Campo opzionale delle linee che contrassegna gli archi digitalizzati a senso unico (supporta FT/TF/B più i valori booleani legacy)."
              },
              "blocked_field": {
                "label": "Campo bloccato",
                "description": "Campo opzionale delle linee che contrassegna gli archi bloccati/chiusi da escludere dall'instradamento (true/1/yes blocca)."
              },
              "barriers": {
                "label": "Barriere",
                "description": "Layer puntuale opzionale delle barriere; i nodi di rete più vicini vengono bloccati all'attraversamento."
              },
              "barrier_snap_distance": {
                "label": "Distanza di aggancio delle barriere",
                "description": "Distanza massima opzionale da ogni punto barriera a un nodo di rete per il blocco."
              },
              "node_cost_points": {
                "label": "Punti di costo dei nodi",
                "description": "Layer puntuale opzionale che fornisce i costi di ingresso per nodo (es. ritardo alle intersezioni)."
              },
              "node_cost_field": {
                "label": "Campo costo dei nodi",
                "description": "Campo numerico in node_cost_points contenente i costi non negativi per nodo."
              },
              "node_cost_snap_distance": {
                "label": "Distanza di aggancio dei costi dei nodi",
                "description": "Distanza massima opzionale da ogni punto di costo dei nodi a un nodo di rete per l'assegnazione."
              },
              "turn_penalty": {
                "label": "Penalità di svolta",
                "description": "Costo additivo opzionale applicato alle svolte non rettilinee ai nodi di rete."
              },
              "u_turn_penalty": {
                "label": "Penalità di inversione a U",
                "description": "Costo additivo opzionale applicato alle transizioni di inversione a U."
              },
              "forbid_u_turns": {
                "label": "Vieta le inversioni a U",
                "description": "Se true, vieta le transizioni di inversione a U."
              },
              "forbid_left_turns": {
                "label": "Vieta le svolte a sinistra",
                "description": "Se true, vieta le transizioni di svolta a sinistra."
              },
              "forbid_right_turns": {
                "label": "Vieta le svolte a destra",
                "description": "Se true, vieta le transizioni di svolta a destra."
              },
              "turn_restrictions_csv": {
                "label": "CSV delle restrizioni di svolta",
                "description": "CSV opzionale delle transizioni di svolta con colonne prev_x,prev_y,node_x,node_y,next_x,next_y. Colonne opzionali: forbidden (default true quando non è fornita la colonna turn_cost) e turn_cost (o penalty/cost/extra_cost) per il costo additivo per svolta."
              },
              "temporal_cost_profile": {
                "label": "Profilo di costo temporale",
                "description": "CSV opzionale che definisce i costi degli archi dipendenti dal tempo (colonne: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo ID arco temporale",
                "description": "Campo opzionale della rete usato per abbinare i valori edge_id di temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Orario di partenza",
                "description": "Orario di partenza opzionale in formato RFC3339 usato per la ricerca nel profilo temporale."
              },
              "temporal_mode": {
                "label": "Modalità temporale",
                "description": "Modalità opzionale di interpretazione temporale: multiplier o absolute."
              },
              "temporal_fallback": {
                "label": "Ripiego temporale",
                "description": "Ripiego opzionale quando manca la riga temporale: static_cost o error."
              },
              "temporal_profile_report": {
                "label": "Rapporto del profilo temporale",
                "description": "Percorso JSON opzionale in uscita per le diagnostiche del profilo temporale (copertura, archi non abbinati, uso del ripiego)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV in uscita."
              }
            }
          },
          "network_routes_from_od": {
            "name": "Percorsi di rete da OD",
            "description": "Costruisce le geometrie dei percorsi per coppie di punti origine-destinazione su una rete lineare.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "origins": {
                "label": "Origini",
                "description": "Layer puntuale delle origini."
              },
              "destinations": {
                "label": "Destinazioni",
                "description": "Layer puntuale delle destinazioni."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "max_snap_distance": {
                "label": "Distanza massima di aggancio",
                "description": "Distanza massima opzionale dai punti di origine/destinazione al nodo di rete più vicino."
              },
              "edge_cost_field": {
                "label": "Campo costo dell'arco",
                "description": "Campo numerico opzionale delle linee usato come moltiplicatore di impedenza per la lunghezza del segmento."
              },
              "one_way_field": {
                "label": "Campo senso unico",
                "description": "Campo opzionale delle linee che contrassegna gli archi digitalizzati a senso unico (supporta FT/TF/B più i valori booleani legacy)."
              },
              "blocked_field": {
                "label": "Campo bloccato",
                "description": "Campo opzionale delle linee che contrassegna gli archi bloccati/chiusi da escludere dall'instradamento (true/1/yes blocca)."
              },
              "barriers": {
                "label": "Barriere",
                "description": "Layer puntuale opzionale delle barriere; i nodi di rete più vicini vengono bloccati all'attraversamento."
              },
              "barrier_snap_distance": {
                "label": "Distanza di aggancio delle barriere",
                "description": "Distanza massima opzionale da ogni punto barriera a un nodo di rete per il blocco."
              },
              "node_cost_points": {
                "label": "Punti di costo dei nodi",
                "description": "Layer puntuale opzionale che fornisce i costi di ingresso per nodo (es. ritardo alle intersezioni)."
              },
              "node_cost_field": {
                "label": "Campo costo dei nodi",
                "description": "Campo numerico in node_cost_points contenente i costi non negativi per nodo."
              },
              "node_cost_snap_distance": {
                "label": "Distanza di aggancio dei costi dei nodi",
                "description": "Distanza massima opzionale da ogni punto di costo dei nodi a un nodo di rete per l'assegnazione."
              },
              "turn_penalty": {
                "label": "Penalità di svolta",
                "description": "Costo additivo opzionale applicato alle svolte non rettilinee ai nodi di rete."
              },
              "u_turn_penalty": {
                "label": "Penalità di inversione a U",
                "description": "Costo additivo opzionale applicato alle transizioni di inversione a U."
              },
              "forbid_u_turns": {
                "label": "Vieta le inversioni a U",
                "description": "Se true, vieta le transizioni di inversione a U."
              },
              "forbid_left_turns": {
                "label": "Vieta le svolte a sinistra",
                "description": "Se true, vieta le transizioni di svolta a sinistra."
              },
              "forbid_right_turns": {
                "label": "Vieta le svolte a destra",
                "description": "Se true, vieta le transizioni di svolta a destra."
              },
              "turn_restrictions_csv": {
                "label": "CSV delle restrizioni di svolta",
                "description": "CSV opzionale delle transizioni di svolta con colonne prev_x,prev_y,node_x,node_y,next_x,next_y. Colonne opzionali: forbidden (default true quando non è fornita la colonna turn_cost) e turn_cost (o penalty/cost/extra_cost) per il costo additivo per svolta."
              },
              "temporal_cost_profile": {
                "label": "Profilo di costo temporale",
                "description": "CSV opzionale che definisce i costi degli archi dipendenti dal tempo (colonne: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo ID arco temporale",
                "description": "Campo opzionale della rete usato per abbinare i valori edge_id di temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Orario di partenza",
                "description": "Orario di partenza opzionale in formato RFC3339 usato per la ricerca nel profilo temporale."
              },
              "temporal_mode": {
                "label": "Modalità temporale",
                "description": "Modalità opzionale di interpretazione temporale: multiplier o absolute."
              },
              "temporal_fallback": {
                "label": "Ripiego temporale",
                "description": "Ripiego opzionale quando manca la riga temporale: static_cost o error."
              },
              "temporal_profile_report": {
                "label": "Rapporto del profilo temporale",
                "description": "Percorso JSON opzionale in uscita per le diagnostiche del profilo temporale (copertura, archi non abbinati, uso del ripiego)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare dei percorsi in uscita."
              }
            }
          },
          "network_service_area": {
            "name": "Area di servizio della rete",
            "description": "Calcola i nodi di rete raggiungibili dai punti di origine entro un costo di rete massimo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "origins": {
                "label": "Origini",
                "description": "Layer puntuale delle origini."
              },
              "max_cost": {
                "label": "Costo massimo",
                "description": "Costo massimo del percorso raggiungibile."
              },
              "ring_costs": {
                "label": "Costi degli anelli",
                "description": "Soglie opzionali degli anelli separate da virgole per le uscite multi-anello (ad esempio: 5,10,15)."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "max_snap_distance": {
                "label": "Distanza massima di aggancio",
                "description": "Distanza massima opzionale dai punti di origine al nodo di rete più vicino."
              },
              "output_mode": {
                "label": "Modalità di uscita",
                "description": "Modalità di uscita: 'nodes' (default), 'edges' per i segmenti di arco raggiungibili tagliati per costo, o 'polygons' per poligoni di tipo isocrona per origine dagli inviluppi degli archi raggiungibili."
              },
              "polygon_merge_origins": {
                "label": "Unisci le origini dei poligoni",
                "description": "Se true e output_mode='polygons', dissolve i poligoni delle origini sovrapposti in una copertura fusa per anello invece di emettere un poligono per origine."
              },
              "mode_field": {
                "label": "Campo modalità",
                "description": "Campo attributo opzionale delle linee che identifica la modalità di viaggio per segmento; abilita costi delle aree di servizio sensibili alla modalità."
              },
              "default_mode_speed": {
                "label": "Velocità predefinita della modalità",
                "description": "Velocità predefinita della modalità in unità di coordinate per unità di tempo quando è fornito mode_field (default: 1)."
              },
              "mode_speed_overrides": {
                "label": "Velocità specifiche per modalità",
                "description": "Override opzionali modalità:velocità separati da virgole (ad esempio: walk:1.4,drive:12)."
              },
              "allowed_modes": {
                "label": "Modalità consentite",
                "description": "Elenco opzionale separato da virgole delle modalità consentite da includere quando è fornito mode_field."
              },
              "edge_cost_field": {
                "label": "Campo costo dell'arco",
                "description": "Campo numerico opzionale delle linee usato come moltiplicatore di impedenza per la lunghezza del segmento."
              },
              "one_way_field": {
                "label": "Campo senso unico",
                "description": "Campo opzionale delle linee che contrassegna gli archi digitalizzati a senso unico (supporta FT/TF/B più i valori booleani legacy)."
              },
              "blocked_field": {
                "label": "Campo bloccato",
                "description": "Campo opzionale delle linee che contrassegna gli archi bloccati/chiusi da escludere dall'instradamento (true/1/yes blocca)."
              },
              "barriers": {
                "label": "Barriere",
                "description": "Layer puntuale opzionale delle barriere; i nodi di rete più vicini vengono bloccati all'attraversamento."
              },
              "barrier_snap_distance": {
                "label": "Distanza di aggancio delle barriere",
                "description": "Distanza massima opzionale da ogni punto barriera a un nodo di rete per il blocco."
              },
              "node_cost_points": {
                "label": "Punti di costo dei nodi",
                "description": "Layer puntuale opzionale che fornisce i costi di ingresso per nodo (es. ritardo alle intersezioni)."
              },
              "node_cost_field": {
                "label": "Campo costo dei nodi",
                "description": "Campo numerico in node_cost_points contenente i costi non negativi per nodo."
              },
              "node_cost_snap_distance": {
                "label": "Distanza di aggancio dei costi dei nodi",
                "description": "Distanza massima opzionale da ogni punto di costo dei nodi a un nodo di rete per l'assegnazione."
              },
              "turn_penalty": {
                "label": "Penalità di svolta",
                "description": "Costo additivo opzionale applicato alle svolte non rettilinee ai nodi di rete."
              },
              "u_turn_penalty": {
                "label": "Penalità di inversione a U",
                "description": "Costo additivo opzionale applicato alle transizioni di inversione a U."
              },
              "forbid_u_turns": {
                "label": "Vieta le inversioni a U",
                "description": "Se true, vieta le transizioni di inversione a U."
              },
              "forbid_left_turns": {
                "label": "Vieta le svolte a sinistra",
                "description": "Se true, vieta le transizioni di svolta a sinistra."
              },
              "forbid_right_turns": {
                "label": "Vieta le svolte a destra",
                "description": "Se true, vieta le transizioni di svolta a destra."
              },
              "turn_restrictions_csv": {
                "label": "CSV delle restrizioni di svolta",
                "description": "CSV opzionale delle transizioni di svolta con colonne prev_x,prev_y,node_x,node_y,next_x,next_y. Colonne opzionali: forbidden (default true quando non è fornita la colonna turn_cost) e turn_cost (o penalty/cost/extra_cost) per il costo additivo per svolta."
              },
              "temporal_cost_profile": {
                "label": "Profilo di costo temporale",
                "description": "CSV opzionale che definisce i costi degli archi dipendenti dal tempo (colonne: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo ID arco temporale",
                "description": "Campo opzionale della rete usato per abbinare i valori edge_id di temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Orario di partenza",
                "description": "Orario di partenza opzionale in formato RFC3339 usato per la ricerca nel profilo temporale."
              },
              "temporal_mode": {
                "label": "Modalità temporale",
                "description": "Modalità opzionale di interpretazione temporale: multiplier o absolute."
              },
              "temporal_fallback": {
                "label": "Ripiego temporale",
                "description": "Ripiego opzionale quando manca la riga temporale: static_cost o error."
              },
              "temporal_profile_report": {
                "label": "Rapporto del profilo temporale",
                "description": "Percorso JSON opzionale in uscita per le diagnostiche del profilo temporale (copertura, archi non abbinati, uso del ripiego)."
              },
              "snapped_origins_output": {
                "label": "Origini agganciate in uscita",
                "description": "Percorso vettoriale opzionale in uscita per i punti di ancoraggio interni delle origini agganciate usati per avviare l'attraversamento."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale delle aree di servizio in uscita."
              }
            }
          },
          "network_topology_audit": {
            "name": "Audit della topologia di rete",
            "description": "Verifica una rete lineare alla ricerca di anomalie topologiche (componenti scollegate, vicoli ciechi e anomalie di grado) che causano errori di instradamento.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "one_way_field": {
                "label": "Campo senso unico",
                "description": "Campo opzionale delle linee che contrassegna gli archi a senso unico (supporta FT/TF/B più i valori booleani legacy)."
              },
              "blocked_field": {
                "label": "Campo bloccato",
                "description": "Campo opzionale delle linee che contrassegna gli archi bloccati da escludere dall'analisi."
              },
              "report": {
                "label": "Rapporto",
                "description": "Percorso JSON opzionale in uscita per il rapporto di riepilogo della verifica."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita per le diagnostiche per nodo."
              }
            }
          },
          "od_sensitivity_analysis": {
            "name": "Analisi di sensibilità OD",
            "description": "Calcola i costi dei percorsi più brevi OD con perturbazioni dell'impedenza e produce in uscita statistiche di sensibilità tramite campionamento Monte Carlo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "origins": {
                "label": "Origini",
                "description": "Layer puntuale delle origini."
              },
              "destinations": {
                "label": "Destinazioni",
                "description": "Layer puntuale delle destinazioni."
              },
              "edge_cost_field": {
                "label": "Campo costo dell'arco",
                "description": "Campo numerico obbligatorio delle linee usato come moltiplicatore di impedenza per l'analisi di perturbazione."
              },
              "impedance_disturbance_range": {
                "label": "Intervallo di perturbazione dell'impedenza",
                "description": "Intervallo per la perturbazione dei costi come 'min_factor,max_factor' (es. '0.8,1.2' per una variazione di ±20%)."
              },
              "monte_carlo_samples": {
                "label": "Campioni Monte Carlo",
                "description": "Numero di campioni Monte Carlo per l'analisi di perturbazione (default 1, max 100)."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "max_snap_distance": {
                "label": "Distanza massima di aggancio",
                "description": "Distanza massima opzionale dai punti di origine/destinazione al nodo di rete più vicino."
              },
              "one_way_field": {
                "label": "Campo senso unico",
                "description": "Campo opzionale delle linee che contrassegna gli archi digitalizzati a senso unico (supporta FT/TF/B più i valori booleani legacy)."
              },
              "blocked_field": {
                "label": "Campo bloccato",
                "description": "Campo opzionale delle linee che contrassegna gli archi bloccati/chiusi."
              },
              "node_cost_points": {
                "label": "Punti di costo dei nodi",
                "description": "Layer puntuale opzionale che fornisce i costi di ingresso per nodo (es. ritardo alle intersezioni)."
              },
              "node_cost_field": {
                "label": "Campo costo dei nodi",
                "description": "Campo numerico in node_cost_points contenente i costi non negativi per nodo."
              },
              "node_cost_snap_distance": {
                "label": "Distanza di aggancio dei costi dei nodi",
                "description": "Distanza massima opzionale da ogni punto di costo dei nodi a un nodo di rete per l'assegnazione."
              },
              "parallel_execution": {
                "label": "Esecuzione parallela",
                "description": "Se true (default), valuta le ricerche dalle origini in parallelo per le esecuzioni OD di base e perturbate."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV in uscita con le coppie OD e le statistiche di sensibilità."
              }
            }
          },
          "shortest_path_network": {
            "name": "Percorso più breve sulla rete",
            "description": "Trova il percorso più breve tra le coordinate di partenza e di arrivo su una rete lineare.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer della rete lineare in ingresso."
              },
              "start_x": {
                "label": "X iniziale",
                "description": "Coordinata x iniziale."
              },
              "start_y": {
                "label": "Y iniziale",
                "description": "Coordinata y iniziale."
              },
              "end_x": {
                "label": "X finale",
                "description": "Coordinata x finale."
              },
              "end_y": {
                "label": "Y finale",
                "description": "Coordinata y finale."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio dei nodi opzionale per la costruzione del grafo."
              },
              "max_snap_distance": {
                "label": "Distanza massima di aggancio",
                "description": "Distanza massima opzionale dalle coordinate iniziali/finali al nodo di rete più vicino."
              },
              "edge_cost_field": {
                "label": "Campo costo dell'arco",
                "description": "Campo numerico opzionale delle linee usato come moltiplicatore di impedenza per la lunghezza del segmento."
              },
              "one_way_field": {
                "label": "Campo senso unico",
                "description": "Campo opzionale delle linee che contrassegna gli archi digitalizzati a senso unico (supporta FT/TF/B più i valori booleani legacy)."
              },
              "blocked_field": {
                "label": "Campo bloccato",
                "description": "Campo opzionale delle linee che contrassegna gli archi bloccati/chiusi da escludere dall'instradamento (true/1/yes blocca)."
              },
              "barriers": {
                "label": "Barriere",
                "description": "Layer puntuale opzionale delle barriere; i nodi di rete più vicini vengono bloccati all'attraversamento."
              },
              "barrier_snap_distance": {
                "label": "Distanza di aggancio delle barriere",
                "description": "Distanza massima opzionale da ogni punto barriera a un nodo di rete per il blocco."
              },
              "turn_penalty": {
                "label": "Penalità di svolta",
                "description": "Costo additivo opzionale applicato alle svolte non rettilinee ai nodi di rete."
              },
              "u_turn_penalty": {
                "label": "Penalità di inversione a U",
                "description": "Costo additivo opzionale applicato alle transizioni di inversione a U."
              },
              "forbid_u_turns": {
                "label": "Vieta le inversioni a U",
                "description": "Se true, vieta le transizioni di inversione a U."
              },
              "forbid_left_turns": {
                "label": "Vieta le svolte a sinistra",
                "description": "Se true, vieta le transizioni di svolta a sinistra."
              },
              "forbid_right_turns": {
                "label": "Vieta le svolte a destra",
                "description": "Se true, vieta le transizioni di svolta a destra."
              },
              "turn_restrictions_csv": {
                "label": "CSV delle restrizioni di svolta",
                "description": "CSV opzionale delle transizioni di svolta con colonne prev_x,prev_y,node_x,node_y,next_x,next_y. Colonne opzionali: forbidden (default true quando non è fornita la colonna turn_cost) e turn_cost (o penalty/cost/extra_cost) per il costo additivo per svolta."
              },
              "temporal_cost_profile": {
                "label": "Profilo di costo temporale",
                "description": "CSV opzionale che definisce i costi degli archi dipendenti dal tempo (colonne: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo ID arco temporale",
                "description": "Campo opzionale della rete usato per abbinare i valori edge_id di temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Orario di partenza",
                "description": "Orario di partenza opzionale in formato RFC3339 usato per la ricerca nel profilo temporale."
              },
              "temporal_mode": {
                "label": "Modalità temporale",
                "description": "Modalità opzionale di interpretazione temporale: multiplier o absolute."
              },
              "temporal_fallback": {
                "label": "Ripiego temporale",
                "description": "Ripiego opzionale quando manca la riga temporale: static_cost o error."
              },
              "temporal_profile_report": {
                "label": "Rapporto del profilo temporale",
                "description": "Percorso JSON opzionale in uscita per le diagnostiche del profilo temporale (copertura, archi non abbinati, uso del ripiego)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare in uscita."
              }
            }
          },
          "split_lines_at_intersections": {
            "name": "Dividi le linee alle intersezioni",
            "description": "Suddivide una rete lineare ovunque i segmenti di linea si intersechino, comprese le autointersezioni.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer lineare in ingresso da dividere alle intersezioni."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio opzionale usata dalle operazioni di divisione; per impostazione predefinita l'epsilon di macchina."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare diviso in uscita."
              }
            }
          },
          "snap_points_to_network": {
            "name": "Aggancia i punti alla rete",
            "description": "Aggancia gli elementi puntuali in ingresso alla posizione più vicina lungo un layer lineare di rete.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer puntuale in ingresso da agganciare."
              },
              "network": {
                "label": "Rete",
                "description": "Layer lineare della rete in ingresso."
              },
              "max_snap_distance": {
                "label": "Distanza massima di aggancio",
                "description": "Distanza massima di aggancio opzionale in unità di mappa."
              },
              "keep_unsnapped": {
                "label": "Mantieni i non agganciati",
                "description": "Se true (default), mantiene i punti che non possono essere agganciati entro la tolleranza."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale agganciato in uscita."
              }
            }
          },
          "transfer_attributes": {
            "name": "Trasferisci attributi",
            "description": "Trasferisce gli attributi di origine sugli elementi di destinazione usando un predicato spaziale.",
            "params": {
              "target": {
                "label": "Obiettivo",
                "description": "Layer di destinazione che riceve gli attributi trasferiti."
              },
              "source": {
                "label": "Sorgente",
                "description": "Layer sorgente che fornisce gli attributi."
              },
              "predicate": {
                "label": "Predicato",
                "description": "Predicato spaziale: intersects, within, contains, touches, crosses, overlaps, within_distance."
              },
              "distance": {
                "label": "Distanza",
                "description": "Soglia di distanza quando predicate=within_distance."
              },
              "strategy": {
                "label": "Strategia",
                "description": "Strategia di trasferimento: first, last, count, sum, mean, min, max."
              },
              "prefix": {
                "label": "Prefisso",
                "description": "Prefisso per i campi sorgente trasferiti (default SRC_)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "travelling_salesman_problem": {
            "name": "Problema del commesso viaggiatore",
            "description": "Trova soluzioni approssimate al problema del commesso viaggiatore (TSP) usando l'euristica 2-opt. Dato un insieme di posizioni puntuali, identifica il percorso più breve che collega tutti i punti.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "duration": {
                "label": "Durata",
                "description": "Durata massima dell'ottimizzazione in secondi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale della polilinea in uscita."
              }
            }
          },
          "vehicle_routing_cvrp": {
            "name": "Instradamento veicoli CVRP",
            "description": "Costruisce percorsi di consegna multi-deposito con vincoli di capacità, con controlli per flotte eterogenee, modalità dell'obiettivo e ottimizzazione locale opzionale.",
            "params": {
              "network": {
                "label": "Rete",
                "description": "Layer della rete lineare in ingresso (validato per parità del contratto)."
              },
              "depot_points": {
                "label": "Punti deposito",
                "description": "Layer puntuale dei depositi; ogni punto può contribuire con uno o più veicoli."
              },
              "stop_points": {
                "label": "Punti di sosta",
                "description": "Layer puntuale delle fermate di consegna."
              },
              "demand_field": {
                "label": "Campo domanda",
                "description": "Campo numerico della domanda in stop_points (default: demand)."
              },
              "priority_field": {
                "label": "Campo priorità",
                "description": "Campo opzionale di priorità delle fermate con valori come required/high/normal/low o ranghi numerici."
              },
              "allowed_vehicle_profiles_field": {
                "label": "Campo profili veicolo consentiti",
                "description": "Campo opzionale delle fermate che elenca i profili veicolo compatibili (delimitati da virgole/punti e virgola/pipe)."
              },
              "allowed_route_classes_field": {
                "label": "Campo classi di percorso consentite",
                "description": "Alias opzionale di allowed_vehicle_profiles_field per le regole di compatibilità delle classi di percorso."
              },
              "depot_id_field": {
                "label": "Campo ID deposito",
                "description": "Campo opzionale ID deposito usato nelle uscite di percorso/assegnazione."
              },
              "vehicle_count_field": {
                "label": "Campo numero di veicoli",
                "description": "Campo opzionale dei depositi per il numero di veicoli generati in ogni deposito."
              },
              "vehicle_capacity_field": {
                "label": "Campo capacità del veicolo",
                "description": "Campo opzionale dei depositi che sovrascrive vehicle_capacity per modello di deposito/veicolo."
              },
              "vehicle_fixed_cost_field": {
                "label": "Campo costo fisso del veicolo",
                "description": "Campo opzionale dei depositi che sovrascrive vehicle_fixed_cost per modello di deposito/veicolo."
              },
              "travel_speed_field": {
                "label": "Campo velocità di viaggio",
                "description": "Campo opzionale dei depositi che sovrascrive travel_speed per modello di deposito/veicolo."
              },
              "max_route_distance_field": {
                "label": "Campo distanza massima del percorso",
                "description": "Campo opzionale dei depositi che sovrascrive max_route_distance per modello di deposito/veicolo."
              },
              "max_route_time_field": {
                "label": "Campo tempo massimo del percorso",
                "description": "Campo opzionale dei depositi che sovrascrive max_route_time per modello di deposito/veicolo."
              },
              "vehicle_profile_field": {
                "label": "Campo profilo del veicolo",
                "description": "Campo opzionale dei depositi che definisce il token di profilo/categoria del veicolo usato per la compatibilità delle fermate."
              },
              "vehicle_route_class_field": {
                "label": "Campo classe di percorso del veicolo",
                "description": "Alias opzionale di vehicle_profile_field per le regole di compatibilità delle classi di percorso."
              },
              "vehicle_capacity": {
                "label": "Capacità del veicolo",
                "description": "Capacità per veicolo (> 0)."
              },
              "vehicle_fixed_cost": {
                "label": "Costo fisso del veicolo",
                "description": "Costo fisso opzionale addebitato per ogni veicolo/percorso dispacciato (default: 0)."
              },
              "max_vehicles": {
                "label": "Veicoli massimi",
                "description": "Numero massimo opzionale di veicoli/percorsi da costruire."
              },
              "max_route_distance": {
                "label": "Distanza massima del percorso",
                "description": "Distanza massima di viaggio opzionale per percorso, incluso il ritorno al deposito."
              },
              "travel_speed": {
                "label": "Velocità di viaggio",
                "description": "Velocità di viaggio in unità di coordinate per unità di tempo (default: 1)."
              },
              "max_route_time": {
                "label": "Tempo massimo del percorso",
                "description": "Durata massima opzionale del percorso in unità di tempo del modello, incluso il ritorno al deposito."
              },
              "max_stops_per_vehicle": {
                "label": "Soste massime per veicolo",
                "description": "Numero massimo opzionale di fermate assegnate a ogni percorso del veicolo."
              },
              "objective_mode": {
                "label": "Modalità obiettivo",
                "description": "Obiettivo della costruzione dei percorsi: minimize_distance, minimize_vehicles o minimize_cost."
              },
              "apply_local_optimization": {
                "label": "Applica ottimizzazione locale",
                "description": "Se true, applica un passaggio deterministico di miglioramento locale 2-opt a ogni percorso costruito (default: true)."
              },
              "apply_simulated_annealing": {
                "label": "Applica simulated annealing",
                "description": "Se true, applica un passaggio di raffinamento con simulated annealing con seme per percorso dopo l'ottimizzazione greedy/locale (default: false)."
              },
              "sa_iterations": {
                "label": "Iterazioni SA",
                "description": "Numero massimo di iterazioni di simulated annealing per percorso quando apply_simulated_annealing=true (default: 1500)."
              },
              "sa_initial_temperature": {
                "label": "Temperatura iniziale SA",
                "description": "Temperatura iniziale del simulated annealing (> 0, default: 1.0)."
              },
              "sa_cooling_rate": {
                "label": "Tasso di raffreddamento SA",
                "description": "Moltiplicatore di raffreddamento del simulated annealing in (0, 1); default 0.995."
              },
              "sa_seed": {
                "label": "Seme SA",
                "description": "Seme casuale deterministico opzionale per il simulated annealing (default: 42)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare dei percorsi in uscita."
              },
              "assignment_output": {
                "label": "Assegnazione in uscita",
                "description": "Uscita puntuale opzionale dell'assegnazione delle fermate con diagnostiche di ordine di visita/carico."
              }
            }
          },
          "vehicle_routing_pickup_delivery": {
            "name": "Instradamento veicoli con ritiro e consegna",
            "description": "Costruisce percorsi accoppiati di ritiro-consegna con vincoli di precedenza e di capacità usando una base deterministica nearest-neighbour.",
            "params": {
              "network": {
                "label": "Rete",
                "description": "Layer della rete lineare in ingresso (validato per parità del contratto)."
              },
              "depot_points": {
                "label": "Punti deposito",
                "description": "Layer puntuale dei depositi; il primo punto è usato come deposito attivo in questa implementazione di base."
              },
              "stop_points": {
                "label": "Punti di sosta",
                "description": "Layer puntuale delle fermate contenente record accoppiati di ritiro e consegna."
              },
              "request_id_field": {
                "label": "Campo ID richiesta",
                "description": "Campo identificatore di richiesta in stop_points usato per accoppiare i record di ritiro e consegna (default: request_id)."
              },
              "stop_type_field": {
                "label": "Campo tipo di sosta",
                "description": "Campo tipo di fermata in stop_points contenente le etichette pickup/delivery (default: stop_type)."
              },
              "demand_field": {
                "label": "Campo domanda",
                "description": "Campo numerico della domanda in stop_points; la domanda di ritiro viene caricata e la domanda consegnata viene ignorata (default: demand)."
              },
              "vehicle_capacity": {
                "label": "Capacità del veicolo",
                "description": "Capacità per veicolo (> 0)."
              },
              "max_vehicles": {
                "label": "Veicoli massimi",
                "description": "Numero massimo opzionale di veicoli/percorsi da costruire."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare dei percorsi in uscita."
              },
              "assignment_output": {
                "label": "Assegnazione in uscita",
                "description": "Uscita puntuale opzionale dell'assegnazione delle fermate con diagnostiche di richiesta e precedenza."
              }
            }
          },
          "vehicle_routing_vrptw": {
            "name": "Instradamento veicoli VRPTW",
            "description": "Costruisce percorsi VRPTW multi-deposito con vincoli di capacità, con impostazioni per flotte eterogenee, finestre di pausa e controlli della modalità dell'obiettivo.",
            "params": {
              "network": {
                "label": "Rete",
                "description": "Layer della rete lineare in ingresso (validato per parità del contratto)."
              },
              "depot_points": {
                "label": "Punti deposito",
                "description": "Layer puntuale dei depositi; ogni punto può contribuire con uno o più veicoli."
              },
              "stop_points": {
                "label": "Punti di sosta",
                "description": "Layer puntuale delle fermate di consegna con campi di domanda e finestra temporale."
              },
              "demand_field": {
                "label": "Campo domanda",
                "description": "Campo numerico della domanda in stop_points (default: demand)."
              },
              "priority_field": {
                "label": "Campo priorità",
                "description": "Campo opzionale di priorità delle fermate con valori come required/high/normal/low o ranghi numerici."
              },
              "allowed_vehicle_profiles_field": {
                "label": "Campo profili veicolo consentiti",
                "description": "Campo opzionale delle fermate che elenca i profili veicolo compatibili (delimitati da virgole/punti e virgola/pipe)."
              },
              "allowed_route_classes_field": {
                "label": "Campo classi di percorso consentite",
                "description": "Alias opzionale di allowed_vehicle_profiles_field per le regole di compatibilità delle classi di percorso."
              },
              "tw_start_field": {
                "label": "Campo inizio finestra temporale",
                "description": "Campo numerico di inizio della finestra temporale in stop_points (default: tw_start)."
              },
              "tw_end_field": {
                "label": "Campo fine finestra temporale",
                "description": "Campo numerico di fine della finestra temporale in stop_points (default: tw_end)."
              },
              "service_time_field": {
                "label": "Campo tempo di servizio",
                "description": "Campo numerico del tempo di servizio per fermata in stop_points (default: service_time)."
              },
              "depot_id_field": {
                "label": "Campo ID deposito",
                "description": "Campo opzionale ID deposito usato nelle uscite di percorso/assegnazione."
              },
              "vehicle_count_field": {
                "label": "Campo numero di veicoli",
                "description": "Campo opzionale dei depositi per il numero di veicoli generati in ogni deposito."
              },
              "vehicle_capacity_field": {
                "label": "Campo capacità del veicolo",
                "description": "Campo opzionale dei depositi che sovrascrive vehicle_capacity per modello di deposito/veicolo."
              },
              "vehicle_fixed_cost_field": {
                "label": "Campo costo fisso del veicolo",
                "description": "Campo opzionale dei depositi che sovrascrive vehicle_fixed_cost per modello di deposito/veicolo."
              },
              "travel_speed_field": {
                "label": "Campo velocità di viaggio",
                "description": "Campo opzionale dei depositi che sovrascrive travel_speed per modello di deposito/veicolo."
              },
              "max_route_distance_field": {
                "label": "Campo distanza massima del percorso",
                "description": "Campo opzionale dei depositi che sovrascrive max_route_distance per modello di deposito/veicolo."
              },
              "max_route_time_field": {
                "label": "Campo tempo massimo del percorso",
                "description": "Campo opzionale dei depositi che sovrascrive max_route_time per modello di deposito/veicolo."
              },
              "vehicle_profile_field": {
                "label": "Campo profilo del veicolo",
                "description": "Campo opzionale dei depositi che definisce il token di profilo/categoria del veicolo usato per la compatibilità delle fermate."
              },
              "vehicle_route_class_field": {
                "label": "Campo classe di percorso del veicolo",
                "description": "Alias opzionale di vehicle_profile_field per le regole di compatibilità delle classi di percorso."
              },
              "depot_close_time_field": {
                "label": "Campo orario di chiusura del deposito",
                "description": "Campo opzionale dei depositi che sovrascrive depot_close_time per modello di deposito/veicolo."
              },
              "break_start_field": {
                "label": "Campo inizio pausa",
                "description": "Campo opzionale dei depositi che sovrascrive break_start_time per modello di deposito/veicolo."
              },
              "break_end_field": {
                "label": "Campo fine pausa",
                "description": "Campo opzionale dei depositi che sovrascrive break_end_time per modello di deposito/veicolo."
              },
              "break_duration_field": {
                "label": "Campo durata della pausa",
                "description": "Campo opzionale dei depositi che sovrascrive break_duration per modello di deposito/veicolo."
              },
              "vehicle_capacity": {
                "label": "Capacità del veicolo",
                "description": "Capacità per veicolo (> 0)."
              },
              "vehicle_fixed_cost": {
                "label": "Costo fisso del veicolo",
                "description": "Costo fisso opzionale addebitato per ogni veicolo/percorso dispacciato (default: 0)."
              },
              "start_time": {
                "label": "Orario di inizio",
                "description": "Orario di inizio del percorso in unità di tempo del modello (default: 0)."
              },
              "travel_speed": {
                "label": "Velocità di viaggio",
                "description": "Velocità di viaggio in unità di coordinate per unità di tempo (default: 1)."
              },
              "enforce_time_windows": {
                "label": "Applica le finestre temporali",
                "description": "Se true, solo le fermate con ritardo <= allowed_lateness sono idonee all'assegnazione (default: false)."
              },
              "allowed_lateness": {
                "label": "Ritardo consentito",
                "description": "Ritardo massimo tollerato quando enforce_time_windows=true (default: 0)."
              },
              "depot_close_time": {
                "label": "Orario di chiusura del deposito",
                "description": "Orario di chiusura rigido opzionale entro cui ogni percorso deve rientrare al deposito."
              },
              "break_start_time": {
                "label": "Orario di inizio pausa",
                "description": "Orario di inizio opzionale della finestra di pausa globale per tutti i veicoli."
              },
              "break_end_time": {
                "label": "Orario di fine pausa",
                "description": "Orario di fine opzionale della finestra di pausa globale per tutti i veicoli."
              },
              "break_duration": {
                "label": "Durata della pausa",
                "description": "Durata opzionale della pausa globale applicata una volta per percorso quando la finestra di pausa viene intersecata."
              },
              "use_priority_scoring": {
                "label": "Usa il punteggio di priorità",
                "description": "Se true, classifica i candidati ammissibili per ritardo/margine previsto prima della distanza di viaggio; se false, usa la base del vicino più prossimo (default: true)."
              },
              "max_vehicles": {
                "label": "Veicoli massimi",
                "description": "Numero massimo opzionale di veicoli/percorsi da costruire."
              },
              "max_route_distance": {
                "label": "Distanza massima del percorso",
                "description": "Distanza massima di viaggio opzionale del percorso, incluso il ritorno al deposito."
              },
              "max_route_time": {
                "label": "Tempo massimo del percorso",
                "description": "Durata massima opzionale del percorso in unità di tempo del modello, incluso il ritorno al deposito."
              },
              "max_stops_per_vehicle": {
                "label": "Soste massime per veicolo",
                "description": "Numero massimo opzionale di fermate assegnate a ogni percorso del veicolo."
              },
              "objective_mode": {
                "label": "Modalità obiettivo",
                "description": "Obiettivo della costruzione dei percorsi: minimize_lateness, minimize_distance, minimize_vehicles o minimize_cost."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare dei percorsi in uscita."
              },
              "assignment_output": {
                "label": "Assegnazione in uscita",
                "description": "Uscita puntuale opzionale dell'assegnazione delle fermate con diagnostiche delle finestre temporali."
              }
            }
          },
          "clip": {
            "name": "Ritaglia",
            "description": "Ritaglia i poligoni in ingresso sui confini dei poligoni di sovrapposizione usando un'intersezione basata sulla topologia.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "overlay": {
                "label": "Sovrapposizione",
                "description": "Layer poligonale di sovrapposizione."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio opzionale usata dalle operazioni topologiche; per impostazione predefinita l'epsilon di macchina."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "difference": {
            "name": "Differenza",
            "description": "Rimuove le aree dei poligoni di sovrapposizione dai poligoni in ingresso usando una differenza basata sulla topologia.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "overlay": {
                "label": "Sovrapposizione",
                "description": "Layer poligonale di sovrapposizione."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio opzionale usata dalle operazioni topologiche; per impostazione predefinita l'epsilon di macchina."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "dissolve": {
            "name": "Dissolvi",
            "description": "Rimuove i confini condivisi tra poligoni globalmente o in base a un campo attributo di dissolvenza.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "dissolve_field": {
                "label": "Campo di dissolvenza",
                "description": "Campo attributo opzionale usato per dissolvere i poligoni all'interno dei gruppi; se omesso, dissolve tutti i poligoni."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio opzionale usata durante le operazioni topologiche."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita."
              }
            }
          },
          "erase": {
            "name": "Cancella",
            "description": "Cancella le aree dei poligoni di sovrapposizione dai poligoni in ingresso e preserva gli attributi in ingresso.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "overlay": {
                "label": "Sovrapposizione",
                "description": "Layer poligonale di sovrapposizione."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio opzionale usata dalle operazioni topologiche; per impostazione predefinita l'epsilon di macchina."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "identity": {
            "name": "Identità",
            "description": "Preserva tutti gli elementi in ingresso; le porzioni che si sovrappongono al layer di identità acquisiscono anche gli attributi di identità.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "overlay": {
                "label": "Sovrapposizione",
                "description": "Layer poligonale di sovrapposizione."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio opzionale usata dalle operazioni topologiche; per impostazione predefinita l'epsilon di macchina."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "intersect": {
            "name": "Interseca",
            "description": "Interseca i poligoni in ingresso e di sovrapposizione usando una sovrapposizione basata sulla topologia e tiene traccia degli ID degli elementi di origine.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "overlay": {
                "label": "Sovrapposizione",
                "description": "Layer poligonale di sovrapposizione."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio opzionale usata dalle operazioni topologiche; per impostazione predefinita l'epsilon di macchina."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "line_intersections": {
            "name": "Intersezioni di linee",
            "description": "Trova i punti di intersezione delle linee tra i layer in ingresso e di sovrapposizione e aggiunge gli ID padre con gli attributi uniti.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer lineare o poligonale in ingresso."
              },
              "overlay": {
                "label": "Sovrapposizione",
                "description": "Layer lineare o poligonale di sovrapposizione."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio opzionale usata dalle operazioni geometriche; per impostazione predefinita l'epsilon di macchina."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "line_polygon_clip": {
            "name": "Ritaglio di linee su poligono",
            "description": "Ritaglia gli elementi lineari sull'interno dei poligoni e produce in uscita i segmenti di linea ritagliati.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer lineare in ingresso."
              },
              "clip": {
                "label": "Ritaglia",
                "description": "Layer poligonale di ritaglio."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "near": {
            "name": "Prossimità",
            "description": "Aggiunge gli attributi NEAR_FID e NEAR_DIST che identificano gli elementi più vicini e le relative distanze usando l'indicizzazione spaziale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "near": {
                "label": "Prossimità",
                "description": "Layer vettoriale delle geometrie vicine."
              },
              "max_distance": {
                "label": "Distanza massima",
                "description": "Distanza massima di ricerca opzionale."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "select_by_location": {
            "name": "Seleziona per posizione",
            "description": "Filtra gli elementi di destinazione in base a predicati spaziali (intersects, within, contains, touches, overlaps, ecc.) rispetto agli elementi di interrogazione.",
            "params": {
              "target": {
                "label": "Obiettivo",
                "description": "Layer delle geometrie di destinazione da filtrare."
              },
              "query": {
                "label": "Interrogazione",
                "description": "Layer delle geometrie di interrogazione."
              },
              "predicate": {
                "label": "Predicato",
                "description": "Predicato spaziale: intersects, within, contains, touches, crosses, overlaps, disjoint, within_distance."
              },
              "distance": {
                "label": "Distanza",
                "description": "Soglia di distanza per il predicato within_distance."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "spatial_join": {
            "name": "Unione spaziale",
            "description": "Trasferisce gli attributi dagli elementi del layer di join alle destinazioni usando predicati spaziali; supporta strategie di aggregazione (count, sum, mean, min, max) per corrispondenze multiple.",
            "params": {
              "target": {
                "label": "Obiettivo",
                "description": "Layer di destinazione che riceve gli attributi uniti."
              },
              "join": {
                "label": "Unione",
                "description": "Layer di unione che fornisce gli attributi."
              },
              "predicate": {
                "label": "Predicato",
                "description": "Predicato spaziale: intersects, within, contains, touches, crosses, overlaps, within_distance."
              },
              "distance": {
                "label": "Distanza",
                "description": "Soglia di distanza per il predicato within_distance."
              },
              "strategy": {
                "label": "Strategia",
                "description": "Strategia di unione: first, last, count, sum, mean, min, max."
              },
              "prefix": {
                "label": "Prefisso",
                "description": "Prefisso per i nomi dei campi uniti (default JOIN_)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "symmetrical_difference": {
            "name": "Differenza simmetrica",
            "description": "Calcola regioni poligonali non sovrapposte dai layer in ingresso e di sovrapposizione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "overlay": {
                "label": "Sovrapposizione",
                "description": "Layer poligonale di sovrapposizione."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio opzionale usata dalle operazioni topologiche; per impostazione predefinita l'epsilon di macchina."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "union": {
            "name": "Unione",
            "description": "Dissolve i poligoni combinati in ingresso e di sovrapposizione in una copertura poligonale unificata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "overlay": {
                "label": "Sovrapposizione",
                "description": "Layer poligonale di sovrapposizione."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio opzionale usata dalle operazioni topologiche; per impostazione predefinita l'epsilon di macchina."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "update": {
            "name": "Aggiorna",
            "description": "Sostituisce gli elementi in ingresso con gli elementi di aggiornamento dove si sovrappongono; gli elementi in ingresso al di fuori del layer di aggiornamento vengono preservati.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "overlay": {
                "label": "Sovrapposizione",
                "description": "Layer poligonale di sovrapposizione."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio opzionale usata dalle operazioni topologiche; per impostazione predefinita l'epsilon di macchina."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "centroid_vector": {
            "name": "Centroide vettoriale",
            "description": "Calcola il centro geografico (coordinata media del baricentro) di ciascun elemento vettoriale, producendo un layer puntuale per il posizionamento delle etichette, il clustering e l'analisi spaziale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita."
              }
            }
          },
          "concave_hull": {
            "name": "Inviluppo concavo",
            "description": "Crea poligoni di inviluppo concavo attorno alle coordinate degli elementi in ingresso usando l'algoritmo concaveman.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "concavity": {
                "label": "Concavità",
                "description": "Rapporto di concavità (default 2.0). Valori più alti producono un involucro meno concavo, più vicino all'involucro convesso. Valori più bassi consentono concavità più strette."
              },
              "max_edge_length": {
                "label": "Lunghezza massima del lato",
                "description": "Soglia di lunghezza: i lati dell'involucro più corti di questo valore non vengono ulteriormente raffinati. Per impostazione predefinita illimitata (infinito)."
              },
              "epsilon": {
                "label": "Epsilon",
                "description": "Epsilon di robustezza (default 1e-9)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "densify_features": {
            "name": "Densifica elementi",
            "description": "Aggiunge vertici lungo le linee e i confini dei poligoni con una spaziatura specificata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "spacing": {
                "label": "Spaziatura",
                "description": "Spaziatura massima tra vertici adiacenti."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "eliminate_coincident_points": {
            "name": "Elimina punti coincidenti",
            "description": "Rimuove i punti coincidenti o quasi coincidenti entro una distanza di tolleranza.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "tolerance_dist": {
                "label": "Distanza di tolleranza",
                "description": "Soglia di distanza per considerare i punti coincidenti."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita."
              }
            }
          },
          "extend_vector_lines": {
            "name": "Estendi linee vettoriali",
            "description": "Estende le estremità delle polilinee di una distanza specificata all'inizio, alla fine o a entrambe.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale polilineare in ingresso."
              },
              "distance": {
                "label": "Distanza",
                "description": "Distanza di cui estendere le estremità delle polilinee."
              },
              "extend_direction": {
                "label": "Direzione di estensione",
                "description": "Direzione in cui estendere le estremità: both, start o end."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "merge_line_segments": {
            "name": "Unisci segmenti di linea",
            "description": "Unisce i segmenti di linea connessi che si incontrano in estremità senza diramazioni.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale polilineare in ingresso."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza opzionale di aggancio delle estremità usata per abbinare le estremità delle linee; per impostazione predefinita l'epsilon di macchina."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "minimum_bounding_box": {
            "name": "Rettangolo minimo circoscritto",
            "description": "Calcola i riquadri di delimitazione minimi orientati attorno ai singoli elementi o all'intero layer.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "min_criteria": {
                "label": "Criteri minimi",
                "description": "Criterio di minimizzazione: area, perimeter, length o width. Per impostazione predefinita area."
              },
              "individual_feature_hulls": {
                "label": "Involucri per singola geometria",
                "description": "Se true, emette un rettangolo per geometria; altrimenti emette un rettangolo per l'intero layer."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita."
              }
            }
          },
          "minimum_bounding_circle": {
            "name": "Cerchio minimo circoscritto",
            "description": "Calcola i cerchi minimi di inclusione attorno ai singoli elementi o all'intero layer.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "individual_feature_hulls": {
                "label": "Involucri per singola geometria",
                "description": "Se true, emette un cerchio per geometria; altrimenti emette un cerchio per l'intero layer."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita."
              }
            }
          },
          "minimum_bounding_envelope": {
            "name": "Inviluppo minimo circoscritto",
            "description": "Calcola gli inviluppi minimi di delimitazione allineati agli assi attorno ai singoli elementi o all'intero layer.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "individual_feature_hulls": {
                "label": "Involucri per singola geometria",
                "description": "Se true, emette un inviluppo per geometria; altrimenti emette un inviluppo per l'intero layer."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita."
              }
            }
          },
          "minimum_convex_hull": {
            "name": "Inviluppo convesso minimo",
            "description": "Crea poligoni di inviluppo convesso attorno ai singoli elementi o all'intero layer in ingresso.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "individual_feature_hulls": {
                "label": "Involucri per singola geometria",
                "description": "Se true, emette un involucro per geometria in ingresso; altrimenti emette un involucro per l'intero layer."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita."
              }
            }
          },
          "polygonize": {
            "name": "Poligonizza",
            "description": "Crea poligoni dalle linee in ingresso, compresi i segmenti intersecanti/aperti dove si possono formare facce chiuse.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Layer vettoriali lineari in ingresso come array o stringa delimitata da punti e virgola/virgole. Se omesso, viene usato 'input'."
              },
              "input": {
                "label": "Ingresso",
                "description": "Percorso opzionale di un singolo layer vettoriale lineare in ingresso."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio opzionale usata dalla poligonizzazione; per impostazione predefinita l'epsilon di macchina."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "representative_point_vector": {
            "name": "Punto rappresentativo vettoriale",
            "description": "Genera un punto interno che si trova con certezza all'interno o sul bordo di ciascuna geometria usando il polo di inaccessibilità, ideale per il posizionamento delle etichette nei poligoni concavi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita."
              }
            }
          },
          "simplify_features": {
            "name": "Semplifica elementi",
            "description": "Riduce la complessità delle geometrie usando l'algoritmo di Douglas-Peucker per ridurre al minimo la dimensione dei file, rimuovere il rumore GPS e ottimizzare le prestazioni di visualizzazione preservando la forma.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Tolleranza di semplificazione in unità di mappa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "smooth_vectors": {
            "name": "Leviga vettori",
            "description": "Smussa le geometrie di polilinee o poligoni tramite un filtraggio a media mobile per ridurre il rumore di digitalizzazione e le oscillazioni delle tracce GPS.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale lineare o poligonale in ingresso."
              },
              "filter_size": {
                "label": "Dimensione del filtro",
                "description": "Dimensione dispari della finestra della media mobile (>= 3). I valori pari vengono incrementati al valore dispari successivo."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "snap_endnodes": {
            "name": "Aggancia nodi terminali",
            "description": "Aggancia le estremità vicine delle polilinee a una posizione condivisa entro una tolleranza.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale polilineare in ingresso."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio delle estremità in unità di mappa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale polilineare agganciato in uscita."
              }
            }
          },
          "split_vector_lines": {
            "name": "Dividi linee vettoriali",
            "description": "Suddivide ciascun elemento polilineare in segmenti di una lunghezza massima specificata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale polilineare in ingresso."
              },
              "segment_length": {
                "label": "Lunghezza del segmento",
                "description": "Lunghezza massima del segmento in unità di mappa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale polilineare in uscita."
              }
            }
          },
          "split_with_lines": {
            "name": "Dividi con linee",
            "description": "Suddivide le polilinee in ingresso usando i punti di intersezione di un layer di linee di suddivisione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer lineare in ingresso da dividere."
              },
              "split": {
                "label": "Dividi",
                "description": "Layer lineare di divisione usato per creare i punti di interruzione."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza di aggancio opzionale usata dalle operazioni di divisione; per impostazione predefinita l'epsilon di macchina."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "compactness_ratio": {
            "name": "Rapporto di compattezza",
            "description": "Calcola il rapporto di compattezza (area / perimetro) per gli elementi poligonali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Vettoriale in uscita con il campo compattezza aggiunto."
              }
            }
          },
          "deviation_from_regional_direction": {
            "name": "Scostamento dalla direzione regionale",
            "description": "Calcola la deviazione direzionale dei poligoni rispetto all'orientamento medio regionale pesato e aggiunge DEV_DIR.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "elongation_threshold": {
                "label": "Soglia di allungamento",
                "description": "Allungamento minimo usato per includere i poligoni nella stima della direzione regionale; default 0.75."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "elongation_ratio": {
            "name": "Rapporto di allungamento",
            "description": "Calcola il rapporto di allungamento (asse corto / asse lungo del rettangolo di delimitazione) per gli elementi poligonali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Vettoriale in uscita con il campo allungamento aggiunto."
              }
            }
          },
          "hole_proportion": {
            "name": "Proporzione di fori",
            "description": "Calcola l'area dei fori del poligono divisa per l'area dell'inviluppo e aggiunge HOLE_PROP.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "linearity_index": {
            "name": "Indice di linearità",
            "description": "Calcola l'indice di linearità (r-quadro della regressione) per gli elementi poligonali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Vettoriale in uscita con il campo linearità aggiunto."
              }
            }
          },
          "narrowness_index_vector": {
            "name": "Indice di strettezza vettoriale",
            "description": "Calcola l'indice di strettezza (perimetro / sqrt(area)) per gli elementi poligonali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Vettoriale in uscita con il campo strettezza aggiunto."
              }
            }
          },
          "patch_orientation": {
            "name": "Orientamento della patch",
            "description": "Calcola l'orientamento dei poligoni (gradi dal nord) usando la regressione dell'asse maggiore ridotto e aggiunge ORIENT.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "perimeter_area_ratio": {
            "name": "Rapporto perimetro-area",
            "description": "Calcola il rapporto perimetro/area dei poligoni e aggiunge P_A_RATIO.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "polygon_area": {
            "name": "Area del poligono",
            "description": "Calcola l'area dei poligoni e aggiunge un campo attributo AREA.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "polygon_long_axis": {
            "name": "Asse maggiore del poligono",
            "description": "Mappa come output lineare l'asse lungo del riquadro di delimitazione minimo di ciascun elemento poligonale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale polilineare in uscita."
              }
            }
          },
          "polygon_perimeter": {
            "name": "Perimetro del poligono",
            "description": "Calcola il perimetro dei poligoni e aggiunge un campo attributo PERIMETER.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "polygon_short_axis": {
            "name": "Asse minore del poligono",
            "description": "Mappa come output lineare l'asse corto del riquadro di delimitazione minimo di ciascun elemento poligonale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale polilineare in uscita."
              }
            }
          },
          "related_circumscribing_circle": {
            "name": "Cerchio circoscritto correlato",
            "description": "Calcola 1 - (area del poligono / area del più piccolo cerchio circoscritto) e aggiunge RC_CIRCLE.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "shape_complexity_index_vector": {
            "name": "Indice di complessità di forma vettoriale",
            "description": "Calcola l'indice di complessità della forma per gli elementi poligonali vettoriali usando il fattore di forma normalizzato.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Vettoriale in uscita con il campo indice di complessità aggiunto."
              }
            }
          },
          "global_morans_i": {
            "name": "I di Moran globale",
            "description": "Calcola l'I di Moran globale per verificare l'autocorrelazione spaziale, ovvero se valori simili si raggruppano spazialmente. Base essenziale per l'analisi geostatistica.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "field": {
                "label": "Campo",
                "description": "Campo attributo numerico da analizzare."
              },
              "weights_mode": {
                "label": "Modalità dei pesi",
                "description": "Modalità di intorno: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Valore di k per la modalità k_nearest."
              },
              "distance": {
                "label": "Distanza",
                "description": "Soglia di distanza per la modalità distance_band."
              },
              "row_standardize": {
                "label": "Standardizzazione per righe",
                "description": "Applica la standardizzazione per righe ai pesi (default true)."
              },
              "inference": {
                "label": "Inferenza",
                "description": "Modalità di inferenza: asymptotic o permutation (default: asymptotic)."
              },
              "num_simulations": {
                "label": "Numero di simulazioni",
                "description": "Numero di permutazioni per il test di permutazione (default: 999)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme casuale per test di permutazione riproducibili."
              },
              "island_policy": {
                "label": "Politica per le isole",
                "description": "Gestione delle isole: drop_with_warning, keep_zero_weight, error."
              },
              "output_json": {
                "label": "JSON in uscita",
                "description": "Percorso opzionale del rapporto JSON in uscita."
              },
              "output_html": {
                "label": "HTML in uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita."
              },
              "output_csv": {
                "label": "CSV in uscita",
                "description": "Percorso opzionale del riepilogo CSV in uscita."
              },
              "output_distribution": {
                "label": "Distribuzione in uscita",
                "description": "Percorso opzionale per salvare la distribuzione delle permutazioni come JSON."
              }
            }
          },
          "getis_ord_gi_star": {
            "name": "Gi* di Getis-Ord",
            "description": "Calcola gli z-score Gi/Gi* di Getis-Ord per l'identificazione locale di hotspot/coldspot. Misura diretta della concentrazione di valori alti/bassi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "field": {
                "label": "Campo",
                "description": "Campo attributo numerico da analizzare."
              },
              "weights_mode": {
                "label": "Modalità dei pesi",
                "description": "Modalità di intorno: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Valore di k per la modalità k_nearest."
              },
              "distance": {
                "label": "Distanza",
                "description": "Soglia di distanza per la modalità distance_band."
              },
              "row_standardize": {
                "label": "Standardizzazione per righe",
                "description": "Applica la standardizzazione per righe ai pesi (default true)."
              },
              "variant": {
                "label": "Variante",
                "description": "Variante: gi o gi_star (default gi_star)."
              },
              "inference": {
                "label": "Inferenza",
                "description": "Modalità di inferenza: asymptotic o permutation (default: asymptotic)."
              },
              "num_simulations": {
                "label": "Numero di simulazioni",
                "description": "Numero di permutazioni per il test di permutazione (default: 999)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme casuale per test di permutazione riproducibili."
              },
              "island_policy": {
                "label": "Politica per le isole",
                "description": "Gestione delle isole: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Soglia di significatività in [0, 1]; default 0.05."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita con i campi GI."
              },
              "output_html": {
                "label": "HTML in uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita."
              }
            }
          },
          "local_morans_i_lisa": {
            "name": "I di Moran locale (LISA)",
            "description": "Calcola l'I di Moran locale per ciascun elemento per identificare cluster spaziali locali e valori anomali con test di significatività statistica.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "field": {
                "label": "Campo",
                "description": "Campo attributo numerico da analizzare."
              },
              "weights_mode": {
                "label": "Modalità dei pesi",
                "description": "Modalità di intorno: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Valore di k per la modalità k_nearest."
              },
              "distance": {
                "label": "Distanza",
                "description": "Soglia di distanza per la modalità distance_band."
              },
              "row_standardize": {
                "label": "Standardizzazione per righe",
                "description": "Applica la standardizzazione per righe ai pesi (default true)."
              },
              "inference": {
                "label": "Inferenza",
                "description": "Modalità di inferenza: asymptotic o permutation (default: asymptotic)."
              },
              "num_simulations": {
                "label": "Numero di simulazioni",
                "description": "Numero di permutazioni per il test di permutazione (default: 999)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme casuale per test di permutazione riproducibili."
              },
              "island_policy": {
                "label": "Politica per le isole",
                "description": "Gestione delle isole: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Soglia di significatività in [0, 1]; default 0.05."
              },
              "fdr_correction": {
                "label": "Correzione FDR",
                "description": "Applica la correzione FDR-BH (default true per permutation)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita con i campi LISA."
              },
              "output_html": {
                "label": "HTML in uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita."
              }
            }
          },
          "nearest_neighbour_index": {
            "name": "Indice del vicino più prossimo",
            "description": "Calcola l'indice nearest-neighbour di Clark-Evans per verificare la completa casualità spaziale. Rileva il raggruppamento rispetto alla dispersione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "study_area_mode": {
                "label": "Modalità area di studio",
                "description": "Modalità area di studio: hull, envelope, polygon_layer."
              },
              "study_area_polygon": {
                "label": "Poligono dell'area di studio",
                "description": "Layer poligonale usato quando study_area_mode=polygon_layer."
              },
              "output_json": {
                "label": "JSON in uscita",
                "description": "Percorso opzionale del rapporto JSON in uscita."
              },
              "output_html": {
                "label": "HTML in uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita."
              },
              "output_csv": {
                "label": "CSV in uscita",
                "description": "Percorso opzionale del riepilogo CSV in uscita."
              }
            }
          },
          "quadrat_count_test": {
            "name": "Test di conteggio per quadrati",
            "description": "Esegue un test chi-quadro della casualità del pattern di punti usando i conteggi per quadrati. Verifica il raggruppamento rispetto alla dispersione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "grid_mode": {
                "label": "Modalità griglia",
                "description": "Modalità griglia: rows_cols o cell_size."
              },
              "rows": {
                "label": "Righe",
                "description": "Righe quando grid_mode=rows_cols."
              },
              "cols": {
                "label": "Colonne",
                "description": "Colonne quando grid_mode=rows_cols."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella quando grid_mode=cell_size."
              },
              "study_area_mode": {
                "label": "Modalità area di studio",
                "description": "Modalità area di studio: hull, envelope, polygon_layer."
              },
              "study_area_polygon": {
                "label": "Poligono dell'area di studio",
                "description": "Layer poligonale usato quando study_area_mode=polygon_layer."
              },
              "output_grid": {
                "label": "Griglia in uscita",
                "description": "Percorso opzionale in uscita della griglia poligonale dei quadrati."
              },
              "output_json": {
                "label": "JSON in uscita",
                "description": "Percorso opzionale del rapporto JSON in uscita."
              },
              "output_html": {
                "label": "HTML in uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita."
              },
              "output_csv": {
                "label": "CSV in uscita",
                "description": "Percorso opzionale del riepilogo CSV in uscita."
              }
            }
          },
          "spatial_lag_regression": {
            "name": "Regressione con ritardo spaziale",
            "description": "Stima un modello autoregressivo spaziale che cattura gli effetti di spillover endogeni, in cui la variabile dipendente è influenzata dai vicini spaziali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "response_field": {
                "label": "Campo risposta",
                "description": "Variabile di risposta (dipendente)."
              },
              "predictor_fields": {
                "label": "Campi predittori",
                "description": "Nomi dei campi predittori separati da virgole."
              },
              "weights_mode": {
                "label": "Modalità dei pesi",
                "description": "Modalità di intorno spaziale."
              },
              "k": {
                "label": "K",
                "description": "Valore di k per k_nearest."
              },
              "distance": {
                "label": "Distanza",
                "description": "Soglia di distanza."
              },
              "row_standardize": {
                "label": "Standardizzazione per righe",
                "description": "Standardizza i pesi per righe."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer vettoriale in uscita."
              }
            }
          },
          "spatial_error_regression": {
            "name": "Regressione con errore spaziale",
            "description": "Stima un modello di errore spaziale che affronta la dipendenza spaziale esogena nei residui dovuta a variabili omesse o a errori di misura.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "response_field": {
                "label": "Campo risposta",
                "description": "Variabile di risposta."
              },
              "predictor_fields": {
                "label": "Campi predittori",
                "description": "Campi predittori separati da virgole."
              },
              "weights_mode": {
                "label": "Modalità dei pesi",
                "description": "Modalità di intorno spaziale."
              },
              "k": {
                "label": "K",
                "description": "k per k_nearest."
              },
              "distance": {
                "label": "Distanza",
                "description": "Soglia di distanza."
              },
              "row_standardize": {
                "label": "Standardizzazione per righe",
                "description": "Standardizza i pesi per righe."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer vettoriale in uscita."
              }
            }
          },
          "geographically_weighted_regression": {
            "name": "Regressione geograficamente pesata",
            "description": "Regressione lineare locale con pesi del kernel a decadimento con la distanza (GWR): coefficienti per elemento, R² locale, residui e previsioni, più diagnostiche globali AICc / R²; larghezza di banda fissa o adattiva, facoltativamente ottimizzata con AICc.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer delle geometrie in ingresso (punti, o altre geometrie tramite il loro punto rappresentativo)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "y_field": {
                "label": "Campo Y",
                "description": "Campo numerico dipendente (risposta)."
              },
              "x_fields": {
                "label": "Campi X",
                "description": "Campi numerici esplicativi separati da virgole."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Kernel di decadimento con la distanza: 'gaussian' (default) o 'bisquare'."
              },
              "bandwidth_type": {
                "label": "Tipo di larghezza di banda",
                "description": "'adaptive' (default; larghezza di banda = k vicini più prossimi) o 'fixed' (larghezza di banda = una distanza)."
              },
              "bandwidth": {
                "label": "Larghezza di banda",
                "description": "Larghezza di banda: numero di vicini per adaptive, o distanza per fixed. Omettere per selezionarla minimizzando l'AICc."
              }
            }
          },
          "ripleys_k_test": {
            "name": "Test K di Ripley",
            "description": "Calcola la statistica di raggruppamento multiscala K di Ripley. Rivela il raggruppamento/la dispersione dipendenti dalla scala su intervalli di distanza.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "max_distance": {
                "label": "Distanza massima",
                "description": "Distanza massima di analisi."
              },
              "step_size": {
                "label": "Dimensione del passo",
                "description": "Dimensione del passo di distanza."
              },
              "output": {
                "label": "Uscita",
                "description": "Vettoriale in uscita con le statistiche K."
              }
            }
          },
          "envelope_test": {
            "name": "Test dell'inviluppo",
            "description": "Esegue un test di inviluppo Monte Carlo che confronta il pattern osservato con la distribuzione nulla CSR. Determina la significatività del raggruppamento/della dispersione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "num_simulations": {
                "label": "Numero di simulazioni",
                "description": "Numero di simulazioni Monte Carlo."
              },
              "max_distance": {
                "label": "Distanza massima",
                "description": "Distanza massima di analisi."
              },
              "output": {
                "label": "Uscita",
                "description": "Vettoriale in uscita con i limiti dell'inviluppo."
              }
            }
          },
          "point_process_residuals": {
            "name": "Residui del processo di punti",
            "description": "Calcola i residui di un modello di processo di punti di Poisson adattato a fini diagnostici. Rileva la struttura spaziale non modellata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "intensity_field": {
                "label": "Campo intensità",
                "description": "Campo dell'intensità adattata."
              },
              "output": {
                "label": "Uscita",
                "description": "Vettoriale in uscita con i residui."
              }
            }
          },
          "ripleys_k_function": {
            "name": "Funzione K di Ripley",
            "description": "Calcola K(t) e L(t) per caratterizzare i pattern di raggruppamento spaziale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale."
              },
              "max_distance": {
                "label": "Distanza massima",
                "description": "Soglia di distanza massima."
              },
              "num_distances": {
                "label": "Numero di distanze",
                "description": "Numero di passi di distanza."
              },
              "output": {
                "label": "Uscita",
                "description": "CSV in uscita."
              }
            }
          },
          "point_pattern_envelope": {
            "name": "Inviluppo del pattern di punti",
            "description": "Genera inviluppi a banda critica per la verifica delle ipotesi rispetto alla CSR.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale."
              },
              "max_distance": {
                "label": "Distanza massima",
                "description": "Distanza massima."
              },
              "num_distances": {
                "label": "Numero di distanze",
                "description": "Classi di distanza."
              },
              "num_simulations": {
                "label": "Numero di simulazioni",
                "description": "Repliche Monte Carlo."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Livello di significatività."
              },
              "output": {
                "label": "Uscita",
                "description": "CSV in uscita."
              }
            }
          },
          "inhomogeneous_baseline": {
            "name": "Linea di base non omogenea",
            "description": "Stima la superficie di intensità e calcola la funzione K corretta per l'intensità.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale."
              },
              "max_distance": {
                "label": "Distanza massima",
                "description": "Distanza massima."
              },
              "num_distances": {
                "label": "Numero di distanze",
                "description": "Classi di distanza."
              },
              "bandwidth": {
                "label": "Larghezza di banda",
                "description": "Larghezza di banda KDE (selezione automatica se omessa)."
              },
              "output": {
                "label": "Uscita",
                "description": "CSV in uscita."
              }
            }
          },
          "hotspot_vs_process": {
            "name": "Hotspot contro processo",
            "description": "Confronta i pattern degli hotspot con l'intensità del processo di punti sottostante.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale."
              },
              "hotspot_field": {
                "label": "Campo hotspot",
                "description": "Campo di classificazione degli hotspot."
              },
              "intensity_field": {
                "label": "Campo intensità",
                "description": "Campo intensità."
              },
              "output": {
                "label": "Uscita",
                "description": "CSV in uscita."
              }
            }
          },
          "point_process_residuals_comparison": {
            "name": "Confronto dei residui dei processi di punti",
            "description": "Calcola le diagnostiche dei residui per la verifica dell'adeguatezza del modello.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale."
              },
              "observed_field": {
                "label": "Campo osservato",
                "description": "Campo dei valori osservati."
              },
              "predicted_field": {
                "label": "Campo predetto",
                "description": "Campo dei valori predetti."
              },
              "residual_type": {
                "label": "Tipo di residuo",
                "description": "Tipo di residuo."
              },
              "output": {
                "label": "Uscita",
                "description": "CSV in uscita."
              }
            }
          },
          "construct_vector_tin": {
            "name": "Costruisci TIN vettoriale",
            "description": "Costruisce una rete irregolare di triangoli (TIN) da un insieme di punti in ingresso usando la triangolazione di Delaunay.",
            "params": {
              "input_points": {
                "label": "Punti in ingresso",
                "description": "Layer vettoriale puntuale o multipunto in ingresso."
              },
              "field_name": {
                "label": "Nome del campo",
                "description": "Nome opzionale del campo per le altezze dei vertici (campo numerico)."
              },
              "use_z": {
                "label": "Usa Z",
                "description": "Se true, usa i valori Z della geometria per le elevazioni dei triangoli."
              },
              "max_triangle_edge_length": {
                "label": "Lunghezza massima del lato del triangolo",
                "description": "Lunghezza massima consentita dei lati dei triangoli (filtra i lati lunghi). Usare 0 o un valore negativo per nessun limite."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer vettoriale poligonale in uscita (TIN)."
              }
            }
          },
          "contours_from_points": {
            "name": "Isoipse da punti",
            "description": "Crea polilinee di curve di livello dalle elevazioni dei punti usando un TIN di Delaunay.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale puntuale o multipunto in ingresso."
              },
              "base": {
                "label": "Base",
                "description": "Elevazione dell'isolinea di base (default 0.0)."
              },
              "field_name": {
                "label": "Nome del campo",
                "description": "Campo attributo numerico contenente i valori di elevazione (ignorato quando use_z_values=true)."
              },
              "interval": {
                "label": "Intervallo",
                "description": "Valore dell'intervallo delle isolinee (default 10.0)."
              },
              "max_triangle_edge_length": {
                "label": "Lunghezza massima del lato del triangolo",
                "description": "Lunghezza massima dei lati dei triangoli da includere nel tracciamento delle isolinee (unità di mappa)."
              },
              "smooth": {
                "label": "Liscia",
                "description": "Dimensione del filtro di lisciatura (intero dispari, default 9)."
              },
              "use_z_values": {
                "label": "Usa i valori Z",
                "description": "Usa i valori Z della geometria come elevazioni (default false)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "contours_from_raster": {
            "name": "Isoipse da raster",
            "description": "Crea polilinee di curve di livello da un modello di superficie raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster di superficie in ingresso o oggetto raster tipizzato."
              },
              "base": {
                "label": "Base",
                "description": "Elevazione dell'isolinea di base (default 0.0)."
              },
              "interval": {
                "label": "Intervallo",
                "description": "Valore dell'intervallo delle isolinee (default 10.0)."
              },
              "smooth": {
                "label": "Liscia",
                "description": "Dimensione del filtro di lisciatura (intero dispari, default 9)."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Angolo minimo di deflessione della linea in gradi per la semplificazione (default 10.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "extract_nodes": {
            "name": "Estrai nodi",
            "description": "Converte i vertici di polilinee e poligoni in elementi puntuali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale polilineare o poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita."
              }
            }
          },
          "extract_raster_values_at_points": {
            "name": "Estrai valori raster nei punti",
            "description": "Campiona uno o più raster nelle posizioni dei punti e scrive i valori negli attributi dei punti.",
            "params": {
              "rasters": {
                "label": "Raster",
                "description": "Percorsi dei raster in ingresso come array o stringa delimitata."
              },
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita."
              }
            }
          },
          "find_lowest_or_highest_points": {
            "name": "Trova i punti più bassi o più alti",
            "description": "Individua le celle raster più basse e/o più alte e ne produce in uscita le posizioni come punti.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso."
              },
              "out_type": {
                "label": "Tipo di uscita",
                "description": "Tipo di uscita: lowest, highest o both."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita."
              }
            }
          },
          "hexagonal_grid_from_raster_base": {
            "name": "Griglia esagonale su base raster",
            "description": "Crea una griglia poligonale esagonale con larghezza e orientamento configurabili, fornendo una tassellazione non distorta per mappe di calore e aggregazioni.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Raster di base che controlla l'estensione della griglia."
              },
              "width": {
                "label": "Larghezza",
                "description": "Larghezza dell'esagono in unità di mappa."
              },
              "orientation": {
                "label": "Orientamento",
                "description": "Orientamento dell'esagono: horizontal o vertical."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita."
              }
            }
          },
          "hexagonal_grid_from_vector_base": {
            "name": "Griglia esagonale su base vettoriale",
            "description": "Crea una griglia poligonale esagonale allineata all'estensione del layer vettoriale, consentendo un'aggregazione spaziale non distorta e la visualizzazione della densità.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Layer vettoriale di base che controlla l'estensione della griglia."
              },
              "width": {
                "label": "Larghezza",
                "description": "Larghezza dell'esagono in unità di mappa."
              },
              "orientation": {
                "label": "Orientamento",
                "description": "Orientamento dell'esagono: horizontal o vertical."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita."
              }
            }
          },
          "layer_footprint_raster": {
            "name": "Ingombro del layer raster",
            "description": "Crea un'impronta poligonale che rappresenta l'intera estensione di un raster in ingresso.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita."
              }
            }
          },
          "layer_footprint_vector": {
            "name": "Ingombro del layer vettoriale",
            "description": "Crea un'impronta poligonale che rappresenta l'intera estensione di delimitazione di un layer vettoriale in ingresso.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita."
              }
            }
          },
          "medoid": {
            "name": "Medoide",
            "description": "Calcola i punti medoidi dalle geometrie vettoriali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale dei medoidi in uscita."
              }
            }
          },
          "random_points_in_polygon": {
            "name": "Punti casuali nel poligono",
            "description": "Genera punti casuali distribuiti uniformemente all'interno delle geometrie poligonali in ingresso.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer poligonale in ingresso."
              },
              "num_points": {
                "label": "Numero di punti",
                "description": "Numero di punti casuali da creare."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme opzionale del generatore casuale per la riproducibilità."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "rectangular_grid_from_raster_base": {
            "name": "Griglia rettangolare su base raster",
            "description": "Crea una griglia poligonale rettangolare che copre l'estensione di un raster.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Raster di base che controlla l'estensione della griglia."
              },
              "width": {
                "label": "Larghezza",
                "description": "Larghezza della cella della griglia in unità di mappa."
              },
              "height": {
                "label": "Altezza",
                "description": "Altezza della cella della griglia in unità di mappa."
              },
              "x_origin": {
                "label": "Origine X",
                "description": "Origine x opzionale per l'allineamento della griglia."
              },
              "y_origin": {
                "label": "Origine Y",
                "description": "Origine y opzionale per l'allineamento della griglia."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita."
              }
            }
          },
          "rectangular_grid_from_vector_base": {
            "name": "Griglia rettangolare su base vettoriale",
            "description": "Crea una griglia poligonale rettangolare che copre l'estensione di delimitazione di un layer vettoriale.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Layer vettoriale di base che controlla l'estensione della griglia."
              },
              "width": {
                "label": "Larghezza",
                "description": "Larghezza della cella della griglia in unità di mappa."
              },
              "height": {
                "label": "Altezza",
                "description": "Altezza della cella della griglia in unità di mappa."
              },
              "x_origin": {
                "label": "Origine X",
                "description": "Origine x opzionale per l'allineamento della griglia."
              },
              "y_origin": {
                "label": "Origine Y",
                "description": "Origine y opzionale per l'allineamento della griglia."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita."
              }
            }
          },
          "vector_hex_binning": {
            "name": "Binning esagonale vettoriale",
            "description": "Aggrega gli elementi puntuali in bin esagonali, contando i punti per cella esagonale.",
            "params": {
              "vector_points": {
                "label": "Punti vettoriali",
                "description": "Layer vettoriale puntuale o multipunto in ingresso."
              },
              "width": {
                "label": "Larghezza",
                "description": "Larghezza dell'esagono (distanza tra i lati opposti)."
              },
              "orientation": {
                "label": "Orientamento",
                "description": "Orientamento dell'esagono: 'h' per orizzontale (vertice in alto) o 'v' per verticale (lato in alto)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer poligonale esagonale in uscita con i conteggi."
              }
            }
          },
          "voronoi_diagram": {
            "name": "Diagramma di Voronoi",
            "description": "Crea poligoni di Voronoi (Thiessen) dalle posizioni dei punti in ingresso.",
            "params": {
              "input_points": {
                "label": "Punti in ingresso",
                "description": "Layer vettoriale puntuale o multipunto in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale di Voronoi in uscita."
              }
            }
          },
          "add_field": {
            "name": "Aggiungi campo",
            "description": "Aggiunge un nuovo campo attributo con un valore predefinito opzionale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "field": {
                "label": "Campo",
                "description": "Nome del nuovo campo."
              },
              "field_type": {
                "label": "Tipo di campo",
                "description": "Tipo di campo: integer, float, text, boolean."
              },
              "default": {
                "label": "Predefinito",
                "description": "Valore predefinito opzionale."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "add_geometry_attributes": {
            "name": "Aggiungi attributi geometrici",
            "description": "Calcola automaticamente le proprietà geometriche (area, lunghezza, perimetro, centroide) e le aggiunge come nuovi campi, supportando misure sia planari sia geodetiche.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "measurement_mode": {
                "label": "Modalità di misura",
                "description": "Metodo di misura: auto (default), planar o geodesic."
              },
              "area": {
                "label": "Area",
                "description": "Includi il campo area (AREA_M2 per geodesic, AREA_MAP2 per planar)."
              },
              "length": {
                "label": "Lunghezza",
                "description": "Includi il campo lunghezza (LENGTH_M per geodesic, LENGTH_MAP per planar)."
              },
              "perimeter": {
                "label": "Perimetro",
                "description": "Includi il campo perimetro (PERIM_M per geodesic, PERIM_MAP per planar)."
              },
              "centroid": {
                "label": "Centroide",
                "description": "Includi i campi X/Y del centroide (default true)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "attribute_correlation": {
            "name": "Correlazione tra attributi",
            "description": "Esegue un'analisi di correlazione di Pearson sui campi attributo numerici vettoriali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita (alias: output_html_file)."
              }
            }
          },
          "attribute_histogram": {
            "name": "Istogramma degli attributi",
            "description": "Crea un istogramma dei valori di un campo numerico in una tabella degli attributi vettoriale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale in ingresso."
              },
              "field": {
                "label": "Campo",
                "description": "Nome del campo attributo numerico."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita (alias: output_html_file)."
              }
            }
          },
          "attribute_scattergram": {
            "name": "Diagramma a dispersione degli attributi",
            "description": "Calcola le statistiche di sintesi del grafico a dispersione tra due campi vettoriali numerici.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale in ingresso."
              },
              "fieldx": {
                "label": "Campo X",
                "description": "Nome del campo numerico dell'asse x."
              },
              "fieldy": {
                "label": "Campo Y",
                "description": "Nome del campo numerico dell'asse y."
              },
              "trendline": {
                "label": "Linea di tendenza",
                "description": "Includi il riepilogo della linea di tendenza (default false)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita (alias: output_html_file)."
              }
            }
          },
          "delete_field": {
            "name": "Elimina campo",
            "description": "Elimina uno o più campi attributo da un layer vettoriale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "fields": {
                "label": "Campi",
                "description": "Nomi dei campi da eliminare delimitati da virgole."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "extract_by_attribute": {
            "name": "Estrai per attributo",
            "description": "Estrae gli elementi vettoriali che soddisfano un'espressione sugli attributi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "statement": {
                "label": "Istruzione",
                "description": "Espressione booleana valutata sui campi attributo; accetta gli alias in stile SQL AND/OR/NOT/XOR."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "field_calculator": {
            "name": "Calcolatrice di campi",
            "description": "Calcola il valore di un campo da un'espressione usando gli attributi degli elementi e variabili di geometria; supporta CASE, CAST, controlli sui null in stile SQL e wrapper UPDATE ... SET ... [WHERE ...].",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "field": {
                "label": "Campo",
                "description": "Nome del campo in uscita."
              },
              "field_type": {
                "label": "Tipo di campo",
                "description": "Tipo del campo in uscita: float, integer, text."
              },
              "expression": {
                "label": "Espressione",
                "description": "Espressione valutata per geometria. Supporta CASE in stile SQL, CAST(... AS type), IS NULL/IS NOT NULL e i wrapper UPDATE ... SET FIELD = ... [WHERE ...]."
              },
              "overwrite": {
                "label": "Sovrascrivi",
                "description": "Sovrascrive il campo esistente se presente (default true)."
              },
              "preview_rows": {
                "label": "Righe di anteprima",
                "description": "Numero opzionale di righe di anteprima da restituire nel payload del risultato. Quando > 0, l'uscita può essere omessa per una valutazione di sola anteprima."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita. Opzionale quando preview_rows > 0."
              }
            }
          },
          "filter_vector_features_by_area": {
            "name": "Filtra elementi vettoriali per area",
            "description": "Filtra gli elementi poligonali al di sotto di una soglia di area minima.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Area minima dei poligoni da mantenere, in unità di coordinate del layer al quadrato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "list_unique_values": {
            "name": "Elenca valori univoci",
            "description": "Elenca i valori univoci e le frequenze in un campo attributo vettoriale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale in ingresso."
              },
              "field": {
                "label": "Campo",
                "description": "Nome del campo attributo."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del CSV in uscita."
              }
            }
          },
          "rename_field": {
            "name": "Rinomina campo",
            "description": "Rinomina un campo attributo in un layer vettoriale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "field": {
                "label": "Campo",
                "description": "Nome del campo esistente."
              },
              "new_field": {
                "label": "Nuovo campo",
                "description": "Nome del campo sostitutivo."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "download_osm_vector": {
            "name": "Scarica vettoriale da OSM",
            "description": "Scarica gli elementi OpenStreetMap dall'API Overpass per un riquadro di delimitazione e scrive il risultato come layer vettoriale.",
            "params": {
              "west": {
                "label": "Ovest",
                "description": "Longitudine del confine ovest (EPSG:4326)."
              },
              "south": {
                "label": "Sud",
                "description": "Latitudine del confine sud (EPSG:4326)."
              },
              "east": {
                "label": "Est",
                "description": "Longitudine del confine est (EPSG:4326)."
              },
              "north": {
                "label": "Nord",
                "description": "Latitudine del confine nord (EPSG:4326)."
              },
              "input_extent_epsg": {
                "label": "EPSG dell'estensione in ingresso",
                "description": "Codice EPSG per l'estensione in ingresso ovest/sud/est/nord (default 4326)."
              },
              "filter_preset": {
                "label": "Filtro predefinito",
                "description": "Preset delle classi di geometrie: all, roads, buildings, water, landuse, trails, parks, rail, amenities, boundaries, transit, poi (default all)."
              },
              "include_tags": {
                "label": "Includi i tag",
                "description": "Elenco di filtro delle chiavi dei tag delimitato da punti e virgola, es. amenity;shop."
              },
              "include_key_values": {
                "label": "Includi coppie chiave-valore",
                "description": "Elenco di filtro chiave=valore delimitato da punti e virgola, es. amenity=school;building=yes."
              },
              "filter_key": {
                "label": "Chiave del filtro",
                "description": "Filtro legacy a singola chiave di tag (deprecato; usare include_tags)."
              },
              "filter_key_value": {
                "label": "Valore della chiave del filtro",
                "description": "Filtro legacy a singola coppia chiave=valore (deprecato; usare include_key_values)."
              },
              "include_points": {
                "label": "Includi i punti",
                "description": "Includi le geometrie nodo OSM con tag come geometrie Point (default true)."
              },
              "include_lines": {
                "label": "Includi le linee",
                "description": "Includi le geometrie way OSM come geometrie LineString (default true)."
              },
              "include_polygons": {
                "label": "Includi i poligoni",
                "description": "Includi le way OSM chiuse con tag di area come geometrie Polygon (default true)."
              },
              "clip_to_extent": {
                "label": "Ritaglia all'estensione",
                "description": "Ritaglia le geometrie in uscita all'estensione del riquadro di delimitazione dell'interrogazione (default true)."
              },
              "split_output_by_geometry": {
                "label": "Dividi l'uscita per geometria",
                "description": "Scrive uscite separate per tipo di geometria (<output>_points|lines|polygons.ext)."
              },
              "output_epsg": {
                "label": "EPSG di uscita",
                "description": "Riproietta l'uscita in questo codice EPSG; omettere per mantenere EPSG:4326."
              },
              "overpass_profile": {
                "label": "Profilo Overpass",
                "description": "Profilo dell'endpoint Overpass: main, kumi, fr o custom (default main)."
              },
              "overpass_url": {
                "label": "URL Overpass",
                "description": "URL dell'endpoint dell'API Overpass (default https://overpass-api.de/api/interpreter)."
              },
              "timeout_seconds": {
                "label": "Timeout (secondi)",
                "description": "Timeout dell'interrogazione in secondi (default 25)."
              },
              "max_elements": {
                "label": "Elementi massimi",
                "description": "Numero massimo di elementi Overpass restituiti prima di sollevare un errore (default 50 000)."
              },
              "chunk_large_aoi": {
                "label": "Suddividi le AOI estese",
                "description": "Suddivide automaticamente le AOI più grandi in più richieste Overpass (default true)."
              },
              "chunk_max_area_deg2": {
                "label": "Area massima per blocco (gradi²)",
                "description": "Area massima per blocco in gradi quadrati durante la suddivisione (default 4.0)."
              },
              "max_chunk_count": {
                "label": "Numero massimo di blocchi",
                "description": "Limite rigido sul numero di blocchi durante la suddivisione di AOI estese (default 64)."
              },
              "chunk_parallel_requests": {
                "label": "Richieste parallele per blocco",
                "description": "Numero massimo di richieste parallele per blocco per le AOI estese (default 1 = sequenziale)."
              },
              "cache_dir": {
                "label": "Cartella della cache",
                "description": "Cartella opzionale per la cache delle risposte JSON di Overpass per hash di endpoint+interrogazione."
              },
              "cache_ttl_hours": {
                "label": "Durata della cache (ore)",
                "description": "Durata della cache in ore (default 24; 0 significa nessuna verifica di scadenza)."
              },
              "provenance_output": {
                "label": "Provenienza in uscita",
                "description": "Percorso JSON opzionale in cui scrivere il file ausiliario dei metadati di interrogazione/provenienza."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita; se omesso, viene usata un'uscita temporanea."
              }
            }
          },
          "assign_projection_lidar": {
            "name": "Assegna proiezione al LiDAR",
            "description": "Assegna un sistema di riferimento delle coordinate a una nuvola di punti LiDAR senza riproiettarne i punti.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file LiDAR in ingresso (LAS/LAZ/COPC, o handle in memoria)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Codice EPSG del CRS da assegnare, es. 4326 (WGS84) o 3857 (Web Mercator). Le coordinate non vengono trasformate."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso LiDAR opzionale in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "assign_projection_raster": {
            "name": "Assegna proiezione al raster",
            "description": "Assegna un sistema di riferimento delle coordinate a un raster senza deformarne le celle.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso (o handle in memoria)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Codice EPSG del CRS da assegnare, es. 4326 (WGS84) o 3857 (Web Mercator). Le coordinate non vengono trasformate."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "assign_projection_vector": {
            "name": "Assegna proiezione al vettoriale",
            "description": "Assegna un sistema di riferimento delle coordinate a un layer vettoriale senza riproiettarne le geometrie.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Codice EPSG del CRS da assegnare, es. 4326 (WGS84) o 3857 (Web Mercator). Le coordinate non vengono trasformate."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              }
            }
          },
          "georeference_raster_from_control_points": {
            "name": "Georeferenzia raster da punti di controllo",
            "description": "Adatta una trasformazione dai GCP e deforma un raster in un output georeferenziato.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "control_points": {
                "label": "Punti di controllo",
                "description": "Percorso del CSV dei punti di controllo con pixel_x,pixel_y,map_x,map_y (e gli alias accettati)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Codice EPSG di destinazione."
              },
              "transform_type": {
                "label": "Tipo di trasformazione",
                "description": "Tipo di trasformazione: affine, projective, polynomial o thin_plate_spline."
              },
              "transform_order": {
                "label": "Ordine della trasformazione",
                "description": "Ordine del polinomio quando transform_type=polynomial."
              },
              "resample": {
                "label": "Ricampiona",
                "description": "Metodo di ricampionamento; default bilinear."
              },
              "allow_auto_downgrade": {
                "label": "Consenti il declassamento automatico",
                "description": "Consente il declassamento automatico a una trasformazione più semplice quando i GCP sono scarsi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster georeferenziato in uscita."
              },
              "report": {
                "label": "Rapporto",
                "description": "Percorso del rapporto JSON in uscita."
              }
            }
          },
          "reproject_lidar": {
            "name": "Riproietta LiDAR",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Ingresso"
              },
              "dst_epsg": {
                "label": "EPSG di destinazione",
                "description": "EPSG di destinazione"
              },
              "output": {
                "label": "Uscita",
                "description": "Uscita"
              },
              "use_3d_transform": {
                "label": "Usa trasformazione 3D",
                "description": "Usa trasformazione 3D"
              },
              "failure_policy": {
                "label": "Politica in caso di errore",
                "description": "Politica in caso di errore"
              },
              "coordinate_epoch": {
                "label": "Epoca delle coordinate",
                "description": "Epoca delle coordinate"
              },
              "source_reference_epoch": {
                "label": "Epoca di riferimento sorgente",
                "description": "Epoca di riferimento sorgente"
              },
              "target_reference_epoch": {
                "label": "Epoca di riferimento di destinazione",
                "description": "Epoca di riferimento di destinazione"
              },
              "operation_code": {
                "label": "Codice dell'operazione",
                "description": "Codice dell'operazione"
              },
              "prefer_official_operation": {
                "label": "Preferisci l'operazione ufficiale",
                "description": "Preferisci l'operazione ufficiale"
              },
              "epoch_policy": {
                "label": "Politica delle epoche",
                "description": "Politica delle epoche"
              }
            }
          },
          "reproject_raster": {
            "name": "Riproietta raster",
            "description": "Riproietta (deforma) un raster in un sistema di riferimento delle coordinate EPSG di destinazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso. Deve avere un CRS sorgente (EPSG o WKT)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Codice EPSG di destinazione, es. 3857 (Web Mercator) o 4326 (WGS84)."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di ricampionamento: nearest (default), bilinear, cubic, lanczos, average, min, max, mode, median."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "reproject_vector": {
            "name": "Riproietta vettoriale",
            "description": "Riproietta le geometrie vettoriali nella proiezione EPSG di destinazione preservando la topologia e gli attributi, consentendo l'integrazione multisorgente.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Codice EPSG di destinazione."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "orthorectification": {
            "name": "Ortorettifica",
            "description": "Correzione geometrica basata su DEM di immagini grezze usando il modello di camera RPC. Rimuove lo spostamento dovuto al rilievo del terreno per ottenere in uscita un'ortoimmagine georeferenziata.",
            "params": {
              "input_raster": {
                "label": "Raster in ingresso",
                "description": "Percorso del raster dell'immagine grezza (non corretta) in ingresso. I metadati RPC devono essere incorporati nel file o presenti in un file ausiliario .RPB adiacente."
              },
              "input_dem": {
                "label": "DEM in ingresso",
                "description": "Raster DEM usato per ottenere l'elevazione del terreno per ogni pixel in uscita. Dovrebbe coprire l'intera estensione della scena. Se non è in coordinate geografiche, lo strumento riproietta secondo necessità."
              },
              "output_epsg": {
                "label": "EPSG di uscita",
                "description": "Codice EPSG del sistema di riferimento delle coordinate in uscita (default 4326 geografico; specificare un CRS proiettato come 32617 per la zona UTM 17N)."
              },
              "output_resolution": {
                "label": "Risoluzione di uscita",
                "description": "Risoluzione dei pixel in uscita nelle unità del CRS di uscita (es. gradi per geografico, metri per proiettato). Per impostazione predefinita il GSD approssimato dell'immagine in ingresso."
              },
              "resample_method": {
                "label": "Metodo di ricampionamento",
                "description": "Metodo di ricampionamento per l'uscita: nearest, bilinear (default), cubic."
              },
              "nodata_value": {
                "label": "Valore nodata",
                "description": "Valore nodata da assegnare ai pixel senza copertura sorgente valida (default uguale all'ingresso)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster dell'ortoimmagine in uscita."
              }
            }
          },
          "average_flowpath_slope": {
            "name": "Pendenza media del percorso di deflusso",
            "description": "Calcola la pendenza media dei percorsi di flusso che attraversano ciascuna cella del DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM senza depressioni in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "average_upslope_flowpath_length": {
            "name": "Lunghezza media del percorso di deflusso a monte",
            "description": "Calcola la lunghezza media dei percorsi di flusso a monte che attraversano ciascuna cella del DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM senza depressioni in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "d8_flow_accum": {
            "name": "Accumulo di deflusso D8",
            "description": "Calcola l'accumulo di flusso D8 da un DEM o da un raster puntatore D8.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster DEM o puntatore D8 in ingresso"
              },
              "clip": {
                "label": "Ritaglia",
                "description": "Massimo di ritaglio per la visualizzazione (accettato per compatibilità)"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Usa la codifica del puntatore ESRI per gli ingressi puntatore"
              },
              "input_is_pointer": {
                "label": "L'ingresso è un puntatore",
                "description": "Tratta l'ingresso come raster puntatore D8"
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica dell'uscita"
              },
              "out_type": {
                "label": "Tipo di uscita",
                "description": "Tipo di uscita: cells, ca o sca"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "d8_mass_flux": {
            "name": "Flusso di massa D8",
            "description": "Esegue un accumulo di flusso di massa basato su D8 usando raster di carico, efficienza e assorbimento.",
            "params": {
              "absorption": {
                "label": "Assorbimento",
                "description": "Raster delle perdite di massa per cella in unità di carico."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM senza depressioni in ingresso usato per derivare le direzioni di flusso D8."
              },
              "efficiency": {
                "label": "Efficienza",
                "description": "Raster dei valori di efficienza di trasferimento, in `[0, 1]` o in percentuale."
              },
              "loading": {
                "label": "Carico",
                "description": "Raster dei valori iniziali di carico di massa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "d8_pointer": {
            "name": "Puntatore D8",
            "description": "Direzione di flusso di massima pendenza sugli 8 vicini (N/NE/E/SE/S/SW/W/NW). Base per l'analisi idrologica D8 e la delimitazione dei bacini idrografici.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Usa la codifica del puntatore ESRI"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "dinf_flow_accum": {
            "name": "Accumulo di deflusso D-infinito",
            "description": "Calcola l'accumulo di flusso D-Infinity da un DEM o da un raster puntatore D-Infinity.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster DEM o puntatore D-infinito in ingresso"
              },
              "clip": {
                "label": "Ritaglia",
                "description": "Massimo di ritaglio per la visualizzazione (accettato per compatibilità)"
              },
              "convergence_threshold": {
                "label": "Soglia di convergenza",
                "description": "Soglia oltre la quale il flusso non viene disperso"
              },
              "input_is_pointer": {
                "label": "L'ingresso è un puntatore",
                "description": "Tratta l'ingresso come raster puntatore D-infinito"
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica dell'uscita"
              },
              "out_type": {
                "label": "Tipo di uscita",
                "description": "Tipo di uscita: cells, ca o sca"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "dinf_mass_flux": {
            "name": "Flusso di massa D-infinito",
            "description": "Esegue un accumulo di flusso di massa D-Infinity usando raster di carico, efficienza e assorbimento.",
            "params": {
              "absorption": {
                "label": "Assorbimento",
                "description": "Raster di assorbimento in ingresso in unità di carico."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "efficiency": {
                "label": "Efficienza",
                "description": "Raster di efficienza in ingresso (valori `0-1` o percentuali)."
              },
              "loading": {
                "label": "Carico",
                "description": "Raster di carico in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "dinf_pointer": {
            "name": "Puntatore D-infinito",
            "description": "Direzioni di flusso continue (0-2π radianti) che eliminano il bias diagonale del D8. Migliore per la modellazione del trasporto dei sedimenti e del flusso divergente.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "downslope_flowpath_length": {
            "name": "Lunghezza del percorso di deflusso a valle",
            "description": "Calcola la lunghezza del percorso di flusso verso valle da ciascuna cella fino a uno sbocco in un raster puntatore D8.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore D8 in ingresso"
              },
              "watersheds": {
                "label": "Bacini idrografici",
                "description": "Raster opzionale dei bacini idrografici"
              },
              "weights": {
                "label": "Pesi",
                "description": "Raster opzionale di ponderazione della distanza per cella"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Usa la codifica del puntatore ESRI"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "fd8_flow_accum": {
            "name": "Accumulo di deflusso FD8",
            "description": "Calcola l'accumulo di flusso FD8 da un DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso"
              },
              "clip": {
                "label": "Ritaglia",
                "description": "Massimo di ritaglio per la visualizzazione (accettato per compatibilità)"
              },
              "exponent": {
                "label": "Esponente",
                "description": "Esponente di ponderazione della pendenza"
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica dell'uscita"
              },
              "out_type": {
                "label": "Tipo di uscita",
                "description": "Tipo di uscita: cells, ca o sca"
              },
              "threshold": {
                "label": "Soglia",
                "description": "Soglia"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "fd8_pointer": {
            "name": "Puntatore FD8",
            "description": "Flusso frazionato verso più vicini a valle pesato in base al gradiente. Migliore del D8 per i processi dispersivi e diffusivi e per la conservazione della massa.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "flow_accum_full_workflow": {
            "name": "Flusso di lavoro completo di accumulo del deflusso",
            "description": "Esegue un flusso di lavoro completo di accumulo di flusso non divergente e restituisce il DEM sfondato, il puntatore della direzione di flusso e l'accumulo.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "clip": {
                "label": "Ritaglia",
                "description": "Se true, limita il massimo di visualizzazione dell'accumulo (comportamento di compatibilità)."
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Se true, codifica l'uscita della direzione di flusso in stile puntatore Esri."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Se true, applica la trasformazione logaritmica ai valori di accumulo."
              },
              "out_type": {
                "label": "Tipo di uscita",
                "description": "Uno tra `\"cells\"`, `\"ca\"`, `\"sca\"` (default)."
              },
              "breached_dem_output": {
                "label": "DEM con sfondamento in uscita",
                "description": "Percorso di uscita opzionale per il raster DEM senza depressioni."
              },
              "flow_dir_output": {
                "label": "Direzione di flusso in uscita",
                "description": "Percorso di uscita opzionale per il raster della direzione di flusso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il raster dell'accumulo di flusso."
              },
              "output_pointer": {
                "label": "Puntatore in uscita",
                "description": "Percorso di uscita opzionale per il puntatore della direzione di flusso D8 (alias di flow_dir_output; codificato ESRI quando esri_pntr è impostato)"
              }
            }
          },
          "flow_length_diff": {
            "name": "Differenza di lunghezza del deflusso",
            "description": "Calcola le differenze assolute massime locali della lunghezza del percorso verso valle da un raster puntatore D8.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore D8 in ingresso."
              },
              "weights": {
                "label": "Pesi",
                "description": "Pesi"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Se true, interpreta i valori del puntatore usando la codifica D8 ESRI."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "max_upslope_flowpath_length": {
            "name": "Lunghezza massima del percorso di deflusso a monte",
            "description": "Calcola la lunghezza massima dei percorsi di flusso a monte che attraversano ciascuna cella del DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM senza depressioni in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "max_upslope_value": {
            "name": "Valore massimo a monte",
            "description": "Propaga il valore massimo a monte lungo i percorsi di flusso D8 su un DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso"
              },
              "values": {
                "label": "Valori",
                "description": "Raster dei valori in ingresso"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "mdinf_flow_accum": {
            "name": "Accumulo di deflusso MD-infinito",
            "description": "Accumulo di flusso multiplo con ponderazione in base al gradiente della pendenza (esponente 1.1). Bilancia il realismo della dispersione con l'identificazione del flusso principale concentrato. Output: celle, CA o SCA.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "clip": {
                "label": "Ritaglia",
                "description": "Flag di compatibilità accettato dall'API."
              },
              "convergence_threshold": {
                "label": "Soglia di convergenza",
                "description": "Soglia oltre la quale il flusso non viene disperso"
              },
              "exponent": {
                "label": "Esponente",
                "description": "Esponente di ponderazione della pendenza (default `1.1`)."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica dell'uscita"
              },
              "out_type": {
                "label": "Tipo di uscita",
                "description": "Uno tra `\"cells\"`, `\"ca\"`, `\"sca\"` (default)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "minimal_dispersion_flow_algorithm": {
            "name": "Algoritmo di deflusso a dispersione minima",
            "description": "Genera raster MDFA di direzione di flusso e di accumulo di flusso da un DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso"
              },
              "clip": {
                "label": "Ritaglia",
                "description": "Flag di compatibilità accettato dall'API."
              },
              "debug_stats": {
                "label": "Statistiche di debug",
                "description": "Emette una riga di diagnostica MDFA (conteggi e massimo grezzo)"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Se true, codifica l'uscita della direzione di flusso in stile puntatore Esri."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Se true, applica la trasformazione logaritmica ai valori di accumulo."
              },
              "out_type": {
                "label": "Tipo di uscita",
                "description": "Uno tra `\"cells\"`, `\"ca\"`, `\"sca\"` (default)."
              },
              "path_corrected_direction_preference": {
                "label": "Preferenza di direzione con correzione del percorso",
                "description": "Parametro di preferenza `p` in `[0, 1]`; `1.0` è completamente non dispersivo."
              },
              "flow_dir_output": {
                "label": "Direzione di flusso in uscita",
                "description": "Percorso di uscita opzionale per il raster della direzione di flusso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il raster dell'accumulo di flusso."
              }
            }
          },
          "num_inflowing_neighbours": {
            "name": "Numero di vicini affluenti",
            "description": "Conta il numero di vicini D8 afferenti per ciascuna cella del DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "qin_flow_accumulation": {
            "name": "Accumulo di deflusso di Qin",
            "description": "Calcola l'accumulo di flusso MFD di Qin da un DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "clip": {
                "label": "Ritaglia",
                "description": "Flag di compatibilità accettato dall'API."
              },
              "convergence_threshold": {
                "label": "Soglia di convergenza",
                "description": "Soglia oltre la quale il flusso non viene disperso"
              },
              "exponent": {
                "label": "Esponente",
                "description": "Parametro dell'esponente del limite superiore (default `10.0`)."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica dell'uscita"
              },
              "max_slope": {
                "label": "Pendenza massima",
                "description": "Pendenza del limite superiore in gradi usata dalla funzione di esponente dinamico (default `45.0`)."
              },
              "out_type": {
                "label": "Tipo di uscita",
                "description": "Uno tra `\"cells\"`, `\"ca\"`, `\"sca\"` (default)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "quinn_flow_accumulation": {
            "name": "Accumulo di deflusso di Quinn",
            "description": "Calcola l'accumulo di flusso MFD di Quinn da un DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "clip": {
                "label": "Ritaglia",
                "description": "Flag di compatibilità accettato dall'API."
              },
              "convergence_threshold": {
                "label": "Soglia di convergenza",
                "description": "Soglia oltre la quale il flusso non viene disperso"
              },
              "exponent": {
                "label": "Esponente",
                "description": "Parametro dell'esponente (default `1.1`)."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica dell'uscita"
              },
              "out_type": {
                "label": "Tipo di uscita",
                "description": "Uno tra `\"cells\"`, `\"ca\"`, `\"sca\"` (default)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "rho8_flow_accum": {
            "name": "Accumulo di deflusso Rho8",
            "description": "Calcola l'accumulo di flusso Rho8 da un DEM o da un raster puntatore Rho8.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "clip": {
                "label": "Ritaglia",
                "description": "Massimo di ritaglio per la visualizzazione (accettato per compatibilità)"
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica dell'uscita"
              },
              "out_type": {
                "label": "Tipo di uscita",
                "description": "Tipo di uscita: cells, ca o sca"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "rho8_pointer": {
            "name": "Puntatore Rho8",
            "description": "Direzione di flusso singola stocastica pesata in base al gradiente della pendenza. Eseguire più volte per un'analisi di ensemble che riduce gli artefatti di canalizzazione del D8.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "trace_downslope_flowpaths": {
            "name": "Traccia i percorsi di deflusso a valle",
            "description": "Marca i percorsi di flusso D8 avviati dai punti seme fino all'assenza di flusso o al bordo della griglia.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore D8 in ingresso."
              },
              "seed_points": {
                "label": "Punti seme",
                "description": "Vettoriale puntuale in ingresso delle posizioni dei semi."
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Se true, interpreta i puntatori D8 con la codifica ESRI."
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Se true, lo sfondo è `0`; altrimenti lo sfondo è NoData."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "breach_depressions_least_cost": {
            "name": "Sfonda le depressioni a costo minimo",
            "description": "Sfonda le depressioni di un DEM usando una ricerca vincolata del percorso a costo minimo.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "fill_deps": {
                "label": "Riempi le depressioni",
                "description": "Se true, riempie le depressioni non risolte dopo lo sfondamento."
              },
              "flat_increment": {
                "label": "Incremento delle aree piatte",
                "description": "Incremento monotono di decremento opzionale."
              },
              "max_cost": {
                "label": "Costo massimo",
                "description": "Costo massimo di sfondamento consentito."
              },
              "max_dist": {
                "label": "Distanza massima",
                "description": "Distanza massima di ricerca in celle."
              },
              "minimize_dist": {
                "label": "Minimizza la distanza",
                "description": "Se true, pondera i costi di sfondamento per la distanza."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "breach_single_cell_pits": {
            "name": "Sfonda le fosse a cella singola",
            "description": "Sfonda le fosse a cella singola di un DEM incidendo canali larghi una cella.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è restituito in memoria quando supportato."
              }
            }
          },
          "burn_streams": {
            "name": "Incidi i corsi d'acqua",
            "description": "Incide una rete di corsi d'acqua in un DEM abbassando le elevazioni delle celle dei corsi d'acqua.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Vettoriale dei corsi d'acqua in ingresso."
              },
              "decrement_value": {
                "label": "Valore di decremento",
                "description": "Decremento di elevazione applicato alle celle dei corsi d'acqua (default 5.0)."
              },
              "gradient_distance": {
                "label": "Distanza del gradiente",
                "description": "Distanza del gradiente in celle della griglia (0 = solo decremento piatto; default 5)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del DEM inciso in uscita."
              }
            }
          },
          "burn_streams_at_roads": {
            "name": "Incidi i corsi d'acqua alle strade",
            "description": "Abbassa le elevazioni dei corsi d'acqua vicino agli attraversamenti corso d'acqua-strada per sfondare i rilevati stradali in un DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "roads": {
                "label": "Strade",
                "description": "Layer vettoriale delle strade."
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Layer vettoriale dei corsi d'acqua."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo"
              },
              "road_width": {
                "label": "Larghezza delle strade",
                "description": "Larghezza massima del rilevato in unità di mappa usata per impostare l'estensione dell'incisione lungo il corso d'acqua."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "depth_in_sink": {
            "name": "Profondità nella depressione",
            "description": "Misura la profondità a cui ciascuna cella del DEM si trova al di sotto di una superficie con depressioni riempite.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Se true, assegna `0.0` alle celle fuori dai pozzi; altrimenti assegna NoData."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "fill_burn": {
            "name": "Riempi e incidi",
            "description": "Impone la coerenza idrologica a un DEM incidendo i corsi d'acqua e riempiendo poi le depressioni.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Layer vettoriale dei corsi d'acqua in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "fill_depressions": {
            "name": "Riempi le depressioni",
            "description": "Riempie le depressioni di un DEM usando una strategia priority-flood con risoluzione delle aree piatte di Garbrecht-Martz per impostazione predefinita e risoluzione opzionale legacy delle aree piatte a percorso naturale.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "fix_flats": {
                "label": "Correggi le aree piatte",
                "description": "Se true, impone un piccolo gradiente sulle aree piatte riempite."
              },
              "flat_increment": {
                "label": "Incremento delle aree piatte",
                "description": "Incremento delle aree piatte (default `0.0001`)."
              },
              "flat_resolution": {
                "label": "Risoluzione delle aree piatte",
                "description": "Modalità di risoluzione delle aree piatte. Uno tra `\"garbrecht_martz\"` o `\"natural\"`."
              },
              "max_depth": {
                "label": "Profondità massima",
                "description": "Profondità massima di riempimento consentita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "fill_depressions_planchon_and_darboux": {
            "name": "Riempi le depressioni (Planchon e Darboux)",
            "description": "Riempie le depressioni di un DEM con un'interfaccia compatibile con Planchon e Darboux.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "fix_flats": {
                "label": "Correggi le aree piatte",
                "description": "Se true, impone un piccolo gradiente sulle aree piatte riempite."
              },
              "flat_increment": {
                "label": "Incremento delle aree piatte",
                "description": "Incremento delle aree piatte (default `0.0001`)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "fill_depressions_wang_and_liu": {
            "name": "Riempi le depressioni (Wang e Liu)",
            "description": "Riempie le depressioni di un DEM con un'interfaccia compatibile con Wang e Liu.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "fix_flats": {
                "label": "Correggi le aree piatte",
                "description": "Se true, impone un piccolo gradiente sulle aree piatte riempite."
              },
              "flat_increment": {
                "label": "Incremento delle aree piatte",
                "description": "Incremento delle aree piatte (default `0.0001`)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "fill_pits": {
            "name": "Riempi le fosse",
            "description": "Riempie le fosse a cella singola di un DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è restituito in memoria quando supportato."
              }
            }
          },
          "flatten_lakes": {
            "name": "Appiattisci i laghi",
            "description": "Appiattisce le elevazioni dei laghi usando l'elevazione minima del perimetro di ciascun poligono.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "lakes": {
                "label": "Laghi",
                "description": "Vettoriale poligonale in ingresso delle geometrie dei laghi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "impoundment_size_index": {
            "name": "Indice di dimensione dell'invaso",
            "description": "Calcola metriche dell'invaso: profondità media/massima, volume, area e altezza della diga.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "max_dam_length": {
                "label": "Lunghezza massima della diga",
                "description": "Lunghezza massima della diga in unità di mappa."
              },
              "output_area": {
                "label": "Area in uscita",
                "description": "Includi il raster dell'area allagata nella tupla di uscita."
              },
              "output_height": {
                "label": "Altezza in uscita",
                "description": "Includi il raster dell'altezza della diga nella tupla di uscita."
              },
              "output_max": {
                "label": "Massimo in uscita",
                "description": "Includi il raster della profondità massima di allagamento nella tupla di uscita."
              },
              "output_mean": {
                "label": "Media in uscita",
                "description": "Includi il raster della profondità media di allagamento nella tupla di uscita."
              },
              "output_volume": {
                "label": "Volume in uscita",
                "description": "Includi il raster del volume allagato nella tupla di uscita."
              },
              "out_area": {
                "label": "Area in uscita",
                "description": "Percorso di uscita opzionale per il raster dell'area"
              },
              "out_dam_height": {
                "label": "Altezza della diga in uscita",
                "description": "Percorso di uscita opzionale per il raster dell'altezza della diga"
              },
              "out_max": {
                "label": "Massimo in uscita",
                "description": "Percorso di uscita opzionale per il raster della profondità massima"
              },
              "out_mean": {
                "label": "Media in uscita",
                "description": "Percorso di uscita opzionale per il raster della profondità media"
              },
              "out_volume": {
                "label": "Volume in uscita",
                "description": "Percorso di uscita opzionale per il raster del volume"
              }
            }
          },
          "insert_dams": {
            "name": "Inserisci dighe",
            "description": "Aggiunge rilevati di sbarramento locali nei punti specificati usando una selezione del coronamento basata sul profilo.",
            "params": {
              "dam_points": {
                "label": "Punti diga",
                "description": "Vettoriale puntuale in ingresso delle posizioni delle dighe."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "dam_length": {
                "label": "Lunghezza della diga",
                "description": "Lunghezza massima della diga in unità di mappa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "raise_walls": {
            "name": "Innalza argini",
            "description": "Innalza le elevazioni del DEM lungo vettoriali di muri e, facoltativamente, sfonda gli attraversamenti selezionati.",
            "params": {
              "breach_lines": {
                "label": "Linee di sfondamento",
                "description": "Vettoriale opzionale che definisce le posizioni di sfondamento."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "walls": {
                "label": "Muri",
                "description": "Vettoriale lineare o poligonale in ingresso che definisce i segmenti di muro."
              },
              "wall_height": {
                "label": "Altezza dei muri",
                "description": "Incremento di elevazione applicato alle celle dei muri."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "sink": {
            "name": "Depressione",
            "description": "Identifica le celle che appartengono a depressioni topografiche in un DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Se true, assegna `0.0` alle celle fuori dai pozzi; altrimenti assegna NoData."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "stochastic_depression_analysis": {
            "name": "Analisi stocastica delle depressioni",
            "description": "Esegue perturbazioni Monte Carlo del DEM e stima la probabilità di appartenenza alle depressioni.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "iterations": {
                "label": "Iterazioni",
                "description": "Numero di iterazioni Monte Carlo."
              },
              "range": {
                "label": "Intervallo",
                "description": "Intervallo di autocorrelazione dell'errore in unità di mappa."
              },
              "rmse": {
                "label": "RMSE",
                "description": "RMSE dell'elevazione usato per la perturbazione gaussiana."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "topological_breach_burn": {
            "name": "Sfondamento e incisione topologici",
            "description": "Incide i corsi d'acqua in un DEM, condiziona la superficie e restituisce i raster dei corsi d'acqua, del DEM, del puntatore e dell'accumulo.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Vettoriale della rete dei corsi d'acqua in ingresso."
              },
              "snap_distance": {
                "label": "Distanza di aggancio",
                "description": "Distanza di aggancio opzionale dei corsi d'acqua usata nel ridimensionamento della profondità di incisione."
              },
              "out_dem": {
                "label": "DEM in uscita",
                "description": "Percorso di uscita opzionale per il DEM inciso/condizionato."
              },
              "out_dir": {
                "label": "Direzione in uscita",
                "description": "Percorso di uscita opzionale per il raster puntatore D8."
              },
              "out_fa": {
                "label": "Accumulo di flusso in uscita",
                "description": "Percorso di uscita opzionale per il raster dell'accumulo di flusso."
              },
              "out_streams": {
                "label": "Corsi d'acqua in uscita",
                "description": "Percorso di uscita opzionale per i corsi d'acqua rasterizzati."
              }
            }
          },
          "upslope_depression_storage": {
            "name": "Invaso nelle depressioni a monte",
            "description": "Mappa la profondità media di invaso delle depressioni a monte instradando la profondità delle depressioni su un DEM condizionato.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "basins": {
            "name": "Bacini",
            "description": "Delimita tutti i bacini di drenaggio D8 che drenano verso i bordi con dati validi.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore D8 in ingresso."
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Se true, interpreta i valori del puntatore usando la codifica D8 ESRI."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "flood_order": {
            "name": "Ordine di allagamento",
            "description": "Produce in uscita l'ordine sequenziale priority-flood per ciascuna cella del DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "hillslopes": {
            "name": "Versanti",
            "description": "Identifica le regioni di versante che drenano verso ciascun tratto fluviale, separando le aree in sponda sinistra e destra.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore D8."
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Raster della rete dei corsi d'acqua in cui le celle dei corsi d'acqua hanno valore > 0 e non sono NoData."
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Flag di codifica del puntatore ESRI."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "isobasins": {
            "name": "Isobacini",
            "description": "Suddivide un paesaggio in bacini idrografici di dimensioni approssimativamente uguali (isobacini) in base a una soglia di area obiettivo.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM idrologicamente condizionato in ingresso."
              },
              "target_size": {
                "label": "Dimensione obiettivo",
                "description": "Area obiettivo degli isobacini in numero di celle della griglia (intero o decimale positivo)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "jenson_snap_pour_points": {
            "name": "Aggancia i punti di scarico (Jenson)",
            "description": "Aggancia ciascun punto di scarico alla cella del corso d'acqua più vicina entro una distanza di ricerca, preservando tutti gli attributi in ingresso.",
            "params": {
              "pour_pts": {
                "label": "Punti di chiusura",
                "description": "File vettoriale in ingresso dei punti di chiusura (geometrie puntuali o multipunto)."
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Raster della rete dei corsi d'acqua in ingresso in cui le celle dei corsi d'acqua hanno valore > 0 e non sono NoData."
              },
              "snap_dist": {
                "label": "Distanza di aggancio",
                "description": "Raggio massimo di ricerca in unità di mappa. Per impostazione predefinita la larghezza di una cella quando omesso o pari a zero."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita per il file vettoriale dei punti di chiusura agganciati (obbligatorio; per impostazione predefinita `snapped_pour_points.geojson` nella cartella di lavoro quando non fornito al wrapper)."
              }
            }
          },
          "longest_flowpath": {
            "name": "Percorso di deflusso più lungo",
            "description": "Delimita le linee del percorso di flusso più lungo per ciascun bacino in un raster dei bacini.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso"
              },
              "basins": {
                "label": "Bacini",
                "description": "Raster dei bacini in ingresso"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita"
              }
            }
          },
          "max_branch_length": {
            "name": "Lunghezza massima del ramo",
            "description": "Calcola la lunghezza massima dei rami tra percorsi di flusso D8 vicini, utile per evidenziare gli spartiacque.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Applica la trasformazione in logaritmo naturale alle uscite positive."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "snap_pour_points": {
            "name": "Aggancia i punti di scarico",
            "description": "Aggancia i punti di scarico alla cella con il massimo accumulo di flusso entro una distanza di ricerca.",
            "params": {
              "flow_accum": {
                "label": "Accumulo di flusso",
                "description": "Raster dell'accumulo di flusso in ingresso."
              },
              "pour_pts": {
                "label": "Punti di chiusura",
                "description": "File vettoriale in ingresso dei punti di chiusura (geometrie puntuali o multipunto)."
              },
              "snap_dist": {
                "label": "Distanza di aggancio",
                "description": "Raggio massimo di ricerca in unità di mappa. Per impostazione predefinita la larghezza di una cella quando omesso o pari a zero."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita per il file vettoriale dei punti di chiusura agganciati (obbligatorio; per impostazione predefinita `snapped_pour_points.geojson` nella cartella di lavoro quando non fornito al wrapper)."
              }
            }
          },
          "subbasins": {
            "name": "Sottobacini",
            "description": "Identifica l'area di drenaggio di ciascun tratto fluviale (sottobacini) in una rete di corsi d'acqua D8.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore D8 prodotto da `d8_pointer`."
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Raster della rete dei corsi d'acqua in cui le celle dei corsi d'acqua hanno valore > 0 e non sono NoData."
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Se true, interpreta i valori del puntatore usando la codifica ESRI. Default `False`."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "unnest_basins": {
            "name": "Separa i bacini annidati",
            "description": "Crea un raster dei bacini per ciascun livello di annidamento dei punti di scarico da una griglia puntatore D8.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore D8 in ingresso"
              },
              "pour_points": {
                "label": "Punti di chiusura",
                "description": "Vettoriale dei punti di chiusura in ingresso"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Interpreta i puntatori in stile ESRI"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di base opzionale in uscita per i raster numerati"
              }
            }
          },
          "watershed": {
            "name": "Bacino idrografico",
            "description": "Delimita i bacini idrografici da un puntatore D8 e da punti di scarico vettoriali.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore D8 in ingresso."
              },
              "pour_pts": {
                "label": "Punti di chiusura",
                "description": "File vettoriale in ingresso dei punti di chiusura (geometrie puntuali o multipunto)."
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Se true, interpreta i valori del puntatore usando la codifica D8 ESRI."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "watershed_from_raster_pour_points": {
            "name": "Bacino da punti di scarico raster",
            "description": "Delimita i bacini idrografici da un puntatore D8 e da un raster degli ID degli sbocchi dei punti di scarico.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore D8 in ingresso."
              },
              "pour_points": {
                "label": "Punti di chiusura",
                "description": "Raster dei punti di chiusura; i valori delle celle non zero e non NoData diventano ID degli sbocchi."
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Se true, interpreta i valori del puntatore usando la codifica D8 ESRI."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "depth_to_water": {
            "name": "Profondità della falda",
            "description": "Calcola la profondità cartografica della falda usando un accumulo a costo minimo a partire da elementi sorgente di corsi d'acqua/laghi.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "stream_raster": {
                "label": "Raster dei corsi d'acqua",
                "description": "Raster dei corsi d'acqua"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "distance_to_outlet": {
            "name": "Distanza dallo sbocco",
            "description": "Calcola la distanza verso valle fino allo sbocco per ciascuna cella del corso d'acqua.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Sfondo a zero"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "downslope_distance_to_stream": {
            "name": "Distanza a valle fino al corso d'acqua",
            "description": "Calcola la distanza verso valle da ciascuna cella del DEM al corso d'acqua più vicino lungo i percorsi di flusso.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM senza depressioni in ingresso."
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Raster dei corsi d'acqua in ingresso; le celle dei corsi d'acqua hanno valori `> 0` e non sono NoData."
              },
              "dinf": {
                "label": "D-infinito",
                "description": "Se true, usa l'instradamento D-infinito; altrimenti usa l'instradamento D8."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "downslope_index": {
            "name": "Indice a valle",
            "description": "Calcola l'indice di valle di Hjerdt et al. (2004) usando le direzioni di flusso D8.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "output_type": {
                "label": "Tipo di uscita",
                "description": "Metrica di uscita: tangent, degrees, radians, distance (default tangent)."
              },
              "vertical_drop": {
                "label": "Dislivello",
                "description": "Soglia di dislivello d per l'attraversamento verso valle."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "edge_contamination": {
            "name": "Contaminazione dei bordi",
            "description": "Identifica le celle del DEM la cui area a monte si estende oltre il bordo del DEM per gli schemi comuni di instradamento del flusso.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM senza depressioni in ingresso."
              },
              "flow_type": {
                "label": "Tipo di flusso",
                "description": "Metodo di instradamento da usare: uno tra `\"d8\"`, `\"mfd\"`/`\"fd8\"` o `\"dinf\"`."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di scala verticale opzionale. I valori `<= 0` sono trattati come `1.0`."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "elev_relative_to_watershed_min_max": {
            "name": "Quota relativa al min-max del bacino",
            "description": "Calcola la posizione di elevazione relativa di una cella del DEM all'interno di ciascun bacino idrografico, come percentuale.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "watersheds": {
                "label": "Bacini idrografici",
                "description": "Percorso del raster degli ID dei bacini idrografici o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "elevation_above_stream": {
            "name": "Quota sul corso d'acqua",
            "description": "Calcola l'elevazione sopra il corso d'acqua più vicino misurata lungo i percorsi di flusso verso valle.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM senza depressioni in ingresso."
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Raster dei corsi d'acqua in ingresso; le celle dei corsi d'acqua hanno valori `> 0` e non sono NoData."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "elevation_above_stream_euclidean": {
            "name": "Quota sul corso d'acqua (euclidea)",
            "description": "Calcola l'elevazione sopra il corso d'acqua più vicino usando la prossimità in linea retta (euclidea).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Raster dei corsi d'acqua in ingresso; le celle dei corsi d'acqua hanno valori `> 0` e non sono NoData."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "find_noflow_cells": {
            "name": "Trova celle senza deflusso",
            "description": "Trova le celle del DEM che non hanno alcun vicino D8 più basso.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "interior_only": {
                "label": "Solo interno",
                "description": "Se true, segnala solo le vere celle interne senza flusso (escludendo gli sbocchi sul bordo del raster e adiacenti a NoData)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "find_parallel_flow": {
            "name": "Trova deflusso parallelo",
            "description": "Identifica le celle dei corsi d'acqua che hanno direzioni di flusso D8 parallele.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore D8 in ingresso."
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "hydrologic_connectivity": {
            "name": "Connettività idrologica",
            "description": "Calcola gli indici di connettività DUL e UDSA da un DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "convergence_threshold": {
                "label": "Soglia di convergenza",
                "description": "Soglia opzionale di inizio dei corsi d'acqua in celle contribuenti."
              },
              "exponent": {
                "label": "Esponente",
                "description": "Parametro di compatibilità per il controllo della dispersione."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di scala verticale opzionale."
              },
              "output1": {
                "label": "Uscita 1",
                "description": "Percorso di uscita opzionale per il raster DUL."
              },
              "output2": {
                "label": "Uscita 2",
                "description": "Percorso di uscita opzionale per il raster UDSA."
              }
            }
          },
          "relative_stream_power_index": {
            "name": "Indice di potenza relativa del corso d'acqua",
            "description": "Calcola l'indice relativo di potenza della corrente dall'area di drenaggio specifica e dalla pendenza.",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Percorso del raster dell'area di drenaggio specifica o oggetto raster tipizzato."
              },
              "slope": {
                "label": "Pendenza",
                "description": "Raster della pendenza in gradi."
              },
              "exponent": {
                "label": "Esponente",
                "description": "Esponente p dell'area di drenaggio specifica (default 1.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "sediment_transport_index": {
            "name": "Indice di trasporto solido",
            "description": "Calcola l'indice di trasporto dei sedimenti (fattore LS) dall'area di drenaggio specifica e dalla pendenza.",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Percorso del raster dell'area di drenaggio specifica o oggetto raster tipizzato."
              },
              "slope": {
                "label": "Pendenza",
                "description": "Raster della pendenza in gradi."
              },
              "sca_exponent": {
                "label": "Esponente SCA",
                "description": "Esponente n dell'area di drenaggio specifica (default 0.4)."
              },
              "slope_exponent": {
                "label": "Esponente della pendenza",
                "description": "Esponente m della pendenza (default 1.3)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "wetness_index": {
            "name": "Indice di umidità",
            "description": "Calcola l'indice topografico di umidità ln(SCA / tan(slope)).",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Percorso del raster dell'area di drenaggio specifica o oggetto raster tipizzato."
              },
              "slope": {
                "label": "Pendenza",
                "description": "Raster della pendenza in gradi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "extract_streams": {
            "name": "Estrai i corsi d'acqua",
            "description": "Estrae i corsi d'acqua in base a una soglia di accumulo di flusso.",
            "params": {
              "flow_accumulation": {
                "label": "Accumulo di flusso",
                "description": "Raster dell'accumulo di flusso in ingresso."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Valore minimo di accumulo richiesto per far parte di un canale."
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Se true, lo sfondo non fluviale è 0 invece di NoData."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster dei corsi d'acqua in uscita."
              }
            }
          },
          "extract_valleys": {
            "name": "Estrai le valli",
            "description": "Estrae le valli da un DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "filter_size": {
                "label": "Dimensione del filtro",
                "description": "Dimensione del filtro"
              },
              "line_thin": {
                "label": "Assottigliamento delle linee",
                "description": "Assottigliamento delle linee"
              },
              "variant": {
                "label": "Variante",
                "description": "Variante"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "prune_vector_streams": {
            "name": "Pota i corsi d'acqua vettoriali",
            "description": "Pota la rete vettoriale dei corsi d'acqua in base alla magnitudo di Shreve.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso usato per determinare la direzione di flusso"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Rete vettoriale dei corsi d'acqua in ingresso"
              },
              "max_ridge_cutting_height": {
                "label": "Altezza massima di taglio dei crinali",
                "description": "Aumento massimo di elevazione consentito nel collegamento dei tratti a valle"
              },
              "snap_distance": {
                "label": "Distanza di aggancio",
                "description": "Distanza massima di aggancio per la connettività delle estremità"
              },
              "threshold": {
                "label": "Soglia",
                "description": "Magnitudine di Shreve minima da mantenere"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita"
              }
            }
          },
          "raster_streams_to_vector": {
            "name": "Da corsi d'acqua raster a vettoriale",
            "description": "Converte la rete raster dei corsi d'acqua in vettoriale.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "streams_raster": {
                "label": "Raster dei corsi d'acqua",
                "description": "Raster dei corsi d'acqua"
              },
              "all_vertices": {
                "label": "Tutti i vertici",
                "description": "Tutti i vertici"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "rasterize_streams": {
            "name": "Rasterizza i corsi d'acqua",
            "description": "Rasterizza la rete vettoriale dei corsi d'acqua.",
            "params": {
              "input_vector": {
                "label": "Vettoriale in ingresso",
                "description": "Vettoriale in ingresso"
              },
              "reference_raster": {
                "label": "Raster di riferimento",
                "description": "Raster di riferimento"
              },
              "use_feature_id": {
                "label": "Usa l'ID della geometria",
                "description": "Usa l'ID della geometria"
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Sfondo a zero"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "remove_short_streams": {
            "name": "Rimuovi i corsi d'acqua brevi",
            "description": "Rimuove i tratti fluviali più corti della lunghezza minima.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "min_length": {
                "label": "Lunghezza minima",
                "description": "Lunghezza minima"
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Sfondo a zero"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "repair_stream_vector_topology": {
            "name": "Ripara la topologia vettoriale dei corsi d'acqua",
            "description": "Ripara la topologia della rete vettoriale dei corsi d'acqua.",
            "params": {
              "input_vector": {
                "label": "Vettoriale in ingresso",
                "description": "Vettoriale in ingresso"
              },
              "snap": {
                "label": "Aggancia",
                "description": "Aggancia"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "river_centerlines": {
            "name": "Assi fluviali",
            "description": "Estrae le linee d'asse dei fiumi da un raster dell'acqua usando l'asse mediano.",
            "params": {
              "raster": {
                "label": "Raster",
                "description": "Raster binario acqua/non acqua"
              },
              "min_length": {
                "label": "Lunghezza minima",
                "description": "Lunghezza minima della linea centrale in celle raster"
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio di ricerca (celle) usato per collegare le estremità vicine"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale delle linee centrali in uscita"
              }
            }
          },
          "farthest_channel_head": {
            "name": "Testata di canale più lontana",
            "description": "Calcola la distanza dalla testata di canale più distante.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Sfondo a zero"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "find_main_stem": {
            "name": "Trova l'asta principale",
            "description": "Identifica l'asta principale della rete dei corsi d'acqua.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Sfondo a zero"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "length_of_upstream_channels": {
            "name": "Lunghezza dei canali a monte",
            "description": "Calcola la lunghezza totale dei canali a monte.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Sfondo a zero"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "long_profile": {
            "name": "Profilo longitudinale",
            "description": "Crea il profilo longitudinale di un corso d'acqua.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "streams_raster": {
                "label": "Raster dei corsi d'acqua",
                "description": "Raster dei corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "long_profile_from_points": {
            "name": "Profilo longitudinale da punti",
            "description": "Crea un profilo longitudinale da punti vettoriali.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "points": {
                "label": "Punti",
                "description": "Punti"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "hack_stream_order": {
            "name": "Ordine gerarchico di Hack",
            "description": "Assegna l'ordine gerarchico di Hack alle celle dei corsi d'acqua.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Raster dei corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Usa il puntatore in stile ESRI"
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Assegna zero allo sfondo"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "horton_ratios": {
            "name": "Rapporti di Horton",
            "description": "Calcola i rapporti di biforcazione, lunghezza, area di drenaggio e pendenza di Horton.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "streams_raster": {
                "label": "Raster dei corsi d'acqua",
                "description": "Raster binario dei corsi d'acqua (positivo = corso d'acqua)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del rapporto di testo in uscita (opzionale)."
              }
            }
          },
          "horton_stream_order": {
            "name": "Ordine gerarchico di Horton",
            "description": "Assegna l'ordine gerarchico di Horton alle celle dei corsi d'acqua.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Raster dei corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Usa il puntatore in stile ESRI"
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Assegna zero allo sfondo"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "shreve_stream_magnitude": {
            "name": "Magnitudine di Shreve",
            "description": "Calcola la magnitudo dei corsi d'acqua di Shreve.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Raster dei corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Usa il puntatore in stile ESRI"
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Assegna zero allo sfondo"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "strahler_order_basins": {
            "name": "Bacini per ordine di Strahler",
            "description": "Delimita i bacini idrografici etichettati in base all'ordine di Horton-Strahler del tratto fluviale che li drena.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore D8."
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Raster della rete dei corsi d'acqua in cui le celle dei corsi d'acqua hanno valore > 0 e non sono NoData."
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Flag di codifica del puntatore ESRI."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "strahler_stream_order": {
            "name": "Ordine gerarchico di Strahler",
            "description": "Assegna l'ordine gerarchico di Strahler alle celle dei corsi d'acqua.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Raster dei corsi d'acqua (valori positivi = celle dei corsi d'acqua)"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Usa i valori del puntatore in stile ESRI (default: Whitebox)"
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Assegna zero allo sfondo invece di NoData"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "stream_link_class": {
            "name": "Classe del tratto fluviale",
            "description": "Classifica i tratti fluviali come interni, esterni o sorgenti.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Sfondo a zero"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "stream_link_identifier": {
            "name": "Identificativo del tratto fluviale",
            "description": "Assegna un ID univoco a ciascun tratto fluviale.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Sfondo a zero"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "stream_link_length": {
            "name": "Lunghezza del tratto fluviale",
            "description": "Calcola la lunghezza totale di ciascun tratto fluviale.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "linkid": {
                "label": "ID collegamento",
                "description": "ID collegamento"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "stream_link_slope": {
            "name": "Pendenza del tratto fluviale",
            "description": "Calcola la pendenza media di ciascun tratto fluviale.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "linkid": {
                "label": "ID collegamento",
                "description": "ID collegamento"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "stream_slope_continuous": {
            "name": "Pendenza continua del corso d'acqua",
            "description": "Calcola il valore di pendenza per ciascuna cella del corso d'acqua.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Sfondo a zero"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "topological_stream_order": {
            "name": "Ordine topologico dei corsi d'acqua",
            "description": "Assegna l'ordine topologico dei corsi d'acqua in base al numero di tratti.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Sfondo a zero"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "tributary_identifier": {
            "name": "Identificativo degli affluenti",
            "description": "Assegna un ID univoco a ciascun affluente.",
            "params": {
              "d8_pntr": {
                "label": "Puntatore D8",
                "description": "Raster puntatore di flusso D8"
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Corsi d'acqua"
              },
              "esri_pntr": {
                "label": "Puntatore ESRI",
                "description": "Puntatore ESRI"
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Sfondo a zero"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "vector_stream_network_analysis": {
            "name": "Analisi della rete idrografica vettoriale",
            "description": "Analisi completa della rete vettoriale dei corsi d'acqua.",
            "params": {
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Layer vettoriale della rete dei corsi d'acqua in ingresso."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster di elevazione in ingresso (DEM)."
              },
              "max_ridge_cutting_height": {
                "label": "Altezza massima di taglio dei crinali",
                "description": "Altezza massima consentita di taglio dei crinali."
              },
              "snap_distance": {
                "label": "Distanza di aggancio",
                "description": "Tolleranza di distanza di aggancio per la pulizia della rete."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita."
              }
            }
          },
          "add_point_coordinates_to_table": {
            "name": "Aggiungi coordinate dei punti alla tabella",
            "description": "Copia un layer puntuale e aggiunge i campi attributo XCOORD e YCOORD.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale puntuale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita. Se omesso, un percorso GeoJSON è derivato accanto all'ingresso."
              }
            }
          },
          "clean_vector": {
            "name": "Pulisci vettoriale",
            "description": "Rimuove le geometrie vettoriali nulle e non valide (ad es. linee/poligoni sottodimensionati) preservando gli elementi validi e gli attributi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita. Se omesso, un percorso GeoJSON è derivato accanto all'ingresso."
              }
            }
          },
          "csv_points_to_vector": {
            "name": "Da punti CSV a vettoriale",
            "description": "Importa record puntuali da un file CSV in un layer vettoriale puntuale.",
            "params": {
              "input_file": {
                "label": "File in ingresso",
                "description": "Percorso del file CSV in ingresso."
              },
              "x_field_num": {
                "label": "Numero del campo X",
                "description": "Indice a base zero del campo della coordinata X. Per impostazione predefinita 0."
              },
              "y_field_num": {
                "label": "Numero del campo Y",
                "description": "Indice a base zero del campo della coordinata Y. Per impostazione predefinita 1."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Codice EPSG opzionale per il CRS di uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "export_table_to_csv": {
            "name": "Esporta tabella in CSV",
            "description": "Esporta una tabella degli attributi vettoriale in un file CSV.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale in ingresso."
              },
              "output_csv_file": {
                "label": "File CSV in uscita",
                "description": "Percorso del file CSV in uscita."
              },
              "headers": {
                "label": "Intestazioni",
                "description": "Includi la riga di intestazione nell'uscita. Per impostazione predefinita true."
              }
            }
          },
          "join_tables": {
            "name": "Unisci tabelle",
            "description": "Unisce gli attributi di una tabella vettoriale esterna a una tabella vettoriale primaria usando campi chiave.",
            "params": {
              "primary_vector": {
                "label": "Vettoriale primario",
                "description": "Percorso del vettoriale primario che riceve i campi uniti."
              },
              "primary_key_field": {
                "label": "Campo chiave primaria",
                "description": "Campo chiave primaria nel vettoriale primario."
              },
              "foreign_vector": {
                "label": "Vettoriale esterno",
                "description": "Percorso del vettoriale esterno contenente i campi sorgente."
              },
              "foreign_key_field": {
                "label": "Campo chiave esterna",
                "description": "Campo chiave esterna nel vettoriale esterno."
              },
              "import_field": {
                "label": "Campo da importare",
                "description": "Singolo campo opzionale da importare; per impostazione predefinita tutti i campi non chiave e non FID."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita. Per impostazione predefinita un percorso GeoJSON derivato accanto all'ingresso primario."
              }
            }
          },
          "merge_table_with_csv": {
            "name": "Unisci tabella con CSV",
            "description": "Unisce gli attributi di una tabella CSV a una tabella degli attributi vettoriale tramite campi chiave.",
            "params": {
              "primary_vector": {
                "label": "Vettoriale primario",
                "description": "Percorso del vettoriale primario che riceve i campi fusi."
              },
              "primary_key_field": {
                "label": "Campo chiave primaria",
                "description": "Campo chiave primaria nel vettoriale primario."
              },
              "foreign_csv_filename": {
                "label": "Nome del file CSV esterno",
                "description": "File CSV contenente la tabella esterna."
              },
              "foreign_key_field": {
                "label": "Campo chiave esterna",
                "description": "Nome del campo chiave esterna nell'intestazione del CSV."
              },
              "import_field": {
                "label": "Campo da importare",
                "description": "Singolo campo CSV opzionale da importare; per impostazione predefinita tutti i campi non chiave."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita. Per impostazione predefinita un percorso GeoJSON derivato accanto all'ingresso primario."
              }
            }
          },
          "merge_vectors": {
            "name": "Unisci vettoriali",
            "description": "Combina due o più vettoriali in ingresso dello stesso tipo di geometria in un unico vettoriale in uscita.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di percorsi vettoriali in ingresso (almeno due richiesti)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "reinitialize_attribute_table": {
            "name": "Reinizializza la tabella degli attributi",
            "description": "Crea una copia di un layer vettoriale con il solo attributo FID rigenerato.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita. Se omesso, sovrascrive il percorso in ingresso."
              }
            }
          },
          "vector_summary_statistics": {
            "name": "Statistiche riassuntive vettoriali",
            "description": "Calcola conteggio, somma, media, min, max e deviazione standard per gruppo categoriale ed esporta in CSV.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "group_field": {
                "label": "Campo di raggruppamento",
                "description": "Nome del campo di raggruppamento."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Nome del campo dei valori numerici."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV in uscita."
              }
            }
          },
          "fix_dangling_arcs": {
            "name": "Correggi archi pendenti",
            "description": "Corregge gli archi liberi troppo corti e troppo lunghi in una rete lineare agganciando le estremità delle linee entro una distanza di soglia.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale polilineare in ingresso."
              },
              "snap": {
                "label": "Aggancia",
                "description": "Soglia di distanza di aggancio in unità di mappa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita. Se omesso, un percorso GeoJSON è derivato accanto all'ingresso."
              }
            }
          },
          "lines_to_polygons": {
            "name": "Da linee a poligoni",
            "description": "Converte gli elementi polilineari in elementi poligonali, trattando la prima parte come anello esterno e le parti successive come fori.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale polilineare in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita. Se omesso, un percorso GeoJSON è derivato accanto all'ingresso."
              }
            }
          },
          "multipart_to_singlepart": {
            "name": "Da multiparte a parte singola",
            "description": "Converte un vettoriale contenente elementi multiparte in uno con soli elementi a parte singola.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale in ingresso (polilinea, poligono o multipunto)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita. Per impostazione predefinita un GeoJSON con timestamp accanto all'ingresso."
              },
              "exclude_holes": {
                "label": "Escludi i buchi",
                "description": "Se true, i buchi dei poligoni restano collegati al loro anello esterno (default: false)."
              }
            }
          },
          "polygons_to_lines": {
            "name": "Da poligoni a linee",
            "description": "Converte gli elementi poligonali e multipoligonali in linee che ne tracciano i confini.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare in uscita. Se omesso, un percorso GeoJSON è derivato accanto all'ingresso."
              }
            }
          },
          "remove_polygon_holes": {
            "name": "Rimuovi i fori dei poligoni",
            "description": "Rimuove gli anelli interni dagli elementi poligonali preservando gli attributi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita. Se omesso, un percorso GeoJSON è derivato accanto all'ingresso."
              }
            }
          },
          "singlepart_to_multipart": {
            "name": "Da parte singola a multiparte",
            "description": "Unisce gli elementi a parte singola in elementi multiparte, raggruppati in base a un campo categoriale opzionale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita. Per impostazione predefinita un GeoJSON con timestamp accanto all'ingresso."
              },
              "field": {
                "label": "Campo",
                "description": "Nome opzionale del campo attributo per raggruppare le geometrie. Se omesso, tutte le geometrie vengono fuse in un'unica geometria."
              }
            }
          },
          "topology_rule_autofix": {
            "name": "Correzione automatica delle regole topologiche",
            "description": "Applica automaticamente correzioni sicure e verificabili alle violazioni topologiche rilevate da topology_rule_validate: aggancio delle estremità tra elementi, aggancio/proiezione delle estremità libere e proiezione da punto a linea. polygon_must_not_have_gaps non ha una correzione automatica e viene riportato con zero modifiche.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale in ingresso."
              },
              "rule_set": {
                "label": "Insieme di regole",
                "description": "Configurazione delle regole come array/oggetto JSON, stringa CSV o percorso di file. Regole con correzioni automatiche: line_endpoints_must_snap_within_tolerance, line_must_not_have_dangles, point_must_be_covered_by_line. polygon_must_not_have_gaps è accettata ma non produce mai modifiche."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Tolleranza per le operazioni di aggancio in unità di coordinate. Per impostazione predefinita 0.01."
              },
              "dry_run": {
                "label": "Prova a secco",
                "description": "Se true (IL DEFAULT), solo anteprima: il rapporto delle modifiche viene emesso ma non viene scritta alcuna uscita. Passare false per applicare le correzioni."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita per le geometrie corrette. Se omesso, derivato accanto all'ingresso."
              },
              "change_report": {
                "label": "Rapporto delle modifiche",
                "description": "Percorso opzionale del rapporto JSON di tracciamento delle modifiche."
              }
            }
          },
          "topology_rule_validate": {
            "name": "Valida le regole topologiche",
            "description": "Convalida la topologia vettoriale rispetto a controlli di un insieme di regole (autointersezione, sovrapposizione, lacune, estremità libere, copertura dei punti, aggancio delle estremità) ed emette le violazioni a livello di elemento.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale in ingresso."
              },
              "rule_set": {
                "label": "Insieme di regole",
                "description": "Configurazione delle regole come array/oggetto JSON, stringa CSV o percorso di file. Per impostazione predefinita tutte le 6 regole MVP. Supportate: 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": "Tolleranza di aggancio",
                "description": "Tolleranza per la regola line_endpoints_must_snap_within_tolerance in unità di coordinate. Per impostazione predefinita 1.0."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita per le violazioni. Se omesso, derivato accanto all'ingresso."
              },
              "report": {
                "label": "Rapporto",
                "description": "Percorso opzionale del rapporto JSON di riepilogo."
              }
            }
          },
          "topology_validation_report": {
            "name": "Rapporto di validazione topologica",
            "description": "Verifica un layer vettoriale alla ricerca di problemi topologici e scrive un report CSV per elemento.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV in uscita."
              }
            }
          },
          "convert_nodata_to_zero": {
            "name": "Converti NoData in zero",
            "description": "Sostituisce con 0 le celle nodata del raster lasciando invariate le celle valide.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "modify_nodata_value": {
            "name": "Modifica il valore NoData",
            "description": "Modifica il valore nodata del raster e riscrive le celle nodata esistenti con il nuovo valore.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "new_value": {
                "label": "Nuovo valore",
                "description": "Nuovo valore nodata. Per impostazione predefinita -32768.0."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "new_raster_from_base_raster": {
            "name": "Nuovo raster da raster di base",
            "description": "Crea un nuovo raster usando l'estensione, le dimensioni e il CRS di un raster di base.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Percorso del raster di base."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, restituisce un raster in memoria."
              },
              "out_val": {
                "label": "Valore in uscita",
                "description": "Valore di riempimento opzionale. Per impostazione predefinita il nodata del raster."
              },
              "data_type": {
                "label": "Tipo di dato",
                "description": "Tipo di dato opzionale: 'float', 'double' o 'integer'."
              }
            }
          },
          "new_raster_from_base_vector": {
            "name": "Nuovo raster da vettoriale di base",
            "description": "Crea un nuovo raster dall'estensione di un vettoriale di base e da una dimensione della cella, riempito con un valore opzionale.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Percorso del vettoriale di base."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella della griglia di uscita (> 0)."
              },
              "out_val": {
                "label": "Valore in uscita",
                "description": "Valore di riempimento opzionale. Per impostazione predefinita nodata (-32768)."
              },
              "data_type": {
                "label": "Tipo di dato",
                "description": "Parola chiave opzionale del tipo di dato in uscita: integer, float o double."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "raster_to_vector_lines": {
            "name": "Da raster a linee vettoriali",
            "description": "Converte le celle lineari del raster non zero e non nodata in elementi vettoriali polilineari.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso (banda singola)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita. Se omesso, un percorso GeoJSON è derivato accanto all'ingresso."
              }
            }
          },
          "raster_to_vector_points": {
            "name": "Da raster a punti vettoriali",
            "description": "Converte le celle non zero e non nodata di un raster in elementi puntuali situati nei centri delle celle.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita. Se omesso, un percorso GeoJSON è derivato accanto all'ingresso."
              }
            }
          },
          "raster_to_vector_polygons": {
            "name": "Da raster a poligoni vettoriali",
            "description": "Converte le regioni raster non zero e non nodata in elementi vettoriali poligonali con attributi FID e VALUE.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso (banda singola)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita. Se omesso, un percorso GeoJSON è derivato accanto all'ingresso."
              }
            }
          },
          "remove_raster_polygon_holes": {
            "name": "Rimuovi i fori dei poligoni raster",
            "description": "Rimuove i fori interni di sfondo (regioni 0 o nodata racchiuse dal primo piano) dai poligoni raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso (banda singola)."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Dimensione massima opzionale dei buchi in celle da rimuovere. 0 significa tutti i buchi racchiusi."
              },
              "use_diagonals": {
                "label": "Usa le diagonali",
                "description": "Usa la connettività a 8 vicini per l'aggregazione e la connettività dei bordi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "set_nodata_value": {
            "name": "Imposta il valore NoData",
            "description": "Imposta un valore nodata del raster e mappa le celle nodata esistenti sul valore di sfondo specificato.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "back_value": {
                "label": "Valore di sfondo",
                "description": "Valore di sfondo da assegnare come nodata. Per impostazione predefinita 0.0."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, restituisce un raster in memoria."
              }
            }
          },
          "vector_lines_to_raster": {
            "name": "Da linee vettoriali a raster",
            "description": "Rasterizza le geometrie di linee e confini di poligoni su una griglia raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale in ingresso (linee o poligoni)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, l'uscita resta in memoria."
              },
              "field": {
                "label": "Campo",
                "description": "Nome opzionale del campo numerico da incidere. Per impostazione predefinita FID."
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Se true, inizializza lo sfondo dell'uscita a 0 invece di nodata."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita quando 'base' non è fornito. Se omessa e senza base, la dimensione automatica della cella è estensione massima / 500."
              },
              "base": {
                "label": "Base",
                "description": "Percorso opzionale del raster di base che definisce griglia ed estensione di uscita."
              }
            }
          },
          "vector_points_to_raster": {
            "name": "Da punti vettoriali a raster",
            "description": "Rasterizza vettoriali puntuali o multipunto su una griglia usando un'operazione di assegnazione selezionata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale in ingresso (punto/multipunto)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato è in memoria."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numerico opzionale usato per i valori del raster. Per impostazione predefinita FID."
              },
              "assign": {
                "label": "Assegna",
                "description": "Operazione di assegnazione: last, first, min, max, sum, num, mean."
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Se true, inizializza lo sfondo a 0; altrimenti nodata."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita. Obbligatoria quando 'base' non è fornito."
              },
              "base": {
                "label": "Base",
                "description": "Percorso opzionale del raster di base per definire estensione/griglia."
              }
            }
          },
          "vector_polygons_to_raster": {
            "name": "Da poligoni vettoriali a raster",
            "description": "Rasterizza vettoriali poligonali su una griglia, supportando valori di incisione basati sugli attributi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del vettoriale poligonale in ingresso."
              },
              "field": {
                "label": "Campo",
                "description": "Nome opzionale del campo numerico per i valori da incidere (per impostazione predefinita FID)."
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Se true, inizializza lo sfondo dell'uscita a 0 invece di nodata."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita quando 'base' non è fornito."
              },
              "base": {
                "label": "Base",
                "description": "Percorso opzionale del raster di base che definisce griglia ed estensione di uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, l'uscita resta in memoria."
              }
            }
          },
          "local_morans_i_lisa_raster": {
            "name": "I di Moran locale (LISA) raster",
            "description": "Calcola l'analisi dei cluster LISA dai punti e produce in uscita un raster categoriale (HH/LL/HL/LH/NS). Consente l'integrazione basata su raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso con i punti di osservazione."
              },
              "field": {
                "label": "Campo",
                "description": "Campo attributo numerico da analizzare."
              },
              "weights_mode": {
                "label": "Modalità dei pesi",
                "description": "Modalità di intorno: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Valore di k per la modalità k_nearest (default 8)."
              },
              "distance": {
                "label": "Distanza",
                "description": "Soglia di distanza per la modalità distance_band."
              },
              "row_standardize": {
                "label": "Standardizzazione per righe",
                "description": "Applica la standardizzazione per righe ai pesi (default true)."
              },
              "island_policy": {
                "label": "Politica per le isole",
                "description": "Gestione delle isole: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Soglia di significatività in [0, 1]; default 0.05."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella del raster in uscita (opzionale; calcolata automaticamente dall'estensione)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita (classificazione: 0=NS, 1=HH, 2=LL, 3=HL, 4=LH)."
              }
            }
          },
          "getis_ord_gi_star_raster": {
            "name": "Gi* di Getis-Ord raster",
            "description": "Calcola le classificazioni hotspot/coldspot Gi* dai punti e produce in uscita un raster (-1=cold, 0=NS, 1=hot). Per l'analisi basata sugli hotspot.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso con i punti di osservazione."
              },
              "field": {
                "label": "Campo",
                "description": "Campo attributo numerico da analizzare."
              },
              "weights_mode": {
                "label": "Modalità dei pesi",
                "description": "Modalità di intorno: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Valore di k per la modalità k_nearest (default 8)."
              },
              "distance": {
                "label": "Distanza",
                "description": "Soglia di distanza per la modalità distance_band."
              },
              "row_standardize": {
                "label": "Standardizzazione per righe",
                "description": "Applica la standardizzazione per righe ai pesi (default true)."
              },
              "island_policy": {
                "label": "Politica per le isole",
                "description": "Gestione delle isole: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Soglia di significatività in [0, 1]; default 0.05."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella del raster in uscita (opzionale; calcolata automaticamente dall'estensione)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita (classificazione: -1=Cold, 0=NS, 1=Hot)."
              }
            }
          },
          "ordinary_kriging": {
            "name": "Kriging ordinario",
            "description": "Esegue un'interpolazione kriging ordinario per stimare i valori nelle celle della griglia non mappate a partire da un campione di misure puntuali. Il kriging ordinario è un metodo geostatistico che sfrutta la struttura di autocorrelazione spaziale per fornire sia le previsioni sia la varianza di kriging associata (incertezza della previsione). Lo strumento stima automaticamente un variogramma empirico dai dati puntuali in ingresso e adatta un modello teorico di variogramma (sferico, esponenziale o gaussiano) per catturare la dipendenza spaziale.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo attributo numerico contenente i valori da interpolare."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita in unità di mappa (obbligatoria se non c'è base_raster)."
              },
              "base_raster": {
                "label": "Raster di base",
                "description": "Raster di base opzionale che controlla la geometria di uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "local_kriging": {
            "name": "Kriging locale",
            "description": "Esegue un'interpolazione kriging ordinario locale usando i k vicini più prossimi, fornendo una stima spaziale efficiente per grandi dataset. Questo approccio è computazionalmente più pratico del kriging ordinario globale per dataset con migliaia di punti.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo attributo numerico contenente i valori da interpolare."
              },
              "k_neighbors": {
                "label": "K vicini",
                "description": "Numero di vicini più prossimi da usare; per impostazione predefinita 10."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita in unità di mappa (obbligatoria se non c'è base_raster)."
              },
              "base_raster": {
                "label": "Raster di base",
                "description": "Raster di base opzionale che controlla la geometria di uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "simple_kriging": {
            "name": "Kriging semplice",
            "description": "Esegue un'interpolazione kriging semplice quando la media del campo spaziale è nota a priori. Questo metodo riduce la varianza di kriging e fornisce previsioni più stabili quando la media è nota in modo affidabile da informazioni esterne.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo attributo numerico contenente i valori da interpolare."
              },
              "known_mean": {
                "label": "Media nota",
                "description": "Media nota del campo spaziale."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita in unità di mappa (obbligatoria se non c'è base_raster)."
              },
              "base_raster": {
                "label": "Raster di base",
                "description": "Raster di base opzionale che controlla la geometria di uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "universal_kriging": {
            "name": "Kriging universale",
            "description": "Esegue un'interpolazione kriging universale quando il fenomeno spaziale presenta una tendenza o una deriva sistematica. Combina il kriging con la stima di una superficie di tendenza polinomiale.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo attributo numerico contenente i valori da interpolare."
              },
              "trend_order": {
                "label": "Ordine della tendenza",
                "description": "Ordine della tendenza polinomiale (1=lineare, 2=quadratica); per impostazione predefinita 1."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita in unità di mappa (obbligatoria se non c'è base_raster)."
              },
              "base_raster": {
                "label": "Raster di base",
                "description": "Raster di base opzionale che controlla la geometria di uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "spacetime_kriging": {
            "name": "Kriging spazio-temporale",
            "description": "Esegue un'interpolazione kriging spazio-temporale per modellare congiuntamente la variazione spaziale e temporale delle misure puntuali. Ideale per dati di serie temporali distribuiti spazialmente.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo attributo numerico contenente i valori da interpolare."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo attributo temporale contenente i valori di tempo."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita in unità di mappa (obbligatoria se non c'è base_raster)."
              },
              "base_raster": {
                "label": "Raster di base",
                "description": "Raster di base opzionale che controlla la geometria di uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "spatial_lag_regression_raster": {
            "name": "Regressione con ritardo spaziale (raster)",
            "description": "Stima il modello SAR e produce in uscita la superficie dei valori adattati.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "response_field": {
                "label": "Campo risposta",
                "description": "Variabile di risposta."
              },
              "predictor_fields": {
                "label": "Campi predittori",
                "description": "Campi predittori."
              },
              "weights_mode": {
                "label": "Modalità dei pesi",
                "description": "Modalità di intorno."
              },
              "k": {
                "label": "K",
                "description": "k per k_nearest."
              },
              "distance": {
                "label": "Distanza",
                "description": "Soglia di distanza."
              },
              "row_standardize": {
                "label": "Standardizzazione per righe",
                "description": "Standardizza i pesi per righe."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella del raster in uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster in uscita."
              }
            }
          },
          "spatial_error_regression_raster": {
            "name": "Regressione con errore spaziale (raster)",
            "description": "Stima il modello SEM e produce in uscita la superficie dei valori adattati.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "response_field": {
                "label": "Campo risposta",
                "description": "Variabile di risposta."
              },
              "predictor_fields": {
                "label": "Campi predittori",
                "description": "Campi predittori."
              },
              "weights_mode": {
                "label": "Modalità dei pesi",
                "description": "Modalità di intorno."
              },
              "k": {
                "label": "K",
                "description": "k per k_nearest."
              },
              "distance": {
                "label": "Distanza",
                "description": "Soglia di distanza."
              },
              "row_standardize": {
                "label": "Standardizzazione per righe",
                "description": "Standardizza i pesi per righe."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella del raster in uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster in uscita."
              }
            }
          },
          "geographically_weighted_regression_raster": {
            "name": "Regressione geograficamente pesata (raster)",
            "description": "Stima la GWR e produce in uscita superfici raster dei coefficienti locali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "response_field": {
                "label": "Campo risposta",
                "description": "Variabile di risposta."
              },
              "predictor_fields": {
                "label": "Campi predittori",
                "description": "Campi predittori."
              },
              "bandwidth": {
                "label": "Larghezza di banda",
                "description": "Larghezza di banda del kernel."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Tipo di kernel."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella del raster in uscita."
              },
              "output_prefix": {
                "label": "Prefisso di uscita",
                "description": "Prefisso del raster in uscita."
              }
            }
          },
          "inhomogeneous_intensity_raster": {
            "name": "Intensità non omogenea (raster)",
            "description": "Calcola una superficie di stima della densità kernel (KDE) che visualizza l'intensità spaziale dei punti. Rivela hotspot e coldspot oltre la semplice densità.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "bandwidth": {
                "label": "Larghezza di banda",
                "description": "Larghezza di banda del kernel."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Tipo di kernel."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella del raster in uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster di intensità in uscita."
              }
            }
          },
          "add": {
            "name": "Somma",
            "description": "Somma due raster cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "average_overlay": {
            "name": "Sovrapposizione per media",
            "description": "Calcola la media per cella su uno stack raster, ignorando i NoData a meno che tutti gli input siano NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso come array di percorsi o stringa delimitata da punti e virgola/virgole."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "bool_and": {
            "name": "AND logico",
            "description": "Calcola l'AND logico di due raster cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "bool_not": {
            "name": "NOT logico",
            "description": "Calcola il NOT logico di ciascuna cella del raster, restituendo 1 per le celle con valore zero e 0 altrimenti.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "bool_or": {
            "name": "OR logico",
            "description": "Calcola l'OR logico di due raster cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "bool_xor": {
            "name": "XOR logico",
            "description": "Calcola lo XOR logico di due raster cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "count_if": {
            "name": "Conta se",
            "description": "Conta il numero di raster in ingresso la cui cella è uguale a un valore di confronto.",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso come array di percorsi o stringa delimitata da punti e virgola/virgole."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison_value": {
                "label": "Valore di confronto",
                "description": "Valore di confronto da contare all'interno della pila raster."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "divide": {
            "name": "Dividi",
            "description": "Divide il primo raster per il secondo cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "highest_position": {
            "name": "Posizione più alta",
            "description": "Restituisce l'indice (a partire da zero) dello stack raster che contiene il valore più alto in ciascuna cella.",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso come array di percorsi o stringa delimitata da punti e virgola/virgole."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "lowest_position": {
            "name": "Posizione più bassa",
            "description": "Restituisce l'indice (a partire da zero) dello stack raster che contiene il valore più basso in ciascuna cella.",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso come array di percorsi o stringa delimitata da punti e virgola/virgole."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "max_absolute_overlay": {
            "name": "Sovrapposizione per massimo assoluto",
            "description": "Calcola il valore assoluto massimo per cella su uno stack raster, propagando NoData se una qualsiasi cella in ingresso è NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso come array di percorsi o stringa delimitata da punti e virgola/virgole."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "max_overlay": {
            "name": "Sovrapposizione per massimo",
            "description": "Calcola il massimo per cella su uno stack raster, propagando NoData se una qualsiasi cella in ingresso è NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso come array di percorsi o stringa delimitata da punti e virgola/virgole."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "min_absolute_overlay": {
            "name": "Sovrapposizione per minimo assoluto",
            "description": "Calcola il valore assoluto minimo per cella su uno stack raster, propagando NoData se una qualsiasi cella in ingresso è NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso come array di percorsi o stringa delimitata da punti e virgola/virgole."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "min_overlay": {
            "name": "Sovrapposizione per minimo",
            "description": "Calcola il minimo per cella su uno stack raster, propagando NoData se una qualsiasi cella in ingresso è NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso come array di percorsi o stringa delimitata da punti e virgola/virgole."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "modulo": {
            "name": "Modulo",
            "description": "Calcola il resto della divisione del primo raster per il secondo cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "multiply": {
            "name": "Moltiplica",
            "description": "Moltiplica due raster cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "multiply_overlay": {
            "name": "Sovrapposizione per prodotto",
            "description": "Calcola il prodotto per cella su uno stack raster, propagando NoData se una qualsiasi cella in ingresso è NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso come array di percorsi o stringa delimitata da punti e virgola/virgole."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "percent_equal_to": {
            "name": "Percentuale uguale a",
            "description": "Calcola la frazione di raster di uno stack i cui valori sono uguali al raster di confronto in ciascuna cella.",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso come array di percorsi o stringa delimitata da punti e virgola/virgole."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "Confronto",
                "description": "Percorso del raster di confronto o handle raster in memoria."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "percent_greater_than": {
            "name": "Percentuale maggiore di",
            "description": "Calcola la frazione di raster di uno stack i cui valori sono maggiori del raster di confronto in ciascuna cella.",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso come array di percorsi o stringa delimitata da punti e virgola/virgole."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "Confronto",
                "description": "Percorso del raster di confronto o handle raster in memoria."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "percent_less_than": {
            "name": "Percentuale minore di",
            "description": "Calcola la frazione di raster di uno stack i cui valori sono minori del raster di confronto in ciascuna cella.",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso come array di percorsi o stringa delimitata da punti e virgola/virgole."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "Confronto",
                "description": "Percorso del raster di confronto o handle raster in memoria."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "pick_from_list": {
            "name": "Scegli da un elenco",
            "description": "Seleziona i valori per cella da uno stack raster usando un raster di posizione (a partire da zero).",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso come array di percorsi o stringa delimitata da punti e virgola/virgole."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "pos_input": {
                "label": "Ingresso positivo",
                "description": "Raster a base zero delle posizioni nella pila."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "power": {
            "name": "Potenza",
            "description": "Eleva il primo raster alla potenza del secondo cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "standard_deviation_overlay": {
            "name": "Sovrapposizione per deviazione standard",
            "description": "Calcola la deviazione standard per cella su uno stack raster, propagando NoData se una qualsiasi cella in ingresso è NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso come array di percorsi o stringa delimitata da punti e virgola/virgole."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "subtract": {
            "name": "Sottrai",
            "description": "Sottrae il secondo raster dal primo cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "sum_overlay": {
            "name": "Sovrapposizione per somma",
            "description": "Calcola la somma per cella su uno stack raster, propagando NoData se una qualsiasi cella in ingresso è NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso come array di percorsi o stringa delimitata da punti e virgola/virgole."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "update_nodata_cells": {
            "name": "Aggiorna celle NoData",
            "description": "Assegna alle celle NoData di input1 i valori delle corrispondenti celle valide di input2.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Raster primario da aggiornare."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Raster secondario che fornisce i valori sostitutivi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "weighted_overlay": {
            "name": "Sovrapposizione pesata",
            "description": "Combina raster dei fattori usando pesi normalizzati, flag di costo opzionali e vincoli binari opzionali.",
            "params": {
              "factors": {
                "label": "Fattori",
                "description": "Pila raster dei fattori in ingresso."
              },
              "weights": {
                "label": "Pesi",
                "description": "Pesi numerici corrispondenti a ogni raster di fattore."
              },
              "cost": {
                "label": "Costo",
                "description": "Flag booleani opzionali che indicano i fattori di costo."
              },
              "constraints": {
                "label": "Vincoli",
                "description": "Pila raster opzionale dei vincoli; i valori <= 0 forzano l'uscita a zero."
              },
              "scale_max": {
                "label": "Massimo della scala",
                "description": "Valore massimo della scala usato dopo la normalizzazione dei fattori."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "weighted_sum": {
            "name": "Somma pesata",
            "description": "Calcola una somma pesata su uno stack raster dopo aver normalizzato i pesi in modo che la loro somma sia uno.",
            "params": {
              "input_rasters": {
                "label": "Raster in ingresso",
                "description": "Pila raster in ingresso."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "weights": {
                "label": "Pesi",
                "description": "Pesi numerici corrispondenti a ogni raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "image_correlation_neighbourhood_analysis": {
            "name": "Analisi di vicinato per correlazione di immagini",
            "description": "Esegue un'analisi di correlazione in finestra mobile tra due raster e restituisce raster di correlazione e di p-value.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Percorso del primo raster in ingresso."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso del secondo raster in ingresso."
              },
              "filter_size": {
                "label": "Dimensione del filtro",
                "description": "Dimensione della finestra mobile in celle (minimo 3, default 11)."
              },
              "correlation_stat": {
                "label": "Statistica di correlazione",
                "description": "Metrica di correlazione: pearson, spearman o kendall (default pearson)."
              },
              "output1": {
                "label": "Uscita 1",
                "description": "Percorso di uscita opzionale per il raster di correlazione."
              },
              "output2": {
                "label": "Uscita 2",
                "description": "Percorso di uscita opzionale per il raster di significatività (valore p)."
              }
            }
          },
          "natural_neighbour_interpolation": {
            "name": "Interpolazione natural neighbour",
            "description": "Interpola un raster da campioni puntuali usando la vera ponderazione per aree natural-neighbour di Sibson.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "field_name": {
                "label": "Nome del campo",
                "description": "Campo attributo numerico opzionale; per impostazione predefinita ripiego su FID."
              },
              "use_z": {
                "label": "Usa Z",
                "description": "Usa i valori Z dalla geometria dei punti invece degli attributi."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita quando base_raster non è fornito."
              },
              "base_raster": {
                "label": "Raster di base",
                "description": "Raster di base opzionale che controlla la geometria di uscita."
              },
              "clip_to_hull": {
                "label": "Ritaglia all'involucro",
                "description": "Limita l'interpolazione all'involucro convesso dei punti."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "nearest_neighbour_interpolation": {
            "name": "Interpolazione al vicino più prossimo",
            "description": "Interpola un raster da campioni puntuali assegnando a ciascuna cella il valore del campione più vicino.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "field_name": {
                "label": "Nome del campo",
                "description": "Campo attributo numerico opzionale; per impostazione predefinita ripiego su FID."
              },
              "use_z": {
                "label": "Usa Z",
                "description": "Usa i valori Z dalla geometria dei punti invece degli attributi."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita quando base_raster non è fornito."
              },
              "base_raster": {
                "label": "Raster di base",
                "description": "Raster di base opzionale che controlla la geometria di uscita."
              },
              "max_dist": {
                "label": "Distanza massima",
                "description": "Distanza massima di ricerca opzionale in unità di mappa; per impostazione predefinita infinito."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "conditional_evaluation": {
            "name": "Valutazione condizionale",
            "description": "Esegue una valutazione condizionale if-then-else sulle celle del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "statement": {
                "label": "Istruzione",
                "description": "Espressione condizionale valutata per cella."
              },
              "true": {
                "label": "Vero",
                "description": "Valore o raster/espressione usato quando la condizione è vera."
              },
              "false": {
                "label": "Falso",
                "description": "Valore o raster/espressione usato quando la condizione è falsa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "reclass": {
            "name": "Riclassifica",
            "description": "Riclassifica i valori del raster usando intervalli o coppie di assegnazione esatte.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso."
              },
              "reclass_values": {
                "label": "Valori di riclassificazione",
                "description": "Valori di riclassificazione come righe di [new, from, to_less_than] o [new, old] quando assign_mode=true."
              },
              "assign_mode": {
                "label": "Modalità di assegnazione",
                "description": "Se true, usa la modalità di assegnazione esatta con coppie [new_value, old_value]."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "reclass_equal_interval": {
            "name": "Riclassifica per intervalli uguali",
            "description": "Riclassifica i valori del raster in intervalli di uguale ampiezza su un intervallo di valori opzionale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso."
              },
              "interval_size": {
                "label": "Dimensione dell'intervallo",
                "description": "Ampiezza delle classi a intervallo uguale."
              },
              "start_value": {
                "label": "Valore iniziale",
                "description": "Limite inferiore opzionale per la riclassificazione; per impostazione predefinita il minimo del raster."
              },
              "end_value": {
                "label": "Valore finale",
                "description": "Limite superiore opzionale per la riclassificazione; per impostazione predefinita il massimo del raster."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "buffer_raster": {
            "name": "Buffer raster",
            "description": "Crea una zona buffer binaria attorno alle celle raster non zero e non NoData entro una distanza specificata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso in cui le celle non zero sono gli obiettivi del buffer."
              },
              "buffer_size": {
                "label": "Dimensione del buffer",
                "description": "Soglia di distanza del buffer."
              },
              "grid_cell_units": {
                "label": "Unità in celle della griglia",
                "description": "Se true, interpreta buffer_size in unità di celle della griglia invece che in unità di mappa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "cost_allocation": {
            "name": "Allocazione di costo",
            "description": "Assegna ciascuna cella a una regione sorgente usando un raster di backlink derivato dall'analisi della distanza di costo.",
            "params": {
              "source": {
                "label": "Sorgente",
                "description": "Raster delle sorgenti con celle sorgente positive."
              },
              "backlink": {
                "label": "Collegamento a ritroso",
                "description": "Raster dei collegamenti a ritroso da cost_distance."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "cost_distance": {
            "name": "Distanza di costo",
            "description": "Calcola i raster del costo di percorrenza accumulato e di backlink a partire da superfici di sorgente e di costo.",
            "params": {
              "source": {
                "label": "Sorgente",
                "description": "Raster delle sorgenti con celle sorgente positive."
              },
              "cost": {
                "label": "Costo",
                "description": "Raster di costo/attrito."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster del costo accumulato in uscita."
              },
              "backlink_output": {
                "label": "Collegamento a ritroso in uscita",
                "description": "Percorso opzionale del raster dei collegamenti a ritroso in uscita."
              }
            }
          },
          "cost_pathway": {
            "name": "Percorso di costo",
            "description": "Traccia i percorsi a costo minimo dalle celle di destinazione usando un raster di backlink.",
            "params": {
              "destination": {
                "label": "Destinazione",
                "description": "Raster delle destinazioni con celle di destinazione positive."
              },
              "backlink": {
                "label": "Collegamento a ritroso",
                "description": "Raster dei collegamenti a ritroso da cost_distance."
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Se true, lo sfondo dell'uscita è zero invece di NoData."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "euclidean_allocation": {
            "name": "Allocazione euclidea",
            "description": "Assegna a ciascuna cella valida il valore della cella obiettivo non zero più vicina.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso con celle obiettivo non zero."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "euclidean_distance": {
            "name": "Distanza euclidea",
            "description": "Calcola la distanza euclidea dalla cella obiettivo non zero più vicina in un raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso con celle obiettivo non zero."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "abs": {
            "name": "Valore assoluto",
            "description": "Calcola il valore assoluto di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "aggregate_raster": {
            "name": "Aggrega raster",
            "description": "Riduce la risoluzione del raster aggregando blocchi tramite media, somma, min, max o intervallo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso."
              },
              "aggregation_factor": {
                "label": "Fattore di aggregazione",
                "description": "Dimensione del blocco in celle sorgente."
              },
              "aggregation_type": {
                "label": "Tipo di aggregazione",
                "description": "Uno tra mean, sum, maximum, minimum o range."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "anova": {
            "name": "ANOVA",
            "description": "Esegue un'ANOVA a una via sui valori del raster raggruppati in base alle categorie di un raster delle classi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster delle misure."
              },
              "features": {
                "label": "Caratteristiche",
                "description": "Percorso del raster delle classi/categorie."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita (alias: output_html_file)."
              }
            }
          },
          "arccos": {
            "name": "Arcocoseno",
            "description": "Calcola il coseno inverso (arccos) di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "arcosh": {
            "name": "Arcocoseno iperbolico",
            "description": "Calcola il coseno iperbolico inverso di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "arcsin": {
            "name": "Arcoseno",
            "description": "Calcola il seno inverso (arcsin) di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "arctan": {
            "name": "Arcotangente",
            "description": "Calcola la tangente inversa (arctan) di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "arsinh": {
            "name": "Arcoseno iperbolico",
            "description": "Calcola il seno iperbolico inverso di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "artanh": {
            "name": "Arcotangente iperbolica",
            "description": "Calcola la tangente iperbolica inversa di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "atan2": {
            "name": "Atan2",
            "description": "Calcola la tangente inversa a quattro quadranti usando due raster cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "block_maximum": {
            "name": "Massimo per blocco",
            "description": "Rasterizza gli elementi puntuali assegnando il valore massimo osservato all'interno di ciascuna cella in uscita.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "field_name": {
                "label": "Nome del campo",
                "description": "Campo attributo numerico opzionale da rasterizzare; per impostazione predefinita ripiego su FID."
              },
              "use_z": {
                "label": "Usa Z",
                "description": "Usa i valori Z dalla geometria dei punti invece degli attributi."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita quando base_raster non è fornito."
              },
              "base_raster": {
                "label": "Raster di base",
                "description": "Raster di base opzionale che controlla la geometria di uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "block_minimum": {
            "name": "Minimo per blocco",
            "description": "Rasterizza gli elementi puntuali assegnando il valore minimo osservato all'interno di ciascuna cella in uscita.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "field_name": {
                "label": "Nome del campo",
                "description": "Campo attributo numerico opzionale da rasterizzare; per impostazione predefinita ripiego su FID."
              },
              "use_z": {
                "label": "Usa Z",
                "description": "Usa i valori Z dalla geometria dei punti invece degli attributi."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita quando base_raster non è fornito."
              },
              "base_raster": {
                "label": "Raster di base",
                "description": "Raster di base opzionale che controlla la geometria di uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "boundary_shape_complexity": {
            "name": "Complessità della forma del confine",
            "description": "Calcola la complessità della forma del confine delle macchie raster usando una metrica dei rami dello scheletro ottenuto per assottigliamento delle linee.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster degli ID delle patch in ingresso con ID interi positivi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "ceil": {
            "name": "Arrotonda per eccesso",
            "description": "Arrotonda per eccesso ciascuna cella del raster all'intero più vicino.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "centroid_raster": {
            "name": "Centroide raster",
            "description": "Calcola la cella centroide per ciascun ID di macchia a valore positivo in un raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster delle patch in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "clip_raster_to_polygon": {
            "name": "Ritaglia raster su poligono",
            "description": "Ritaglia un raster sull'estensione dei poligoni; le celle al di fuori dei poligoni vengono impostate a NoData.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso."
              },
              "polygons": {
                "label": "Poligoni",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "maintain_dimensions": {
                "label": "Mantieni le dimensioni",
                "description": "Preserva le dimensioni originali del raster invece di ritagliare all'estensione del poligono."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "clump": {
            "name": "Raggruppa",
            "description": "Raggruppa le celle raster contigue con valore uguale in identificatori di macchia univoci.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster categorico in ingresso."
              },
              "diag": {
                "label": "Diagonale",
                "description": "Se true, include la connettività diagonale (8 vicini); altrimenti usa 4 vicini."
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Se true, tratta le celle a valore zero come sfondo e le mantiene a zero nell'uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "cos": {
            "name": "Coseno",
            "description": "Calcola il coseno del valore di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "cosh": {
            "name": "Coseno iperbolico",
            "description": "Calcola il coseno iperbolico di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "create_plane": {
            "name": "Crea piano",
            "description": "Crea un raster da un'equazione planare usando la geometria di un raster di base.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Raster di base che definisce la geometria di uscita."
              },
              "gradient": {
                "label": "Gradiente",
                "description": "Gradiente di pendenza del piano in gradi."
              },
              "aspect": {
                "label": "Esposizione",
                "description": "Esposizione del piano in gradi."
              },
              "constant": {
                "label": "Costante",
                "description": "Termine costante additivo nell'equazione del piano."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "crispness_index": {
            "name": "Indice di nitidezza",
            "description": "Calcola l'indice di nitidezza (crispness) per un raster di probabilità di appartenenza.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita (alias: output_html_file)."
              }
            }
          },
          "cross_tabulation": {
            "name": "Tabulazione incrociata",
            "description": "Esegue una tabulazione incrociata di due raster categoriali.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Percorso del raster 1 in ingresso."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso del raster 2 in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita (alias: output_html_file)."
              }
            }
          },
          "cumulative_distribution": {
            "name": "Distribuzione cumulata",
            "description": "Converte i valori del raster in probabilità della distribuzione cumulativa.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "dbscan": {
            "name": "DBSCAN",
            "description": "Esegue un clustering non supervisionato basato sulla densità DBSCAN su uno stack di raster in ingresso.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Elenco delimitato da virgole/punti e virgola o array JSON di percorsi dei raster in ingresso (bande delle caratteristiche)."
              },
              "scaling_method": {
                "label": "Metodo di ridimensionamento",
                "description": "Ridimensionamento delle caratteristiche: 'none' (default), 'normalize' (intervallo 0-1) o 'standardize' (z-score)."
              },
              "search_distance": {
                "label": "Distanza di ricerca",
                "description": "Epsilon: raggio di ricerca dell'intorno nello spazio delle caratteristiche (default 1.0)."
              },
              "min_points": {
                "label": "Punti minimi",
                "description": "Numero minimo di vicini entro epsilon per un punto core (default 5)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita per le etichette degli ID dei cluster."
              }
            }
          },
          "decrement": {
            "name": "Decremento",
            "description": "Sottrae un valore (default 1.0) da ciascuna cella del raster non nodata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "value": {
                "label": "Valore",
                "description": "Quantità da sottrarre da ogni cella. Per impostazione predefinita 1.0."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "edge_proportion": {
            "name": "Proporzione di bordo",
            "description": "Calcola la proporzione di celle di ciascuna macchia che sono celle di bordo e la riporta sulle celle della macchia.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster degli ID delle patch in ingresso con ID interi positivi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "equal_to": {
            "name": "Uguale a",
            "description": "Verifica se due raster sono uguali cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "erase_polygon_from_raster": {
            "name": "Cancella poligono dal raster",
            "description": "Imposta a NoData le celle del raster all'interno dei poligoni preservando le celle nei fori dei poligoni.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso."
              },
              "polygons": {
                "label": "Poligoni",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "exp": {
            "name": "Esponenziale",
            "description": "Calcola e elevato alla potenza di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "exp2": {
            "name": "Esponenziale in base 2",
            "description": "Calcola 2 elevato alla potenza di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "fft_random_field": {
            "name": "Campo casuale FFT",
            "description": "Crea un campo casuale spazialmente autocorrelato usando la sintesi spettrale FFT.",
            "params": {
              "base_raster": {
                "label": "Raster di base",
                "description": "Percorso del raster di base usato per la geometria della griglia."
              },
              "range": {
                "label": "Intervallo",
                "description": "Intervallo di correlazione approssimato in unità di mappa. Default: 1.0."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "filter_raster_features_by_area": {
            "name": "Filtra elementi raster per area",
            "description": "Rimuove gli elementi raster etichettati con interi più piccoli di una soglia di numero di celle.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso contenente etichette di classe intere."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Dimensione minima delle caratteristiche in celle da mantenere."
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Se true, alle caratteristiche rimosse viene assegnato 0; altrimenti viene assegnato NoData."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "find_patch_edge_cells": {
            "name": "Trova le celle di bordo della patch",
            "description": "Identifica le celle di bordo per ciascun ID di macchia raster positivo; le celle della macchia non di bordo vengono impostate a zero.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster degli ID delle patch in ingresso; i valori positivi sono trattati come celle delle patch."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "floor": {
            "name": "Arrotonda per difetto",
            "description": "Arrotonda per difetto ciascuna cella del raster all'intero più vicino.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "greater_than": {
            "name": "Maggiore di",
            "description": "Verifica se il primo raster è maggiore del secondo cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "heat_map": {
            "name": "Mappa di calore",
            "description": "Genera un raster di mappa di calore a densità kernel dalle occorrenze puntuali.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "field_name": {
                "label": "Nome del campo",
                "description": "Campo numerico opzionale dei pesi; per impostazione predefinita occorrenze non ponderate."
              },
              "bandwidth": {
                "label": "Larghezza di banda",
                "description": "Larghezza di banda del kernel in unità di mappa."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita quando base_raster non è fornito."
              },
              "base_raster": {
                "label": "Raster di base",
                "description": "Raster di base opzionale che controlla la geometria di uscita."
              },
              "kernel_function": {
                "label": "Funzione kernel",
                "description": "Tipo di funzione kernel; per impostazione predefinita quartic."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "idw_interpolation": {
            "name": "Interpolazione IDW",
            "description": "Interpola un raster da campioni puntuali usando la ponderazione per l'inverso della distanza.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "field_name": {
                "label": "Nome del campo",
                "description": "Campo attributo numerico opzionale; per impostazione predefinita ripiego su FID."
              },
              "use_z": {
                "label": "Usa Z",
                "description": "Usa i valori Z dalla geometria dei punti invece degli attributi."
              },
              "weight": {
                "label": "Peso",
                "description": "Esponente di distanza IDW; per impostazione predefinita 2.0."
              },
              "radius": {
                "label": "Raggio",
                "description": "Raggio opzionale dell'intorno in unità mappa; <=0 usa il ripiego ai k vicini più prossimi."
              },
              "min_points": {
                "label": "Punti minimi",
                "description": "Numero minimo di vicini da usare; per impostazione predefinita 0."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita quando base_raster non è fornito."
              },
              "base_raster": {
                "label": "Raster di base",
                "description": "Raster di base opzionale che controlla la geometria di uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "image_autocorrelation": {
            "name": "Autocorrelazione dell'immagine",
            "description": "Calcola l'I di Moran per una o più immagini raster.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Elenco dei percorsi dei raster in ingresso."
              },
              "contiguity": {
                "label": "Contiguità",
                "description": "Regola di intorno: rook, king/queen o bishop."
              }
            }
          },
          "image_correlation": {
            "name": "Correlazione tra immagini",
            "description": "Calcola la matrice di correlazione di Pearson per due o più immagini raster.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Elenco dei percorsi dei raster in ingresso."
              }
            }
          },
          "image_regression": {
            "name": "Regressione tra immagini",
            "description": "Esegue una regressione lineare bivariata tra due raster e produce in uscita un raster dei residui e un report.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Percorso del raster della variabile indipendente."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso del raster della variabile dipendente."
              },
              "standardize_residuals": {
                "label": "Standardizza i residui",
                "description": "Indica se standardizzare i residui in base all'errore standard del modello."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il raster dei residui."
              }
            }
          },
          "increment": {
            "name": "Incremento",
            "description": "Aggiunge un valore (default 1.0) a ciascuna cella del raster non nodata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "value": {
                "label": "Valore",
                "description": "Quantità da aggiungere a ogni cella. Per impostazione predefinita 1.0."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "inplace_add": {
            "name": "Somma sul posto",
            "description": "Esegue un'operazione di addizione sul posto (input1 += input2).",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Raster in ingresso da modificare."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso del raster in ingresso o costante numerica."
              }
            }
          },
          "inplace_divide": {
            "name": "Divisione sul posto",
            "description": "Esegue un'operazione di divisione sul posto (input1 /= input2).",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Raster in ingresso da modificare."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso del raster in ingresso o costante numerica diversa da zero."
              }
            }
          },
          "inplace_multiply": {
            "name": "Moltiplicazione sul posto",
            "description": "Esegue un'operazione di moltiplicazione sul posto (input1 *= input2).",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Raster in ingresso da modificare."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso del raster in ingresso o costante numerica."
              }
            }
          },
          "inplace_subtract": {
            "name": "Sottrazione sul posto",
            "description": "Esegue un'operazione di sottrazione sul posto (input1 -= input2).",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Raster in ingresso da modificare."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso del raster in ingresso o costante numerica."
              }
            }
          },
          "integer_division": {
            "name": "Divisione intera",
            "description": "Divide due raster e tronca ciascun risultato verso zero.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "inverse_pca": {
            "name": "PCA inversa",
            "description": "Ricostruisce le immagini delle bande originali dai raster delle componenti PCA usando gli autovettori memorizzati.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Percorsi dei raster delle componenti."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "pca_report": {
                "label": "Rapporto PCA",
                "description": "Stringa del rapporto JSON prodotta dalla PCA."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita di base opzionale."
              }
            }
          },
          "is_nodata": {
            "name": "È NoData",
            "description": "Restituisce 1 per le celle nodata e 0 per tutte le celle valide.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "kappa_index": {
            "name": "Indice kappa",
            "description": "Calcola il kappa di Cohen e le metriche di accordo tra due raster categoriali.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Percorso del raster di classificazione in ingresso."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso del raster di riferimento in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita (alias: output_html_file)."
              }
            }
          },
          "ks_normality_test": {
            "name": "Test di normalità KS",
            "description": "Valuta se i valori del raster provengono da una distribuzione normale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "num_samples": {
                "label": "Numero di campioni",
                "description": "Dimensione opzionale del campione casuale. Omettere per usare tutte le celle valide."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita (alias: output_html_file)."
              }
            }
          },
          "less_than": {
            "name": "Minore di",
            "description": "Verifica se il primo raster è minore del secondo cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "list_unique_values_raster": {
            "name": "Elenca valori univoci (raster)",
            "description": "Elenca le categorie raster valide univoche e le relative frequenze.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del CSV in uscita."
              },
              "strict_parity": {
                "label": "Parità rigorosa",
                "description": "Se true, restituisce l'uscita completa delle frequenze di categoria (default true)."
              },
              "max_values": {
                "label": "Valori massimi",
                "description": "Numero massimo di valori univoci da includere quando strict_parity è false (default 10000)."
              }
            }
          },
          "ln": {
            "name": "Logaritmo naturale",
            "description": "Calcola il logaritmo naturale di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "log10": {
            "name": "Logaritmo in base 10",
            "description": "Calcola il logaritmo in base 10 di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "log2": {
            "name": "Logaritmo in base 2",
            "description": "Calcola il logaritmo in base 2 di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "map_features": {
            "name": "Mappa gli elementi",
            "description": "Mappa gli elementi discreti del terreno rilevati da un raster usando un accrescimento di regioni a priorità decrescente.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso."
              },
              "min_feature_height": {
                "label": "Altezza minima delle caratteristiche",
                "description": "Separazione verticale minima per geometrie indipendenti."
              },
              "min_feature_size": {
                "label": "Dimensione minima delle caratteristiche",
                "description": "Dimensione minima della geometria in celle."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "max": {
            "name": "Massimo",
            "description": "Esegue un'operazione MAX su due raster o su un raster e un valore costante.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Percorso del primo raster o costante numerica."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso del secondo raster o costante numerica."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "min": {
            "name": "Minimo",
            "description": "Esegue un'operazione MIN su due raster o su un raster e un valore costante.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Percorso del primo raster o costante numerica."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso del secondo raster o costante numerica."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "modified_shepard_interpolation": {
            "name": "Interpolazione di Shepard modificata",
            "description": "Interpola un raster da campioni puntuali usando una fusione modified-Shepard pesata localmente.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "field_name": {
                "label": "Nome del campo",
                "description": "Campo attributo numerico opzionale; per impostazione predefinita ripiego su FID."
              },
              "use_z": {
                "label": "Usa Z",
                "description": "Usa i valori Z dalla geometria dei punti invece degli attributi."
              },
              "weight": {
                "label": "Peso",
                "description": "Esponente di peso di Shepard; per impostazione predefinita 2.0."
              },
              "radius": {
                "label": "Raggio",
                "description": "Raggio opzionale dell'intorno in unità mappa."
              },
              "min_points": {
                "label": "Punti minimi",
                "description": "Numero minimo di vicini; per impostazione predefinita 8."
              },
              "use_quadratic_basis": {
                "label": "Usa base quadratica",
                "description": "Applica correzioni locali su base quadratica (modalità compatibile con il legacy)."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita quando base_raster non è fornito."
              },
              "base_raster": {
                "label": "Raster di base",
                "description": "Raster di base opzionale che controlla la geometria di uscita."
              },
              "use_data_hull": {
                "label": "Usa l'involucro dei dati",
                "description": "Limita l'interpolazione all'involucro convesso dei punti."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "narrowness_index": {
            "name": "Indice di strettezza",
            "description": "Calcola l'indice di strettezza delle macchie raster come area divisa per l'area del più grande cerchio contenuto, in base alla distanza massima dal bordo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster degli ID delle patch in ingresso con ID interi positivi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "negate": {
            "name": "Nega",
            "description": "Cambia di segno il valore di ciascuna cella del raster non nodata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "nibble": {
            "name": "Nibble",
            "description": "Riempie le regioni di sfondo usando un'allocazione nearest-neighbour.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso da rifilare."
              },
              "mask": {
                "label": "Maschera",
                "description": "Raster di maschera binaria."
              },
              "use_nodata": {
                "label": "Usa nodata",
                "description": "Tratta il nodata in ingresso come valore di classe (non come sfondo)."
              },
              "nibble_nodata": {
                "label": "Erodi il nodata",
                "description": "Rifila anche nelle aree nodata escluse dalla maschera."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "not_equal_to": {
            "name": "Diverso da",
            "description": "Verifica se due raster sono diversi cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "paired_sample_t_test": {
            "name": "Test t per campioni appaiati",
            "description": "Esegue un t-test per campioni appaiati su due raster usando celle valide appaiate.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Percorso del primo raster in ingresso."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso del secondo raster in ingresso."
              },
              "num_samples": {
                "label": "Numero di campioni",
                "description": "Dimensione opzionale del campione con reimmissione."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita (alias: output_html_file)."
              }
            }
          },
          "phi_coefficient": {
            "name": "Coefficiente phi",
            "description": "Esegue una valutazione dell'accordo di una classificazione binaria usando il coefficiente phi.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Percorso del primo raster binario."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso del secondo raster binario."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita (alias: output_html_file)."
              }
            }
          },
          "principal_component_analysis": {
            "name": "Analisi delle componenti principali",
            "description": "Esegue la PCA su uno stack di raster, restituendo le immagini delle componenti e un report JSON.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Percorsi dei raster in ingresso (≥3)."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "num_components": {
                "label": "Numero di componenti",
                "description": "Numero di componenti. Default: tutte."
              },
              "standardized": {
                "label": "Standardizzato",
                "description": "Usa la matrice di correlazione. Default: false."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita di base opzionale."
              }
            }
          },
          "print_geotiff_tags": {
            "name": "Stampa i tag GeoTIFF",
            "description": "Produce un report di testo che descrive i tag TIFF/GeoTIFF e i metadati principali di un raster in ingresso della famiglia GeoTIFF.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              }
            }
          },
          "quantiles": {
            "name": "Quantili",
            "description": "Trasforma i valori del raster in classi di quantili.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "num_quantiles": {
                "label": "Numero di quantili",
                "description": "Numero di quantili (default 5)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "radial_basis_function_interpolation": {
            "name": "Interpolazione con funzioni a base radiale",
            "description": "Interpola un raster da campioni puntuali usando una ponderazione di similarità locale a base radiale.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "field_name": {
                "label": "Nome del campo",
                "description": "Campo attributo numerico opzionale; per impostazione predefinita ripiego su FID."
              },
              "use_z": {
                "label": "Usa Z",
                "description": "Usa i valori Z dalla geometria dei punti invece degli attributi."
              },
              "approximate_mode": {
                "label": "Modalità approssimata",
                "description": "Se true, usa la ponderazione approssimata veloce NG; se false, risolve i sistemi RBF locali (stile legacy)."
              },
              "radius": {
                "label": "Raggio",
                "description": "Raggio opzionale dell'intorno in unità mappa."
              },
              "min_points": {
                "label": "Punti minimi",
                "description": "Numero minimo di vicini da usare."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita quando base_raster non è fornito."
              },
              "base_raster": {
                "label": "Raster di base",
                "description": "Raster di base opzionale che controlla la geometria di uscita."
              },
              "func_type": {
                "label": "Tipo di funzione",
                "description": "Tipo di funzione a base radiale (thinplatespline, polyharmonic, gaussian, multiquadric, inversemultiquadric)."
              },
              "poly_order": {
                "label": "Ordine del polinomio",
                "description": "Suggerimento sull'ordine polinomiale (none, constant, quadratic)."
              },
              "weight": {
                "label": "Peso",
                "description": "Parametro di forma/esponente della base a seconda di func_type."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "radius_of_gyration": {
            "name": "Raggio di girazione",
            "description": "Calcola il raggio di girazione per macchia e riporta i valori sulle celle della macchia.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster degli ID delle patch in ingresso con ID interi positivi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "random_field": {
            "name": "Campo casuale",
            "description": "Crea un raster contenente valori casuali normali standard.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Percorso del raster di base usato per la geometria della griglia."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "random_forest_classification_fit": {
            "name": "Adatta classificazione random forest",
            "description": "Adatta un modello di classificazione random forest e restituisce i byte del modello serializzato.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "training_data": {
                "label": "Dati di addestramento",
                "description": "Percorso dei dati di addestramento vettoriali puntuali/poligonali."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Campo classe negli attributi di training_data."
              },
              "scaling": {
                "label": "Ridimensionamento",
                "description": "Modalità di ridimensionamento delle caratteristiche: none (default), normalize, standardize."
              },
              "split_criterion": {
                "label": "Criterio di divisione",
                "description": "Suggerimento sul criterio di suddivisione dell'albero (mantenuto per compatibilità con il legacy)."
              },
              "n_trees": {
                "label": "Numero di alberi",
                "description": "Numero di alberi nella foresta (default 200)."
              },
              "min_samples_leaf": {
                "label": "Campioni minimi per foglia",
                "description": "Numero minimo di campioni richiesti in un nodo foglia (default 1)."
              },
              "min_samples_split": {
                "label": "Campioni minimi per divisione",
                "description": "Numero minimo di campioni richiesti per dividere un nodo interno (default 2)."
              },
              "test_proportion": {
                "label": "Proporzione di test",
                "description": "Argomento di compatibilità legacy; riservato a diagnostiche future."
              }
            }
          },
          "random_forest_classification_predict": {
            "name": "Predici classificazione random forest",
            "description": "Applica un modello di classificazione random forest serializzato a predittori multibanda.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "model_bytes": {
                "label": "Byte del modello",
                "description": "Byte del modello prodotti da random_forest_classification_fit."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "random_forest_regression_fit": {
            "name": "Adatta regressione random forest",
            "description": "Adatta un modello di regressione random forest e restituisce i byte del modello serializzato.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "training_data": {
                "label": "Dati di addestramento",
                "description": "Percorso dei dati di addestramento vettoriali puntuali."
              },
              "field": {
                "label": "Campo",
                "description": "Campo obiettivo numerico negli attributi di training_data."
              },
              "scaling": {
                "label": "Ridimensionamento",
                "description": "Modalità di ridimensionamento delle caratteristiche: none (default), normalize, standardize."
              },
              "n_trees": {
                "label": "Numero di alberi",
                "description": "Numero di alberi nella foresta (default 200)."
              },
              "min_samples_leaf": {
                "label": "Campioni minimi per foglia",
                "description": "Numero minimo di campioni richiesti in un nodo foglia (default 1)."
              },
              "min_samples_split": {
                "label": "Campioni minimi per divisione",
                "description": "Numero minimo di campioni richiesti per dividere un nodo interno (default 2)."
              },
              "test_proportion": {
                "label": "Proporzione di test",
                "description": "Argomento di compatibilità legacy; riservato a diagnostiche future."
              }
            }
          },
          "random_forest_regression_predict": {
            "name": "Predici regressione random forest",
            "description": "Applica un modello di regressione random forest serializzato a predittori multibanda.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Array di raster a banda singola in ingresso."
              },
              "model_bytes": {
                "label": "Byte del modello",
                "description": "Byte del modello prodotti da random_forest_regression_fit."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "random_sample": {
            "name": "Campione casuale",
            "description": "Crea un raster contenente celle campione posizionate casualmente con ID univoci.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Percorso del raster di base usato per la geometria della griglia e la maschera delle celle valide."
              },
              "num_samples": {
                "label": "Numero di campioni",
                "description": "Numero di celle campione da generare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "raster_area": {
            "name": "Area del raster",
            "description": "Stima l'area dei poligoni raster per classe in unità di celle della griglia o di mappa e scrive i totali di classe in ciascuna cella della classe.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster categorico in ingresso."
              },
              "units": {
                "label": "Unità",
                "description": "Unità di area: 'map units' (default) o 'grid cells'."
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Se true, le celle di valore zero sono escluse dall'analisi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "raster_calculator": {
            "name": "Calcolatrice raster",
            "description": "Valuta un'espressione matematica su un elenco di raster in ingresso cella per cella.",
            "params": {
              "expression": {
                "label": "Espressione",
                "description": "Espressione matematica con i nomi delle variabili raster tra virgolette."
              },
              "inputs": {
                "label": "Ingressi",
                "description": "Percorsi ordinati dei raster in ingresso."
              },
              "auto_reproject": {
                "label": "Riproiezione automatica",
                "description": "Se true (default), riproietta automaticamente i raster della pila per corrispondere a inputs[0] quando il CRS differisce."
              },
              "auto_reproject_method": {
                "label": "Metodo di riproiezione automatica",
                "description": "Metodo di ricampionamento opzionale per la riproiezione: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "raster_cell_assignment": {
            "name": "Assegnazione delle celle raster",
            "description": "Crea un raster derivato da un raster di base assegnando a ciascuna cella i valori di riga, colonna, x o y.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster di base in ingresso."
              },
              "what_to_assign": {
                "label": "Cosa assegnare",
                "description": "Destinazione dell'assegnazione: column, row, x o y."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "raster_histogram": {
            "name": "Istogramma raster",
            "description": "Crea un istogramma a bin fissi per le celle raster valide.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del rapporto HTML in uscita (alias: output_html_file)."
              },
              "bins": {
                "label": "Classi dell'istogramma",
                "description": "Numero di classi dell'istogramma (default log2(rows*cols)+1)."
              }
            }
          },
          "raster_perimeter": {
            "name": "Perimetro del raster",
            "description": "Stima il perimetro dei poligoni raster per classe usando una tabella di lookup anti-aliasing e scrive i totali di classe in ciascuna cella della classe.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster categorico in ingresso."
              },
              "units": {
                "label": "Unità",
                "description": "Unità di perimetro: 'map units' (default) o 'grid cells'."
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Se true, le celle di valore zero sono escluse dall'analisi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "raster_summary_stats": {
            "name": "Statistiche riassuntive del raster",
            "description": "Calcola statistiche di sintesi di base per le celle raster valide.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del rapporto in uscita (.json o .csv)."
              }
            }
          },
          "reciprocal": {
            "name": "Reciproco",
            "description": "Calcola il reciproco (1/x) di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "rescale_value_range": {
            "name": "Riscala l'intervallo di valori",
            "description": "Riscala linearmente i valori del raster in un intervallo di destinazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "out_min": {
                "label": "Minimo in uscita",
                "description": "Valore minimo in uscita."
              },
              "out_max": {
                "label": "Massimo in uscita",
                "description": "Valore massimo in uscita."
              },
              "clip_min": {
                "label": "Minimo di ritaglio",
                "description": "Minimo opzionale in ingresso per il taglio prima del riscalamento."
              },
              "clip_max": {
                "label": "Massimo di ritaglio",
                "description": "Massimo opzionale in ingresso per il taglio prima del riscalamento."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "root_mean_square_error": {
            "name": "Errore quadratico medio",
            "description": "Calcola l'RMSE e le relative statistiche di accuratezza tra due raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster di confronto."
              },
              "base": {
                "label": "Base",
                "description": "Percorso del raster di base."
              }
            }
          },
          "round": {
            "name": "Arrotonda",
            "description": "Arrotonda ciascuna cella del raster all'intero più vicino.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "shape_complexity_index_raster": {
            "name": "Indice di complessità di forma raster",
            "description": "Calcola la complessità della forma delle macchie raster dalla frequenza delle transizioni orizzontali/verticali normalizzata sull'estensione della macchia.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster degli ID delle patch in ingresso con ID interi positivi."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "sieve": {
            "name": "Setaccia",
            "description": "Rimuove le piccole macchie isolate al di sotto di una soglia di numero di celle.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster categorico in ingresso."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Dimensione minima della patch in celle da mantenere."
              },
              "zero_background": {
                "label": "Sfondo a zero",
                "description": "Azzera le celle di sfondo (valore 0) nell'uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "sin": {
            "name": "Seno",
            "description": "Calcola il seno del valore di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "sinh": {
            "name": "Seno iperbolico",
            "description": "Calcola il seno iperbolico di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "sqrt": {
            "name": "Radice quadrata",
            "description": "Calcola la radice quadrata di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "square": {
            "name": "Quadrato",
            "description": "Eleva al quadrato il valore di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "tan": {
            "name": "Tangente",
            "description": "Calcola la tangente del valore di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "tanh": {
            "name": "Tangente iperbolica",
            "description": "Calcola la tangente iperbolica di ciascuna cella del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "tin_interpolation": {
            "name": "Interpolazione TIN",
            "description": "Interpola un raster da campioni puntuali usando la triangolazione di Delaunay e l'interpolazione planare all'interno di ciascun triangolo.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "field_name": {
                "label": "Nome del campo",
                "description": "Campo attributo numerico opzionale; per impostazione predefinita ripiego su FID."
              },
              "use_z": {
                "label": "Usa Z",
                "description": "Usa i valori Z dalla geometria dei punti invece degli attributi."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di uscita quando base_raster non è fornito."
              },
              "base_raster": {
                "label": "Raster di base",
                "description": "Raster di base opzionale che controlla la geometria di uscita."
              },
              "max_triangle_edge_length": {
                "label": "Lunghezza massima del lato del triangolo",
                "description": "Lunghezza massima opzionale del lato dei triangoli in unità mappa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "to_degrees": {
            "name": "In gradi",
            "description": "Converte ciascuna cella del raster da radianti a gradi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "to_radians": {
            "name": "In radianti",
            "description": "Converte ciascuna cella del raster da gradi a radianti.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "trend_surface": {
            "name": "Superficie di tendenza",
            "description": "Adatta una superficie di tendenza polinomiale a un raster usando la regressione ai minimi quadrati.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "polynomial_order": {
                "label": "Ordine del polinomio",
                "description": "Ordine polinomiale 1–10. Default: 1."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "trend_surface_vector_points": {
            "name": "Superficie di tendenza da punti vettoriali",
            "description": "Adatta una superficie di tendenza polinomiale a dati vettoriali puntuali usando la regressione ai minimi quadrati.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale puntuale in ingresso."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella del raster in uscita in unità mappa."
              },
              "field_name": {
                "label": "Nome del campo",
                "description": "Campo attributo per i valori Z. Default: 'FID'."
              },
              "polynomial_order": {
                "label": "Ordine del polinomio",
                "description": "Ordine polinomiale 1–10. Default: 1."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "truncate": {
            "name": "Tronca",
            "description": "Tronca il valore di ciascuna cella del raster alla sua parte intera.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "turning_bands_simulation": {
            "name": "Simulazione a bande rotanti",
            "description": "Crea un campo casuale spazialmente autocorrelato usando l'algoritmo delle turning bands.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster di base."
              },
              "range": {
                "label": "Intervallo",
                "description": "Range di correlazione in unità mappa. Default: 1.0."
              },
              "iterations": {
                "label": "Iterazioni",
                "description": "Numero di direzioni delle bande. Default: 1000."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "two_sample_ks_test": {
            "name": "Test KS a due campioni",
            "description": "Esegue un test di Kolmogorov-Smirnov a due campioni su due distribuzioni di valori raster.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Percorso del primo raster in ingresso."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso del secondo raster in ingresso."
              },
              "num_samples": {
                "label": "Numero di campioni",
                "description": "Dimensione opzionale del campione con reimmissione per ciascun raster."
              }
            }
          },
          "wilcoxon_signed_rank_test": {
            "name": "Test dei ranghi con segno di Wilcoxon",
            "description": "Esegue un test dei ranghi con segno di Wilcoxon sulle differenze raster appaiate.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Percorso del primo raster in ingresso."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Percorso del secondo raster in ingresso."
              },
              "num_samples": {
                "label": "Numero di campioni",
                "description": "Dimensione opzionale del campione con reimmissione."
              }
            }
          },
          "z_scores": {
            "name": "Punteggi Z",
            "description": "Standardizza i valori del raster in z-score usando la media e la deviazione standard globali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "zonal_statistics": {
            "name": "Statistiche zonali",
            "description": "Riassume i valori di un raster di dati all'interno delle zone definite da un raster degli elementi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster di dati in ingresso."
              },
              "features": {
                "label": "Caratteristiche",
                "description": "Percorso del raster di definizione delle zone."
              },
              "stat_type": {
                "label": "Tipo di statistica",
                "description": "Statistica: 'mean', 'median', 'min', 'max', 'range', 'standard deviation', 'diversity', 'total'. Default: 'mean'."
              },
              "zero_is_background": {
                "label": "Lo zero è sfondo",
                "description": "Esclude le celle della zona 0. Default: false."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "assess_route": {
            "name": "Valuta rotta",
            "description": "Segmenta le linee dei percorsi e valuta metriche del terreno per segmento da un DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "routes": {
                "label": "Percorsi",
                "description": "Percorso del vettoriale in ingresso delle rotte polilineari."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio di ricerca della visibilità in celle della griglia (default 15, minimo 4)."
              },
              "segment_length": {
                "label": "Lunghezza del segmento",
                "description": "Lunghezza obiettivo del segmento di rotta in unità mappa (default 100.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita."
              }
            }
          },
          "breakline_mapping": {
            "name": "Mappatura delle linee di rottura",
            "description": "Mappa le linee di discontinuità applicando una soglia alla curvedness trasformata logaritmicamente e vettorializzando gli elementi lineari assottigliati.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Soglia minima di log-curvedness usata per l'estrazione delle linee di rottura (default 0.8)."
              },
              "min_length": {
                "label": "Lunghezza minima",
                "description": "Lunghezza minima della linea in uscita in celle della griglia (default 3)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale in uscita (default: file .shp temporaneo)."
              }
            }
          },
          "convergence_index": {
            "name": "Indice di convergenza",
            "description": "Convergenza/divergenza del flusso dall'allineamento dell'esposizione locale. Identifica le valli (convergenti) e le creste (divergenti) senza un instradamento completo del flusso. Alternativa efficiente agli algoritmi di direzione di flusso.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione Z."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "dem_void_filling": {
            "name": "Riempimento dei vuoti del DEM",
            "description": "Riempie i vuoti del DEM usando una superficie secondaria e offset di elevazione interpolati per una fusione senza soluzione di continuità.",
            "params": {
              "fill": {
                "label": "Riempi",
                "description": "Percorso del raster DEM di riempimento o oggetto raster tipizzato usato per popolare i vuoti."
              },
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso (con vuoti) o oggetto raster tipizzato."
              },
              "edge_treatment": {
                "label": "Trattamento dei bordi",
                "description": "Trattamento dei bordi dei vuoti: 'dem', 'fill' o 'average' (default 'dem')."
              },
              "mean_plane_dist": {
                "label": "Distanza dal piano medio",
                "description": "Distanza in celle dai bordi dei vuoti oltre la quale gli scarti sono impostati allo scarto medio globale (default 20)."
              },
              "weight_value": {
                "label": "Valore del peso",
                "description": "Potenza dell'interpolazione a distanza inversa per l'interpolazione degli scarti in prossimità dei bordi (default 2.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "deviation_from_mean_elevation": {
            "name": "Scostamento dalla quota media",
            "description": "Calcola lo z-score topografico locale usando la media e la deviazione standard locali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dispari del filtro in celle (default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dispari del filtro in celle (default filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "difference_from_mean_elevation": {
            "name": "Differenza rispetto alla quota media",
            "description": "Calcola la differenza tra ciascuna elevazione e l'elevazione media locale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dispari del filtro in celle (default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dispari del filtro in celle (default filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "directional_relief": {
            "name": "Rilievo direzionale",
            "description": "Calcola il rilievo direzionale tramite ray-tracing dell'elevazione in un azimut specificato.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut della direzione in gradi in senso orario da nord."
              },
              "max_dist": {
                "label": "Distanza massima",
                "description": "Distanza massima opzionale del raggio in unità mappa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "elev_above_pit": {
            "name": "Quota sulla fossa",
            "description": "Calcola l'elevazione sopra la cella di fossa (o depressione di bordo) più vicina verso valle.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "elev_above_pit_dist": {
            "name": "Distanza della quota sulla fossa",
            "description": "Alias di compatibilità per elev_above_pit.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "elevation_percentile": {
            "name": "Percentile di quota",
            "description": "Rango percentile locale dell'elevazione all'interno dell'intorno (0-100). Identifica le valli (% bassa), le creste (% alta) e i versanti (% media). Metrica di classificazione delle forme del rilievo indipendente dall'elevazione assoluta.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dispari del filtro in celle (default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dispari del filtro in celle (default filter_size_x). Alias: filtery."
              },
              "sig_digits": {
                "label": "Cifre significative",
                "description": "Numero di cifre decimali significative da preservare durante il raggruppamento in classi (default 2)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "embankment_mapping": {
            "name": "Mappatura degli argini",
            "description": "Mappa i rilevati delle infrastrutture di trasporto da un DEM e da una rete stradale, con rimozione opzionale della superficie dei rilevati tramite interpolazione. Autori: John Lindsay e Nigel VanNieuwenhuizen.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "roads_vector": {
                "label": "Vettoriale delle strade",
                "description": "Percorso del vettoriale delle strade in ingresso (geometria polilineare)."
              },
              "embankment_max_width": {
                "label": "Larghezza massima del rilevato",
                "description": "Larghezza massima del rilevato in unità mappa (default 60.0)."
              },
              "max_upwards_increment": {
                "label": "Incremento massimo verso l'alto",
                "description": "Incremento locale verso l'alto massimo consentito durante la crescita (default 0.05)."
              },
              "min_road_width": {
                "label": "Larghezza minima delle strade",
                "description": "Larghezza minima mappata della strada in unità mappa (default 6.0)."
              },
              "remove_embankments": {
                "label": "Rimuovi i rilevati",
                "description": "Se true, produce inoltre un DEM con i rilevati rimossi tramite interpolazione locale."
              },
              "search_dist": {
                "label": "Distanza di ricerca",
                "description": "Distanza di riposizionamento dei semi stradali in unità mappa (default 2.5)."
              },
              "spillout_slope": {
                "label": "Pendenza di tracimazione",
                "description": "Pendenza massima di fuoriuscita in gradi per le transizioni in salita (default 4.0)."
              },
              "typical_embankment_max_height": {
                "label": "Altezza massima tipica del rilevato",
                "description": "Altezza massima tipica del rilevato nelle unità di quota (default 2.0)."
              },
              "typical_embankment_width": {
                "label": "Larghezza tipica del rilevato",
                "description": "Larghezza tipica del rilevato in unità mappa (default 30.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale della maschera dei rilevati."
              },
              "output_dem": {
                "label": "DEM in uscita",
                "description": "Percorso di uscita opzionale del DEM con i rilevati rimossi quando remove_embankments=true."
              }
            }
          },
          "exposure_towards_wind_flux": {
            "name": "Esposizione al flusso del vento",
            "description": "Calcola l'esposizione del terreno rispetto alla direzione dominante del vento e alla schermatura dell'orizzonte sopravento.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut del vento dominante in gradi in senso orario da nord."
              },
              "max_dist": {
                "label": "Distanza massima",
                "description": "Distanza massima di ricerca per l'angolo di orizzonte sopravvento in unità mappa."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore opzionale di scala verticale per i DEM proiettati."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "feature_preserving_smoothing": {
            "name": "Smoothing con preservazione delle forme",
            "description": "Smussa la rugosità del DEM preservando le discontinuità di pendenza tramite un filtraggio dei vettori normali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "filter_size": {
                "label": "Dimensione del filtro",
                "description": "Dimensione dispari del filtro in celle (default 11)."
              },
              "iterations": {
                "label": "Iterazioni",
                "description": "Numero di iterazioni di lisciamento (default 3)."
              },
              "max_elevation_diff": {
                "label": "Differenza massima di elevazione",
                "description": "Variazione verticale massima consentita rispetto al DEM originale (default inf)."
              },
              "normal_diff_threshold": {
                "label": "Soglia di differenza delle normali",
                "description": "Differenza massima dell'angolo normale in gradi (default 8.0)."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "feature_preserving_smoothing_multiscale": {
            "name": "Smoothing multiscala con preservazione delle forme",
            "description": "Smussa la rugosità del DEM con una continuazione multiscala dal grossolano al fine. Ciascuna scala ricalcola le normali, applica una diffusione robusta adattiva del campo delle normali e ricostruisce le elevazioni con una risoluzione di Poisson schermata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "smoothing_amount": {
                "label": "Quantità di lisciatura",
                "description": "Entità complessiva del lisciamento in [0,1] (default 0.65). Valori più alti aumentano il budget di diffusione, soprattutto alle scale grossolane."
              },
              "edge_preservation": {
                "label": "Preservazione dei bordi",
                "description": "Intensità di preservazione dei bordi in [0,1] (default 0.75). Valori più alti sopprimono più fortemente il lisciamento attraverso le principali rotture di pendenza."
              },
              "scale_levels": {
                "label": "Livelli di scala",
                "description": "Numero di livelli della piramide per il lisciamento dal grossolano al fine (default 3)."
              },
              "fidelity": {
                "label": "Fedeltà",
                "description": "Peso di fedeltà ai dati nella ricostruzione di Poisson schermata (default 0.45). Valori più alti mantengono il risultato più vicino al DEM di origine."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "fetch_analysis": {
            "name": "Analisi del fetch",
            "description": "Calcola la distanza sopravento dal primo ostacolo topografico lungo un azimut specificato.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut del vento in gradi in senso orario da nord."
              },
              "hgt_inc": {
                "label": "Incremento di altezza",
                "description": "Soglia di incremento di altezza in m/m (default 0.05)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "fill_missing_data": {
            "name": "Riempi i dati mancanti",
            "description": "Riempie le lacune NoData usando la ponderazione per l'inverso della distanza dalle celle valide ai margini della lacuna.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster in ingresso o oggetto raster tipizzato."
              },
              "exclude_edge_nodata": {
                "label": "Escludi il nodata sui bordi",
                "description": "Esclude dal riempimento le regioni NoData connesse al bordo (default false). Alias: no_edges."
              },
              "filter_size": {
                "label": "Dimensione del filtro",
                "description": "Raggio di ricerca in celle della griglia (default 11)."
              },
              "weight": {
                "label": "Peso",
                "description": "Esponente di potenza a distanza inversa (default 2.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "find_ridges": {
            "name": "Trova le creste",
            "description": "Identifica le potenziali celle di cresta e di picco in un DEM, con assottigliamento opzionale delle linee.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "line_thin": {
                "label": "Assottigliamento delle linee",
                "description": "Applica l'assottigliamento iterativo delle linee (default true)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "hillshade": {
            "name": "Ombreggiatura del rilievo",
            "description": "Visualizzazione dell'ombreggiatura del rilievo direzionale da una singola sorgente (scala di grigi 0-255). I parametri di azimut e altitudine controllano la direzione della luce. Visualizzazione rapida del terreno per l'ispezione del DEM e la visualizzazione cartografica.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster DEM in ingresso"
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Esagerazione verticale applicata alle quote"
              },
              "altitude": {
                "label": "Altitudine",
                "description": "Altezza dell'illuminazione sopra l'orizzonte in gradi"
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut di illuminazione in gradi in senso orario da nord"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "hypsometrically_tinted_hillshade": {
            "name": "Ombreggiatura del rilievo con tinte ipsometriche",
            "description": "Crea una rappresentazione del terreno in stile svizzero fondendo un'ombreggiatura del rilievo multiazimut con tinte ipsometriche e una foschia atmosferica opzionale.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM in ingresso."
              },
              "solar_altitude": {
                "label": "Altitudine solare",
                "description": "Altezza solare in gradi [0, 90]."
              },
              "hillshade_weight": {
                "label": "Peso dell'ombreggiatura",
                "description": "Peso di fusione dell'ombreggiatura in [0, 1]."
              },
              "brightness": {
                "label": "Luminosità",
                "description": "Controllo della luminosità in [0, 1]."
              },
              "atmospheric_effects": {
                "label": "Effetti atmosferici",
                "description": "Quantità di foschia atmosferica in [0, 1]."
              },
              "palette": {
                "label": "Palette",
                "description": "Nome della palette (atlas, high_relief, arid, soft, muted, viridis, dem, grey, white, ecc.)."
              },
              "reverse_palette": {
                "label": "Inverti palette",
                "description": "Inverte l'ordine della palette."
              },
              "full_360_mode": {
                "label": "Modalità 360 completa",
                "description": "Usa l'illuminazione a 8 direzioni anziché la modalità a 4 direzioni."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Moltiplicatore di esagerazione verticale."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita."
              }
            }
          },
          "local_hypsometric_analysis": {
            "name": "Analisi ipsometrica locale",
            "description": "Calcola l'integrale ipsometrico locale minimo su un intervallo di scale dell'intorno campionato in modo non lineare.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "min_scale": {
                "label": "Scala minima",
                "description": "Raggio minimo della semifinestra in celle (default 4)."
              },
              "step_size": {
                "label": "Dimensione del passo",
                "description": "Dimensione del passo di base in celle (default 1). Alias: step."
              },
              "num_steps": {
                "label": "Numero di passi",
                "description": "Numero di scale da valutare (default 10)."
              },
              "step_nonlinearity": {
                "label": "Non linearità del passo",
                "description": "Non linearità del passo di scala in [1,4] (default 1.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il raster del minimo locale di HI."
              },
              "output_scale": {
                "label": "Scala in uscita",
                "description": "Percorso di uscita opzionale per il raster della scala del minimo di HI."
              }
            }
          },
          "low_points_on_headwater_divides": {
            "name": "Punti bassi sugli spartiacque di testata",
            "description": "Individua i punti di passo bassi lungo gli spartiacque tra sottobacini di testata vicini.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM privo di depressioni in ingresso o oggetto raster tipizzato."
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Percorso del raster dei corsi d'acqua in ingresso (i valori positivi indicano le celle di canale)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale in uscita (default: file .shp temporaneo)."
              }
            }
          },
          "max_downslope_elev_change": {
            "name": "Massima variazione di quota a valle",
            "description": "Calcola il dislivello massimo verso le celle vicine più basse.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "max_upslope_elev_change": {
            "name": "Massima variazione di quota a monte",
            "description": "Calcola il guadagno di elevazione massimo verso le celle vicine più alte.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "min_downslope_elev_change": {
            "name": "Minima variazione di quota a valle",
            "description": "Calcola il dislivello minimo non negativo verso le celle vicine.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "multidirectional_hillshade": {
            "name": "Ombreggiatura multidirezionale",
            "description": "Ombreggiatura del rilievo multidirezionale (8+ sorgenti luminose) che elimina gli artefatti d'ombra di una singola sorgente. Visibilità equilibrata degli elementi per terreni complessi; preferita per pubblicazioni e analisi dettagliate.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster DEM in ingresso"
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Esagerazione verticale applicata alle quote"
              },
              "altitude": {
                "label": "Altitudine",
                "description": "Altezza dell'illuminazione sopra l'orizzonte in gradi"
              },
              "full_360_mode": {
                "label": "Modalità 360 completa",
                "description": "Combina 8 sorgenti luminose sui 360 gradi completi anziché le 4 predefinite"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita"
              }
            }
          },
          "num_downslope_neighbours": {
            "name": "Numero di vicini a valle",
            "description": "Conta il numero di celle tra gli 8 vicini più basse di ciascuna cella del DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "num_upslope_neighbours": {
            "name": "Numero di vicini a monte",
            "description": "Conta il numero di celle tra gli 8 vicini più alte di ciascuna cella del DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "profile": {
            "name": "Profilo",
            "description": "Crea un grafico HTML del profilo altimetrico per uno o più elementi polilineari in ingresso campionati da un raster di superficie.",
            "params": {
              "lines_vector": {
                "label": "Vettoriale delle linee",
                "description": "Percorso del vettoriale polilineare in ingresso."
              },
              "surface": {
                "label": "Superficie",
                "description": "Percorso del raster di superficie in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del rapporto HTML in uscita."
              }
            }
          },
          "slope_vs_aspect_plot": {
            "name": "Grafico pendenza-esposizione",
            "description": "Crea un grafico HTML di analisi radiale pendenza-esposizione per un DEM in ingresso.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "aspect_bin_size": {
                "label": "Dimensione delle classi di esposizione",
                "description": "Dimensione delle classi di esposizione in gradi (default 2.0)."
              },
              "min_slope": {
                "label": "Pendenza minima",
                "description": "Ignora le pendenze inferiori a questa soglia in gradi (default 0.1)."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di scala verticale per i valori di quota."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del rapporto HTML in uscita."
              }
            }
          },
          "slope_vs_elev_plot": {
            "name": "Grafico pendenza-quota",
            "description": "Crea un grafico HTML di analisi pendenza-elevazione per uno o più DEM.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Percorsi dei DEM in ingresso come stringa separata da ';' o ',', oppure come elenco."
              },
              "watershed": {
                "label": "Bacino idrografico",
                "description": "Raster opzionali dei bacini idrografici corrispondenti a ciascun DEM in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del rapporto HTML in uscita."
              }
            }
          },
          "surface_area_ratio": {
            "name": "Rapporto di superficie",
            "description": "Rapporto tra area della superficie 3D e area planimetrica (metodo di Jenness). >1.0=terreno accidentato, ≈1.0=piatto. Metrica di rugosità adimensionale che consente il confronto del terreno tra regioni.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "topographic_hachures": {
            "name": "Tratteggi topografici",
            "description": "Crea polilinee di tratteggio topografico (hachure) da un DEM usando linee di flusso verso valle e verso monte generate a partire dalle curve di livello. L'attribuzione degli autori originali è intenzionalmente preservata per questo strumento.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "base": {
                "label": "Base",
                "description": "Elevazione dell'isolinea di base (default 0.0)."
              },
              "depth": {
                "label": "Profondità",
                "description": "Profondità di riempimento ricorsivo usata nelle aree divergenti (default 16)."
              },
              "discretization": {
                "label": "Discretizzazione",
                "description": "Lunghezza del passo delle linee di flusso in unità di cella media (default 0.5)."
              },
              "distmax": {
                "label": "Distanza massima",
                "description": "Moltiplicatore di spaziatura massimo usato per inserire hachure aggiuntive (default 2.0)."
              },
              "distmin": {
                "label": "Distanza minima",
                "description": "Moltiplicatore di spaziatura minimo usato per troncare le hachure vicine (default 0.5)."
              },
              "interval": {
                "label": "Intervallo",
                "description": "Valore dell'intervallo delle isolinee (default 10.0)."
              },
              "separation": {
                "label": "Separazione",
                "description": "Separazione nominale dei semi delle isoipse in unità di cella media (default 2.0)."
              },
              "slopemin": {
                "label": "Pendenza minima",
                "description": "Angolo di pendenza minimo in gradi per la continuazione del tracciamento (default 0.5)."
              },
              "smooth": {
                "label": "Liscia",
                "description": "Dimensione del filtro di lisciamento delle isoipse (preferibilmente intero dispari, default 9)."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Angolo minimo di curvatura delle isoipse in gradi mantenuto durante la semplificazione (default 10.0)."
              },
              "turnmax": {
                "label": "Svolta massima",
                "description": "Angolo di svolta massimo consentito in gradi durante il tracciamento delle hachure (default 45.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "map_off_terrain_objects": {
            "name": "Mappa gli oggetti fuori terreno",
            "description": "Mappa i segmenti di oggetti fuori terreno nei DSM usando un accrescimento di regioni vincolato dalla pendenza e un filtraggio opzionale della dimensione minima degli elementi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DSM in ingresso o oggetto raster tipizzato."
              },
              "max_slope": {
                "label": "Pendenza massima",
                "description": "Pendenza di connessione massima in gradi [1, 90] (default inf, limitata a 90)."
              },
              "min_feature_size": {
                "label": "Dimensione minima delle caratteristiche",
                "description": "Dimensione minima dei segmenti mantenuti in celle (default 0). I segmenti più piccoli sono assegnati alla classe di sfondo 1."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "remove_off_terrain_objects": {
            "name": "Rimuovi gli oggetti fuori terreno",
            "description": "Rimuove gli oggetti fuori terreno ripidi dai DEM usando la normalizzazione top-hat bianca, l'accrescimento di regioni vincolato dalla pendenza e l'interpolazione locale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "filter_size": {
                "label": "Dimensione del filtro",
                "description": "Larghezza massima attesa degli oggetti in celle; forzata a una dimensione dispari >= 3 (default 11)."
              },
              "slope_threshold": {
                "label": "Soglia di pendenza",
                "description": "Pendenza minima del bordo degli oggetti in gradi (default 15.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "ridge_and_valley_vectors": {
            "name": "Vettori di creste e valli",
            "description": "Estrae vettoriali delle linee d'asse di creste e valli da un DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso."
              },
              "filter_size": {
                "label": "Dimensione del filtro",
                "description": "Dimensione dell'intorno per il percentile di quota."
              },
              "ep_threshold": {
                "label": "Soglia EP",
                "description": "Soglia del percentile di quota [5, 50]."
              },
              "slope_threshold": {
                "label": "Soglia di pendenza",
                "description": "Soglia minima di pendenza in gradi."
              },
              "min_length": {
                "label": "Lunghezza minima",
                "description": "Lunghezza minima della linea centrale in celle."
              },
              "output_ridges": {
                "label": "Crinali in uscita",
                "description": "Percorso di uscita delle linee centrali dei crinali."
              },
              "output_valleys": {
                "label": "Valli in uscita",
                "description": "Percorso di uscita delle linee centrali delle valli."
              }
            }
          },
          "smooth_vegetation_residual": {
            "name": "Leviga il residuo di vegetazione",
            "description": "Riduce la rugosità residua della chioma mascherando le risposte DEV locali elevate a piccola scala e reinterpolando le elevazioni mascherate.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "max_scale": {
                "label": "Scala massima",
                "description": "Raggio massimo della semifinestra DEV in celle (default 30)."
              },
              "dev_threshold": {
                "label": "Soglia di deviazione",
                "description": "Magnitudine minima di DEV usata per contrassegnare le celle di rugosità (default 1.0)."
              },
              "scale_threshold": {
                "label": "Soglia di scala",
                "description": "Scala massima considerata rugosità (default 5)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "average_horizon_distance": {
            "name": "Distanza media dall'orizzonte",
            "description": "Calcola la distanza media dall'orizzonte lungo le direzioni di azimut.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM/DSM in ingresso."
              },
              "az_fraction": {
                "label": "Frazione di azimut",
                "description": "Passo di azimut in gradi [1, 45]."
              },
              "max_dist": {
                "label": "Distanza massima",
                "description": "Distanza massima di ricerca in unità mappa."
              },
              "observer_hgt_offset": {
                "label": "Offset di altezza dell'osservatore",
                "description": "Scarto di altezza dell'osservatore sopra il terreno."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita."
              }
            }
          },
          "horizon_angle": {
            "name": "Angolo d'orizzonte",
            "description": "Calcola l'angolo dell'orizzonte (pendenza massima) lungo una direzione di azimut specificata.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM in ingresso."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut in gradi [0, 360)."
              },
              "max_dist": {
                "label": "Distanza massima",
                "description": "Distanza massima di ricerca in unità mappa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita."
              }
            }
          },
          "horizon_area": {
            "name": "Area d'orizzonte",
            "description": "Calcola l'area del poligono dell'orizzonte (ettari).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM/DSM in ingresso."
              },
              "az_fraction": {
                "label": "Frazione di azimut",
                "description": "Passo di azimut in gradi [1, 45]."
              },
              "max_dist": {
                "label": "Distanza massima",
                "description": "Distanza massima di ricerca in unità mappa."
              },
              "observer_hgt_offset": {
                "label": "Offset di altezza dell'osservatore",
                "description": "Scarto di altezza dell'osservatore sopra il terreno."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita."
              }
            }
          },
          "openness": {
            "name": "Apertura",
            "description": "Apertura topografica di Yokoyama: metriche di esposizione positive (creste/picchi esposti) e negative (valli chiuse). Classificazione delle forme del rilievo e analisi della visibilità/del microclima.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "dist": {
                "label": "Distanza",
                "description": "Distanza di ricerca in celle (default 20)."
              },
              "neg_output": {
                "label": "Uscita negativa",
                "description": "Percorso di uscita opzionale per l'apertura negativa."
              },
              "pos_output": {
                "label": "Uscita positiva",
                "description": "Percorso di uscita opzionale per l'apertura positiva."
              }
            }
          },
          "shadow_animation": {
            "name": "Animazione delle ombre",
            "description": "Crea un visualizzatore HTML interattivo e una GIF animata che mostrano le ombre del terreno nel corso di una giornata.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM/DSM in ingresso."
              },
              "date": {
                "label": "Data",
                "description": "Data nel formato GG/MM/AAAA."
              },
              "delay": {
                "label": "Ritardo",
                "description": "Ritardo GIF per fotogramma in millisecondi."
              },
              "image_height": {
                "label": "Altezza dell'immagine",
                "description": "Altezza dell'immagine visualizzata in pixel."
              },
              "label": {
                "label": "Etichetta",
                "description": "Etichetta opzionale mostrata nel visualizzatore."
              },
              "location": {
                "label": "Posizione",
                "description": "Stringa di posizione LAT/LON/UTC_OFFSET, ad esempio 43.5448/-80.2482/-4."
              },
              "max_dist": {
                "label": "Distanza massima",
                "description": "Distanza massima di ricerca dell'orizzonte in unità mappa."
              },
              "palette": {
                "label": "Palette",
                "description": "Nome della palette ipsometrica (ad esempio soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "time_interval": {
                "label": "Intervallo di tempo",
                "description": "Intervallo tra i fotogrammi in minuti [1, 60]."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso dell'HTML in uscita."
              }
            }
          },
          "shadow_image": {
            "name": "Immagine delle ombre",
            "description": "Genera un raster dell'intensità delle ombre del terreno per data, ora e posizione specificate.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM/DSM in ingresso."
              },
              "date": {
                "label": "Data",
                "description": "Data nel formato GG/MM/AAAA."
              },
              "location": {
                "label": "Posizione",
                "description": "Stringa di posizione LAT/LON/UTC_OFFSET, ad esempio 43.5448/-80.2482/-4."
              },
              "max_dist": {
                "label": "Distanza massima",
                "description": "Distanza massima di ricerca dell'orizzonte in unità mappa."
              },
              "palette": {
                "label": "Palette",
                "description": "Nome della palette ipsometrica (ad esempio soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "time": {
                "label": "Ora",
                "description": "Ora locale nel formato HH:MM o HH:MMAM/HH:MMPM."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "sky_view_factor": {
            "name": "Fattore di vista del cielo",
            "description": "Calcola la proporzione di cielo visibile da un DEM/DSM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM/DSM in ingresso."
              },
              "az_fraction": {
                "label": "Frazione di azimut",
                "description": "Passo di azimut in gradi [1, 45]."
              },
              "max_dist": {
                "label": "Distanza massima",
                "description": "Distanza massima di ricerca in unità mappa."
              },
              "observer_hgt_offset": {
                "label": "Offset di altezza dell'osservatore",
                "description": "Scarto di altezza dell'osservatore sopra il terreno."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita."
              }
            }
          },
          "skyline_analysis": {
            "name": "Analisi dello skyline",
            "description": "Esegue un'analisi della linea d'orizzonte per uno o più punti di osservazione e scrive una traccia vettoriale dell'orizzonte più un report HTML.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM/DSM in ingresso."
              },
              "points": {
                "label": "Punti",
                "description": "Percorso del vettoriale puntuale in ingresso."
              },
              "az_fraction": {
                "label": "Frazione di azimut",
                "description": "Passo di azimut in gradi [0.01, 45]."
              },
              "max_dist": {
                "label": "Distanza massima",
                "description": "Distanza massima di ricerca in unità mappa."
              },
              "observer_hgt_offset": {
                "label": "Offset di altezza dell'osservatore",
                "description": "Scarto di altezza dell'osservatore sopra il terreno."
              },
              "output_as_polygons": {
                "label": "Uscita come poligoni",
                "description": "Scrive orizzonti poligonali anziché polilinee."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              },
              "output_html": {
                "label": "HTML in uscita",
                "description": "Percorso opzionale del rapporto HTML."
              }
            }
          },
          "time_in_daylight": {
            "name": "Tempo in luce diurna",
            "description": "Calcola la proporzione del giorno in cui ciascuna cella è illuminata (non in ombra del terreno/degli oggetti).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM/DSM in ingresso."
              },
              "az_fraction": {
                "label": "Frazione di azimut",
                "description": "Dimensione delle classi di azimut in gradi (0, 360)."
              },
              "end_day": {
                "label": "Giorno finale",
                "description": "Giorno dell'anno finale (1..366)."
              },
              "end_time": {
                "label": "Ora finale",
                "description": "Ora finale HH:MM:SS o 'sunset'."
              },
              "latitude": {
                "label": "Latitudine",
                "description": "Latitudine opzionale che sostituisce quella in gradi; altrimenti dedotta dal CRS del DEM."
              },
              "longitude": {
                "label": "Longitudine",
                "description": "Longitudine opzionale che sostituisce quella in gradi; altrimenti dedotta dal CRS del DEM."
              },
              "max_dist": {
                "label": "Distanza massima",
                "description": "Distanza massima di ricerca dell'orizzonte in unità mappa."
              },
              "start_day": {
                "label": "Giorno iniziale",
                "description": "Giorno dell'anno iniziale (1..366)."
              },
              "start_time": {
                "label": "Orario di inizio",
                "description": "Ora iniziale HH:MM:SS o 'sunrise'."
              },
              "utc_offset": {
                "label": "Scostamento UTC",
                "description": "Stringa opzionale di scarto UTC come UTC+00:00; se omessa, viene stimata dalla longitudine centrale."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita."
              }
            }
          },
          "viewshed": {
            "name": "Bacino visivo",
            "description": "Calcola il numero di stazioni visibili dalle stazioni puntuali su un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "stations": {
                "label": "Stazioni",
                "description": "File vettoriale puntuale in ingresso delle stazioni di osservazione."
              },
              "height": {
                "label": "Altezza",
                "description": "Altezza della stazione di osservazione sul suolo nelle unità z del DEM (default 2.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "visibility_index": {
            "name": "Indice di visibilità",
            "description": "Calcola un indice di visibilità basato sulla topografia a partire da bacini visivi campionati.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM in ingresso."
              },
              "max_dist": {
                "label": "Distanza massima",
                "description": "Distanza massima di ricerca della visibilità in unità mappa."
              },
              "resolution_factor": {
                "label": "Fattore di risoluzione",
                "description": "Fattore di risoluzione del campionamento [1, 25]."
              },
              "station_height": {
                "label": "Altezza della stazione",
                "description": "Altezza dell'osservatore sul suolo."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita."
              }
            }
          },
          "accumulation_curvature": {
            "name": "Curvatura di accumulo",
            "description": "Calcola la curvatura di accumulo da un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "aspect": {
            "name": "Esposizione",
            "description": "Direzione della pendenza massima (0°=N, 90°=E, 180°=S, 270°=W). Fondamentale per l'analisi della radiazione solare, dei pattern della vegetazione, del microclima e dell'esposizione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione Z."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "casorati_curvature": {
            "name": "Curvatura di Casorati",
            "description": "Calcola la curvatura di Casorati da un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "curvedness": {
            "name": "Curvedness",
            "description": "Calcola il descrittore della forma della superficie curvedness da un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "difference_curvature": {
            "name": "Curvatura differenza",
            "description": "Calcola la curvatura differenziale da un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "gaussian_curvature": {
            "name": "Curvatura gaussiana",
            "description": "Calcola la curvatura gaussiana (intrinseca) (prodotto delle curvature principali). Indica la topologia locale della superficie: positiva (conca/cupola), negativa (sella), zero (cilindrica). Classifica il terreno in categorie di forme del rilievo: elementi convessi (creste), elementi concavi (valli), elementi a sella (passi/valichi). Usata nella classificazione avanzata delle forme del rilievo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale quando le unità verticali e orizzontali differiscono (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita per migliorarne la leggibilità (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "generating_function": {
            "name": "Funzione generatrice",
            "description": "Calcola la funzione generatrice da un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "horizontal_excess_curvature": {
            "name": "Curvatura di eccesso orizzontale",
            "description": "Calcola la curvatura orizzontale in eccesso da un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "maximal_curvature": {
            "name": "Curvatura massima",
            "description": "Calcola la curvatura massimale (principale massima) da un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "mean_curvature": {
            "name": "Curvatura media",
            "description": "Calcola la curvatura media (media delle curvature principali). Correlata alla curvatura totale ma enfatizza la levigatezza della superficie. Valori vicini a 0 indicano un terreno liscio; valori alti indicano variazioni brusche di curvatura. Utile per la caratterizzazione della superficie e il rilevamento delle linee di discontinuità.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale quando le unità verticali e orizzontali differiscono (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita per migliorarne la leggibilità (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "minimal_curvature": {
            "name": "Curvatura minima",
            "description": "Calcola la curvatura minimale (principale minima) da un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "plan_curvature": {
            "name": "Curvatura planare",
            "description": "Calcola la curvatura planare (delle curve di livello) che misura la convergenza/divergenza del flusso attraverso le curve di livello. Valori positivi (convergenti) indicano una concentrazione del flusso verso il centro (concavo); valori negativi (divergenti) indicano una dispersione del flusso dal centro (convesso). Identifica le zone di concentrazione del flusso laterale (valli) rispetto alle zone di dispersione (creste). Essenziale per prevedere la distribuzione dell'umidità del suolo e la suscettibilità alle frane.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale quando le unità verticali e orizzontali differiscono (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita per migliorarne la leggibilità (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "principal_curvature_direction": {
            "name": "Direzione della curvatura principale",
            "description": "Calcola l'angolo di direzione della curvatura principale (gradi).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "profile_curvature": {
            "name": "Curvatura di profilo",
            "description": "Calcola la curvatura di profilo (verso valle) che misura l'accelerazione/decelerazione del flusso lungo la direzione della pendenza. Valori positivi (concavi) indicano zone di accelerazione del flusso (erosive); valori negativi (convessi) indicano zone di decelerazione del flusso (deposizionali). Rivela la forma del versante: concava (fondovalle, erosione), convessa (creste, asportazione di materiale), lineare (di transizione).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale quando le unità verticali e orizzontali differiscono (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita per migliorarne la leggibilità (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "relative_aspect": {
            "name": "Esposizione relativa",
            "description": "Calcola l'esposizione del terreno rispetto a un azimut specificato dall'utente (da 0 a 180 gradi).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut di riferimento in gradi in senso orario da nord."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di scala verticale opzionale."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "ring_curvature": {
            "name": "Curvatura ad anello",
            "description": "Calcola la curvatura ad anello (torsione al quadrato delle linee di flusso) da un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "rotor": {
            "name": "Rotore",
            "description": "Calcola il rotore (torsione delle linee di flusso) da un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "shape_index": {
            "name": "Indice di forma",
            "description": "Calcola il descrittore della forma della superficie shape index da un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "slope": {
            "name": "Pendenza",
            "description": "Pendenza di Zevenbergen-Thorne (gradi/radianti/percentuale). Metrica geomorfometrica fondamentale; input a valle per curvatura, direzione di flusso, ombreggiatura, visibilità.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "units": {
                "label": "Unità",
                "description": "Unità di uscita: gradi, radianti, percentuale."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione Z."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "tangential_curvature": {
            "name": "Curvatura tangenziale",
            "description": "Calcola la curvatura tangenziale (componente in direzione E-W), simile alla curvatura planare ma direzionale. Usata per una caratterizzazione completa della curvatura che cattura la divergenza del flusso laterale perpendicolare alla direzione della pendenza. Spesso combinata con la curvatura di profilo per una comprensione completa della curvatura 3D.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale quando le unità verticali e orizzontali differiscono (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita per migliorarne la leggibilità (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "total_curvature": {
            "name": "Curvatura totale",
            "description": "Calcola la curvatura totale (media quadratica delle curvature principali). Metrica scalare indipendente dalla direzione. Valori alti indicano un terreno fortemente curvo (picchi, fosse); valori bassi indicano un terreno planare. Utile come metrica di rugosità adimensionale per la classificazione del terreno e il rilevamento di anomalie.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale quando le unità verticali e orizzontali differiscono (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita per migliorarne la leggibilità (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "unsphericity": {
            "name": "Non sfericità",
            "description": "Calcola la curvatura di non sfericità (metà della differenza delle curvature principali) da un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "vertical_excess_curvature": {
            "name": "Curvatura di eccesso verticale",
            "description": "Calcola la curvatura verticale in eccesso da un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione z opzionale (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Trasformazione logaritmica opzionale dei valori in uscita (default false). Alias: log."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "average_normal_vector_angular_deviation": {
            "name": "Deviazione angolare media del vettore normale",
            "description": "Calcola la deviazione angolare media locale tra le normali alla superficie originali e smussate.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "filter_size": {
                "label": "Dimensione del filtro",
                "description": "Dimensione dispari dell'intorno in celle (default 11). Alias: filter."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di scala verticale opzionale."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "circular_variance_of_aspect": {
            "name": "Varianza circolare dell'esposizione",
            "description": "Calcola la varianza circolare locale dell'esposizione all'interno di un intorno mobile.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "filter": {
                "label": "Filtro",
                "description": "Dimensione dispari dell'intorno in celle (default 11)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "edge_density": {
            "name": "Densità dei bordi",
            "description": "Calcola la densità locale delle discontinuità di pendenza usando le differenze angolari dei vettori normali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "filter_size": {
                "label": "Dimensione del filtro",
                "description": "Dimensione dispari dell'intorno in celle (default 11). Alias: filter."
              },
              "norm_diff": {
                "label": "Differenza delle normali",
                "description": "Soglia angolare del vettore normale in gradi (default 5)."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di scala verticale opzionale."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "ruggedness_index": {
            "name": "Indice di scabrezza",
            "description": "Rugosità del terreno tramite il TRI di Riley (somma dei quadrati delle differenze di elevazione). Metrica di classificazione del terreno indipendente dalla scala: bassa=pianure lisce, alta=montagne accidentate. Mappatura ecologica e geomorfologica delle forme del rilievo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "spherical_std_dev_of_normals": {
            "name": "Deviazione standard sferica delle normali",
            "description": "Calcola la deviazione standard sferica delle normali alla superficie locali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "filter_size": {
                "label": "Dimensione del filtro",
                "description": "Dimensione dispari dell'intorno in celle (default 11). Alias: filter."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di scala verticale opzionale."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "standard_deviation_of_slope": {
            "name": "Deviazione standard della pendenza",
            "description": "Calcola la deviazione standard locale della pendenza come metrica della rugosità del terreno.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "filter_size": {
                "label": "Dimensione del filtro",
                "description": "Dimensione dispari del filtro in celle (default 11)."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dispari del filtro in celle (default filter_size). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dispari del filtro in celle (default filter_size). Alias: filtery."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione Z quando le unità verticali e orizzontali differiscono (default 1.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato resta in memoria."
              }
            }
          },
          "elev_relative_to_min_max": {
            "name": "Quota relativa al min-max",
            "description": "Esprime ciascuna elevazione come percentuale (0–100) dell'intervallo di elevazione del raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "geomorphons": {
            "name": "Geomorfoni",
            "description": "Classifica le forme del rilievo usando pattern ternari di linea di vista in 8 direzioni derivati dal confronto degli angoli zenitali e nadirali, oppure 10 forme comuni di geomorphon.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "analyze_residuals": {
                "label": "Analizza i residui",
                "description": "Se true, rimuove il trend dal DEM adattando un piano lineare prima della classificazione."
              },
              "flatness_distance": {
                "label": "Distanza di planarità",
                "description": "Distanza in celle oltre la quale la soglia di planarità si attenua con la distanza dall'orizzonte (default 0)."
              },
              "flatness_threshold": {
                "label": "Soglia di planarità",
                "description": "Soglia di planarità in gradi (default 1.0), applicata alla differenza tra angolo zenitale e nadirale."
              },
              "output_forms": {
                "label": "Forme in uscita",
                "description": "Se true, produce 10 classi comuni di forme del terreno; altrimenti produce il codice ternario grezzo del geomorfone ordinato in senso antiorario a partire da est."
              },
              "search_distance": {
                "label": "Distanza di ricerca",
                "description": "Distanza massima di ricerca in celle per ciascuna direzione (default 50); la cella terminale è inclusa."
              },
              "skip_distance": {
                "label": "Distanza da saltare",
                "description": "Distanza in celle da saltare prima di valutare la linea di vista (default 0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "hypsometric_analysis": {
            "name": "Analisi ipsometrica",
            "description": "Crea un report HTML della curva ipsometrica (area-elevazione) per uno o più DEM.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Percorsi dei DEM in ingresso come stringa separata da ';' o ',', oppure come elenco."
              },
              "watershed": {
                "label": "Bacino idrografico",
                "description": "Raster opzionali dei bacini idrografici corrispondenti a ciascun DEM in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del rapporto HTML in uscita."
              }
            }
          },
          "multiscale_topographic_position_class": {
            "name": "Classe di posizione topografica multiscala",
            "description": "Classifica ciascuna cella del DEM in un sistema di posizione topografica relativa ampia/locale a nove classi usando due mosaici di scala DEVmax.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "local_min_scale": {
                "label": "Scala minima locale",
                "description": "Raggio minimo della semifinestra in celle per l'intervallo di scala locale (default 5)."
              },
              "local_max_scale": {
                "label": "Scala massima locale",
                "description": "Raggio massimo della semifinestra in celle per l'intervallo di scala locale (default 80)."
              },
              "local_step_size": {
                "label": "Passo locale",
                "description": "Incremento di scala in celle per l'intervallo di scala locale (default 1). Alias: local_step."
              },
              "broad_min_scale": {
                "label": "Scala minima ampia",
                "description": "Raggio minimo della semifinestra in celle per l'intervallo di scala ampia (default 500)."
              },
              "broad_max_scale": {
                "label": "Scala massima ampia",
                "description": "Raggio massimo della semifinestra in celle per l'intervallo di scala ampia (default 2000)."
              },
              "broad_step_size": {
                "label": "Passo ampio",
                "description": "Incremento di scala in celle per l'intervallo di scala ampia (default 20). Alias: broad_step."
              },
              "local_threshold": {
                "label": "Soglia locale",
                "description": "Soglia di DEV usata per classificare il mosaico a scala locale negli stati di conca, posizione intermedia e collinetta (default 0.5)."
              },
              "broad_threshold": {
                "label": "Soglia ampia",
                "description": "Soglia di DEV usata per classificare il mosaico a scala ampia negli stati di pianura, intermedio e altopiano (default 0.5)."
              },
              "min_patch_size": {
                "label": "Dimensione minima della patch",
                "description": "Dimensione minima opzionale della patch in celle per il filtraggio delle patch dopo la classificazione (default 0, disattivato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il raster categoriale a nove classi."
              },
              "output_confidence": {
                "label": "Confidenza in uscita",
                "description": "Percorso di uscita opzionale per un raster di confidenza nell'intervallo [0, 1]."
              }
            }
          },
          "pennock_landform_classification": {
            "name": "Classificazione delle forme del rilievo di Pennock",
            "description": "Classifica gli elementi del rilievo nelle sette classi di terreno di Pennock et al. (1987).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "plan_curv_threshold": {
                "label": "Soglia di curvatura planare",
                "description": "Soglia di curvatura planare in gradi (default 0.0)."
              },
              "prof_curv_threshold": {
                "label": "Soglia di curvatura di profilo",
                "description": "Soglia di curvatura di profilo in gradi (default 0.1)."
              },
              "slope_threshold": {
                "label": "Soglia di pendenza",
                "description": "Soglia di pendenza in gradi (default 3.0)."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di scala verticale opzionale (se < 0 e il CRS è geografico, viene stimato dalla latitudine media)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "percent_elev_range": {
            "name": "Percentuale dell'escursione altimetrica",
            "description": "Calcola la posizione topografica locale come percentuale dell'intervallo di elevazione dell'intorno.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dispari del filtro in celle (default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dispari del filtro in celle (default filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "relative_topographic_position": {
            "name": "Posizione topografica relativa",
            "description": "Calcola l'RTP usando i valori di elevazione minima, media e massima dell'intorno.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "filter_size_x": {
                "label": "Dimensione del filtro X",
                "description": "Larghezza dispari del filtro in celle (default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Dimensione del filtro Y",
                "description": "Altezza dispari del filtro in celle (default filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale."
              }
            }
          },
          "max_anisotropy_dev": {
            "name": "Deviazione massima di anisotropia",
            "description": "Calcola l'anisotropia massima della deviazione dell'elevazione su un intervallo di scale dell'intorno. Scritto da Dan Newman.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "min_scale": {
                "label": "Scala minima",
                "description": "Raggio minimo della semifinestra in celle (default 3)."
              },
              "max_scale": {
                "label": "Scala massima",
                "description": "Raggio massimo della semifinestra in celle (default 100)."
              },
              "step_size": {
                "label": "Dimensione del passo",
                "description": "Incremento di scala in celle (default 2). Alias: step."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il raster della magnitudine di anisotropia."
              },
              "output_scale": {
                "label": "Scala in uscita",
                "description": "Percorso di uscita opzionale per il raster che memorizza la scala della risposta massima."
              }
            }
          },
          "max_anisotropy_dev_signature": {
            "name": "Firma della deviazione massima di anisotropia",
            "description": "Calcola le firme di anisotropia multiscala per i siti puntuali in ingresso e scrive un report HTML. Scritto da Dan Newman.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso."
              },
              "points": {
                "label": "Punti",
                "description": "Percorso del file vettoriale in ingresso di tipo punto o multipunto."
              },
              "min_scale": {
                "label": "Scala minima",
                "description": "Raggio minimo della semifinestra in celle (default 1)."
              },
              "max_scale": {
                "label": "Scala massima",
                "description": "Raggio massimo della semifinestra in celle (default 100)."
              },
              "step_size": {
                "label": "Dimensione del passo",
                "description": "Incremento di scala in celle (default 1). Alias: step."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il rapporto HTML della firma."
              }
            }
          },
          "max_difference_from_mean": {
            "name": "Differenza massima dalla media",
            "description": "Calcola la differenza assoluta massima dalla media su un intervallo di scale dell'intorno.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "min_scale": {
                "label": "Scala minima",
                "description": "Raggio minimo della semifinestra in celle (default 1)."
              },
              "max_scale": {
                "label": "Scala massima",
                "description": "Raggio massimo della semifinestra in celle (default 100)."
              },
              "step_size": {
                "label": "Dimensione del passo",
                "description": "Incremento di scala in celle (default 1). Alias: step."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il raster della magnitudine della differenza massima."
              },
              "output_scale": {
                "label": "Scala in uscita",
                "description": "Percorso di uscita opzionale per il raster che memorizza la scala della risposta massima."
              }
            }
          },
          "max_elevation_deviation": {
            "name": "Deviazione altimetrica massima",
            "description": "Calcola la deviazione standardizzata massima dell'elevazione (DEVmax) su un intervallo di scale dell'intorno.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "min_scale": {
                "label": "Scala minima",
                "description": "Raggio minimo della semifinestra in celle (default 1)."
              },
              "max_scale": {
                "label": "Scala massima",
                "description": "Raggio massimo della semifinestra in celle (default 100)."
              },
              "step_size": {
                "label": "Dimensione del passo",
                "description": "Incremento di scala in celle (default 1). Alias: step."
              },
              "min_vertical": {
                "label": "Verticale minimo",
                "description": "Soglia minima di deviazione standard locale; le risposte a rilievo più debole sono soppresse (default 0.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il raster della magnitudine di DEVmax."
              },
              "output_scale": {
                "label": "Scala in uscita",
                "description": "Percorso di uscita opzionale per il raster che memorizza la scala della risposta massima."
              }
            }
          },
          "max_elev_dev_signature": {
            "name": "Firma della deviazione altimetrica massima",
            "description": "Calcola le firme multiscala della deviazione dell'elevazione per i siti puntuali in ingresso e scrive un report HTML.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso."
              },
              "points": {
                "label": "Punti",
                "description": "Percorso del file vettoriale in ingresso di tipo punto o multipunto."
              },
              "min_scale": {
                "label": "Scala minima",
                "description": "Raggio minimo della semifinestra in celle (default 1)."
              },
              "max_scale": {
                "label": "Scala massima",
                "description": "Raggio massimo della semifinestra in celle (default 100)."
              },
              "step_size": {
                "label": "Dimensione del passo",
                "description": "Incremento di scala in celle (default 10). Alias: step."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il rapporto HTML della firma."
              }
            }
          },
          "multiscale_curvatures": {
            "name": "Curvature multiscala",
            "description": "Calcola curvature multiscala e indici basati sulla curvatura da un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato. Alias: dem."
              },
              "curv_type": {
                "label": "Tipo di curvatura",
                "description": "Tipo di curvatura."
              },
              "out_mag": {
                "label": "Magnitudine in uscita",
                "description": "Percorso opzionale di uscita della magnitudine. Alias: output."
              },
              "out_scale": {
                "label": "Scala in uscita",
                "description": "Percorso opzionale di uscita della scala quando num_steps > 1."
              },
              "min_scale": {
                "label": "Scala minima",
                "description": "Raggio minimo dell'intorno di ricerca in celle della griglia."
              },
              "step": {
                "label": "Passo",
                "description": "Dimensione del passo."
              },
              "num_steps": {
                "label": "Numero di passi",
                "description": "Numero di passi di scala campionati."
              },
              "step_nonlinearity": {
                "label": "Non linearità del passo",
                "description": "Fattore di non linearità del passo."
              },
              "log_transform": {
                "label": "Trasformazione logaritmica",
                "description": "Applica la trasformazione logaritmica con segno. Alias: log."
              },
              "standardize": {
                "label": "Standardizza",
                "description": "Standardizza ogni scala in punteggi z."
              }
            }
          },
          "multiscale_elevated_index": {
            "name": "Indice multiscala di elevazione",
            "description": "Calcola l'indice di elevazione multiscala (MsEI) e i raster della scala chiave usando i residui dello spazio delle scale gaussiano.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "min_scale": {
                "label": "Scala minima",
                "description": "Raggio minimo di ricerca in celle della griglia (default 2)."
              },
              "num_steps": {
                "label": "Numero di passi",
                "description": "Numero di scale da valutare (default 100)."
              },
              "step_nonlinearity": {
                "label": "Non linearità del passo",
                "description": "Non linearità del passo di scala in [1,4] (default 1.1)."
              },
              "step_size": {
                "label": "Dimensione del passo",
                "description": "Dimensione del passo di base in celle (default 1). Alias: step."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il raster dell'indice."
              },
              "output_scale": {
                "label": "Scala in uscita",
                "description": "Percorso di uscita opzionale per il raster della scala chiave."
              }
            }
          },
          "multiscale_elevation_percentile": {
            "name": "Percentile di quota multiscala",
            "description": "Calcola il percentile di elevazione locale più estremo su un intervallo di scale dell'intorno.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "min_scale": {
                "label": "Scala minima",
                "description": "Raggio minimo della semifinestra in celle (default 4)."
              },
              "num_steps": {
                "label": "Numero di passi",
                "description": "Numero di scale da valutare (default 10)."
              },
              "step_size": {
                "label": "Dimensione del passo",
                "description": "Incremento di scala in celle (default 1). Alias: step."
              },
              "step_nonlinearity": {
                "label": "Non linearità del passo",
                "description": "Esponente di scalamento non lineare; >1.0 addensa le scale verso le risoluzioni più fini (default 1.0)."
              },
              "sig_digits": {
                "label": "Cifre significative",
                "description": "Cifre decimali significative usate durante il raggruppamento in percentili (default 3)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il raster della magnitudine del percentile."
              },
              "output_scale": {
                "label": "Scala in uscita",
                "description": "Percorso di uscita opzionale per il raster che memorizza la scala della risposta percentile più estrema."
              }
            }
          },
          "multiscale_low_lying_index": {
            "name": "Indice multiscala delle aree depresse",
            "description": "Calcola l'indice delle aree depresse multiscala (MsLLI) e i raster della scala chiave usando i residui dello spazio delle scale gaussiano.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "min_scale": {
                "label": "Scala minima",
                "description": "Raggio minimo di ricerca in celle della griglia (default 2)."
              },
              "num_steps": {
                "label": "Numero di passi",
                "description": "Numero di scale da valutare (default 100)."
              },
              "step_nonlinearity": {
                "label": "Non linearità del passo",
                "description": "Non linearità del passo di scala in [1,4] (default 1.1)."
              },
              "step_size": {
                "label": "Dimensione del passo",
                "description": "Dimensione del passo di base in celle (default 1). Alias: step."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il raster dell'indice."
              },
              "output_scale": {
                "label": "Scala in uscita",
                "description": "Percorso di uscita opzionale per il raster della scala chiave."
              }
            }
          },
          "multiscale_roughness": {
            "name": "Rugosità multiscala",
            "description": "Calcola la rugosità della superficie su un intervallo di scale dell'intorno.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "min_scale": {
                "label": "Scala minima",
                "description": "Raggio minimo della semifinestra in celle (default 1)."
              },
              "max_scale": {
                "label": "Scala massima",
                "description": "Raggio massimo della semifinestra in celle (default 100)."
              },
              "step_size": {
                "label": "Dimensione del passo",
                "description": "Incremento di scala in celle (default 1). Alias: step."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione Z quando le unità verticali e orizzontali differiscono (default 1.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il raster della magnitudine di rugosità."
              },
              "output_scale": {
                "label": "Scala in uscita",
                "description": "Percorso di uscita opzionale per il raster che memorizza la scala della risposta massima."
              }
            }
          },
          "multiscale_roughness_signature": {
            "name": "Firma della rugosità multiscala",
            "description": "Calcola le firme di rugosità multiscala per i siti puntuali in ingresso e scrive un report HTML.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso."
              },
              "points": {
                "label": "Punti",
                "description": "Percorso del file vettoriale in ingresso di tipo punto o multipunto."
              },
              "min_scale": {
                "label": "Scala minima",
                "description": "Raggio minimo della semifinestra in celle (default 1)."
              },
              "max_scale": {
                "label": "Scala massima",
                "description": "Raggio massimo della semifinestra in celle (default 100)."
              },
              "step_size": {
                "label": "Dimensione del passo",
                "description": "Incremento di scala in celle (default 1). Alias: step."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione Z quando le unità verticali e orizzontali differiscono (default 1.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il rapporto HTML della firma."
              }
            }
          },
          "multiscale_std_dev_normals": {
            "name": "Deviazione standard multiscala delle normali",
            "description": "Calcola la deviazione standard sferica massima delle normali alla superficie su un intervallo di scale campionato in modo non lineare.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "min_scale": {
                "label": "Scala minima",
                "description": "Raggio minimo della semifinestra in celle (default 4)."
              },
              "step": {
                "label": "Passo",
                "description": "Dimensione del passo di base in celle usata dallo schema di scala non lineare (default 1)."
              },
              "num_steps": {
                "label": "Numero di passi",
                "description": "Numero di scale campionate (default 10)."
              },
              "step_nonlinearity": {
                "label": "Non linearità del passo",
                "description": "Esponente di non linearità per lo schema di scala (default 1.0)."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione Z quando le unità verticali e orizzontali differiscono (default 1.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il raster della magnitudine della deviazione standard sferica."
              },
              "output_scale": {
                "label": "Scala in uscita",
                "description": "Percorso di uscita opzionale per il raster che memorizza la scala della risposta massima."
              }
            }
          },
          "multiscale_std_dev_normals_signature": {
            "name": "Firma della deviazione standard multiscala delle normali",
            "description": "Calcola le firme di scala della deviazione standard sferica per i siti puntuali in ingresso e scrive un report HTML.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso."
              },
              "points": {
                "label": "Punti",
                "description": "Percorso del file vettoriale in ingresso di tipo punto o multipunto."
              },
              "min_scale": {
                "label": "Scala minima",
                "description": "Raggio minimo della semifinestra in celle (default 4)."
              },
              "step": {
                "label": "Passo",
                "description": "Dimensione del passo di base in celle usata dallo schema di scala non lineare (default 1)."
              },
              "num_steps": {
                "label": "Numero di passi",
                "description": "Numero di scale campionate (default 10)."
              },
              "step_nonlinearity": {
                "label": "Non linearità del passo",
                "description": "Esponente di non linearità per lo schema di scala (default 1.0)."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Fattore di conversione Z quando le unità verticali e orizzontali differiscono (default 1.0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il rapporto HTML della firma."
              }
            }
          },
          "multiscale_topographic_position_image": {
            "name": "Immagine della posizione topografica multiscala",
            "description": "Crea un'immagine RGB compatta della posizione topografica multiscala a partire dai raster DEVmax locale, meso e ampio.",
            "params": {
              "local": {
                "label": "Locale",
                "description": "Percorso del raster DEVmax a scala locale in ingresso."
              },
              "meso": {
                "label": "Meso",
                "description": "Percorso del raster DEVmax a mesoscala in ingresso."
              },
              "broad": {
                "label": "Ampio",
                "description": "Percorso del raster DEVmax a scala ampia in ingresso."
              },
              "hillshade": {
                "label": "Ombreggiatura del rilievo",
                "description": "Percorso opzionale del raster di ombreggiatura usato per la modulazione dell'illuminazione."
              },
              "lightness": {
                "label": "Chiarezza",
                "description": "Fattore di scala della luminosità dell'immagine (default 1.2)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per il raster RGB compattato."
              }
            }
          },
          "topographic_position_animation": {
            "name": "Animazione della posizione topografica",
            "description": "Crea un visualizzatore HTML interattivo e una GIF animata di DEV o DEVmax su scale campionate in modo non lineare.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del raster DEM in ingresso o oggetto raster tipizzato."
              },
              "delay": {
                "label": "Ritardo",
                "description": "Ritardo GIF per fotogramma in millisecondi."
              },
              "image_height": {
                "label": "Altezza dell'immagine",
                "description": "Altezza dell'immagine visualizzata in pixel."
              },
              "label": {
                "label": "Etichetta",
                "description": "Etichetta opzionale mostrata nel visualizzatore."
              },
              "min_scale": {
                "label": "Scala minima",
                "description": "Raggio minimo della semifinestra in celle (default 1)."
              },
              "num_steps": {
                "label": "Numero di passi",
                "description": "Numero di passi dell'animazione (default 10)."
              },
              "palette": {
                "label": "Palette",
                "description": "Nome della palette usata per colorare i valori DEV."
              },
              "step_nonlinearity": {
                "label": "Non linearità del passo",
                "description": "Esponente di scala non lineare in [1, 4] che controlla la spaziatura dal grossolano al fine."
              },
              "use_dev_max": {
                "label": "Usa deviazione massima",
                "description": "Se true, i fotogrammi accumulano la risposta DEV assoluta più forte incontrata fino a quel punto."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso dell'HTML in uscita."
              }
            }
          },
          "topo_render": {
            "name": "Resa topografica",
            "description": "Crea una rappresentazione topografica pseudo-3D usando tinte di tavolozza, ombreggiatura del rilievo, ombre e attenuazione.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Percorso del raster DEM in ingresso."
              },
              "palette": {
                "label": "Palette",
                "description": "Nome della palette (soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "reverse_palette": {
                "label": "Inverti palette",
                "description": "Inverte l'ordine della palette."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut della sorgente luminosa in gradi [0, 360]."
              },
              "altitude": {
                "label": "Altitudine",
                "description": "Altezza della sorgente luminosa in gradi [0, 90]."
              },
              "clipping_polygon": {
                "label": "Poligono di ritaglio",
                "description": "Percorso opzionale di un vettoriale poligonale; vengono renderizzate solo le celle del DEM interne ai poligoni."
              },
              "background_hgt_offset": {
                "label": "Offset di altezza dello sfondo",
                "description": "Scarto verticale dalla quota minima del DEM al piano di sfondo."
              },
              "background_clr": {
                "label": "Colore dello sfondo",
                "description": "Colore RGBA dello sfondo come array [r,g,b,a]."
              },
              "attenuation_parameter": {
                "label": "Parametro di attenuazione",
                "description": "Esponente di attenuazione con la distanza (>= 0)."
              },
              "ambient_light": {
                "label": "Luce ambientale",
                "description": "Quantità di luce ambientale in [0, 1]."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Moltiplicatore di esagerazione verticale."
              },
              "max_dist": {
                "label": "Distanza massima",
                "description": "Distanza massima di ricerca delle ombre in unità mappa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita."
              }
            }
          },
          "add_surface_information": {
            "name": "Aggiungi informazioni di superficie",
            "description": "Aggiunge per ogni geometria le statistiche di superficie ricavate da un raster di elevazione — Z, lunghezza 3D della superficie, area 3D della superficie, Z minimo/massimo/medio e pendenza minima/massima/media — come campi attributo senza alterare la geometria in ingresso, come ArcGIS Add Surface Information.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (punti, linee o poligoni) con lo stesso CRS della superficie."
              },
              "surface": {
                "label": "Superficie",
                "description": "Raster di quota/superficie da campionare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "properties": {
                "label": "Proprietà",
                "description": "Elenco separato da virgole dei gruppi di proprietà di superficie da aggiungere: Z, SURFACE_LENGTH, SURFACE_AREA, MIN_MAX_MEAN_Z, MIN_MAX_AVG_SLOPE. Default: tutti quelli applicabili alla geometria del layer."
              },
              "sample_distance": {
                "label": "Distanza di campionamento",
                "description": "Intervallo di infittimento nelle unità del CRS per il campionamento di linee/perimetri; i segmenti lunghi vengono suddivisi in modo da seguire la superficie. Default: la dimensione della cella del raster."
              },
              "method": {
                "label": "Metodo",
                "description": "Campionamento della superficie ai vertici: 'bilinear' (default) o 'nearest'."
              },
              "band": {
                "label": "Banda",
                "description": "Banda della superficie da campionare, in base 1 (default 1)."
              }
            }
          },
          "add_z_information": {
            "name": "Aggiungi informazioni Z",
            "description": "Aggiunge alle geometrie 3D statistiche derivate dalla Z — Z puntuale/minima/massima/media, lunghezza 3D, area e volume della superficie mesh, statistiche di pendenza e conteggio dei vertici (ArcGIS Add Z Information). vector_summary_statistics e attribute_histogram riassumono gli attributi anziché la geometria, e polygon_volume / surface_volume misurano un raster rispetto a un piano di riferimento, quindi al momento nulla annota una geometria vettoriale 3D a partire dalla propria Z.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie 3D di tipo punto, linea, poligono o multipatch. Si noti che un valore Z pari a zero è indistinguibile da un Z assente, per cui 'features_with_z' è un'indicazione e non una garanzia."
              },
              "output": {
                "label": "Uscita",
                "description": "Geometrie in ingresso con i campi richiesti aggiunti. Se omesso, il risultato è memorizzato in memoria."
              },
              "properties": {
                "label": "Proprietà",
                "description": "Sottoinsieme separato da virgole di spot_z, min_z, max_z, mean_z, length_3d, surface_area, volume, min_slope, max_slope, mean_slope, point_count, vertex_count. Default: tutti (i campi non applicabili a una geometria restano nulli)."
              },
              "noise_filtering": {
                "label": "Filtraggio del rumore",
                "description": "Percentuale (0-50) esclusa da ciascuna estremità della distribuzione di Z prima di min_z / max_z, in modo che un singolo vertice anomalo non definisca gli estremi riportati. Default 0."
              }
            }
          },
          "adjust_3d_z": {
            "name": "Regola la Z in 3D",
            "description": "Applica una conversione di unità Z, un offset verticale e/o un fattore moltiplicativo alle ordinate Z delle geometrie 3D.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (le geometrie dovrebbero avere le ordinate Z)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "factor": {
                "label": "Fattore",
                "description": "Fattore moltiplicativo applicato a Z (default 1.0). Utile per l'esagerazione verticale o per una scala di datum."
              },
              "offset": {
                "label": "Offset",
                "description": "Scarto verticale additivo applicato dopo il fattore, nelle unità di destinazione (default 0.0)."
              },
              "from_unit": {
                "label": "Unità di origine",
                "description": "Preimpostazione dell'unità Z di origine (meters, feet, us_feet, centimeters, millimeters, kilometers, miles, yards, inches). Richiede to_unit."
              },
              "to_unit": {
                "label": "Unità di destinazione",
                "description": "Preimpostazione dell'unità Z di destinazione. Richiede from_unit. Z viene scalato di (metri per from_unit / metri per to_unit)."
              }
            }
          },
          "adjust_stream_to_raster": {
            "name": "Adatta il corso d'acqua al raster",
            "description": "Sposta i vertici delle polilinee dei corsi d'acqua sul percorso di flusso implicato da un DEM, in modo che l'idrografia vettoriale e la superficie di elevazione concordino, agganciando i nodi alle celle ad alto accumulo e tracciando la catena del puntatore D8 tra di essi. L'inverso dell'incisione dei corsi d'acqua. Come ArcGIS Adjust Stream To Raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie polilineari dei corsi d'acqua da correggere."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster di superficie che definisce il percorso di deflusso reale."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita dei corsi d'acqua corretti. Se omesso, il risultato è memorizzato in memoria."
              },
              "snap_distance": {
                "label": "Distanza di aggancio",
                "description": "Raggio di ricerca in unità mappa per agganciare i nodi a una cella ad alto accumulo (default: 5 celle)."
              },
              "channel_threshold": {
                "label": "Soglia dei canali",
                "description": "Valore di accumulo di flusso (in celle) pari o superiore al quale una cella è considerata incanalata ai fini dell'aggancio (default: 1% dell'accumulo massimo del DEM)."
              },
              "remove_disconnected": {
                "label": "Rimuovi i disconnessi",
                "description": "Scarta le linee che non possono essere instradate affatto (default true). Se false, vengono trasferite immutate e contrassegnate."
              },
              "output_stream_raster": {
                "label": "Raster dei corsi d'acqua in uscita",
                "description": "Raster opzionale che segna le celle dei corsi d'acqua corretti."
              },
              "output_flow_direction": {
                "label": "Direzione di flusso in uscita",
                "description": "Raster puntatore D8 opzionale derivato dal DEM."
              },
              "output_split_points": {
                "label": "Punti di divisione in uscita",
                "description": "Punti opzionali in cui il tracciamento del puntatore è fallito ed è stato usato un ripiego a costo minimo."
              }
            }
          },
          "aggregate_multidimensional_raster": {
            "name": "Aggrega raster multidimensionale",
            "description": "Raggruppa le fette di un cubo raster lungo la sua dimensione e riduce ogni gruppo a una banda in uscita — scene giornaliere in compositi mensili, un decennio in medie annuali (ArcGIS Aggregate Multidimensional Raster). cell_statistics del round 17 riduce una pila a un solo layer e non ha alcuna nozione di dimensione, mentre multidimensional_anomaly del round 16 esegue l'operazione opposta e preserva il numero di fette.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Un unico raster multibanda (ogni banda è una fetta) oppure un elenco separato da virgole di raster co-registrati."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster multibanda in uscita, una banda per gruppo. Se omesso, il risultato è memorizzato in memoria."
              },
              "dimension": {
                "label": "Dimensione",
                "description": "Nome della dimensione, usato solo nel rapporto (default 'slice')."
              },
              "dimension_values": {
                "label": "Valori della dimensione",
                "description": "Coordinata di ciascuna fetta separata da virgole, strettamente crescente. Per impostazione predefinita l'indice della fetta in base 1."
              },
              "aggregation_definition": {
                "label": "Definizione dell'aggregazione",
                "description": "'all' (default), 'interval_value', 'interval_count' o 'interval_ranges'."
              },
              "interval_value": {
                "label": "Valore dell'intervallo",
                "description": "Ampiezza del gruppo nelle unità della dimensione, per 'interval_value'."
              },
              "interval_count": {
                "label": "Numero di intervalli",
                "description": "Numero di gruppi di uguale ampiezza, per 'interval_count'."
              },
              "interval_ranges": {
                "label": "Intervalli",
                "description": "Gruppi espliciti nella forma 'start:end,start:end', per 'interval_ranges'."
              },
              "aggregation_method": {
                "label": "Metodo di aggregazione",
                "description": "'mean' (default), 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'range', 'std', 'sum' o 'variety'."
              },
              "percentile_value": {
                "label": "Valore del percentile",
                "description": "Percentile in [0, 100] per il metodo 'percentile' (default 50)."
              },
              "ignore_nodata": {
                "label": "Ignora il nodata",
                "description": "Salta le fette senza dati per ciascuna cella (default true). Se false, una sola fetta senza dati rende senza dati l'intero gruppo in quella cella."
              }
            }
          },
          "aggregate_points": {
            "name": "Aggrega punti",
            "description": "Raggruppa i punti che ricadono entro una distanza di aggregazione l'uno dall'altro in poligoni di cluster (involucro convesso o unione di buffer), ciascuno con il conteggio dei punti e somme opzionali di campi per cluster, come ArcGIS Aggregate Points.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso (Point o MultiPoint)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "aggregation_distance": {
                "label": "Distanza di aggregazione",
                "description": "Distanza massima tra i punti perché appartengano allo stesso cluster (unità mappa)."
              },
              "min_points": {
                "label": "Punti minimi",
                "description": "Numero minimo di punti che un cluster deve avere per essere prodotto (default 2; impostare 1 per mantenere i punti isolati)."
              },
              "method": {
                "label": "Metodo",
                "description": "'convex_hull' (default) oppure 'buffer' (unione bufferizzata poi erosa)."
              },
              "sum_fields": {
                "label": "Campi da sommare",
                "description": "Campi numerici separati da virgole da sommare per cluster (colonne di uscita 'sum_<field>')."
              }
            }
          },
          "aggregate_polygons": {
            "name": "Aggrega poligoni",
            "description": "Combina i poligoni entro una distanza di aggregazione in poligoni più grandi (chiusura morfologica), con filtri di area minima e dimensione minima dei buchi e un layer di barriere opzionale che l'aggregazione non può attraversare.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "aggregation_distance": {
                "label": "Distanza di aggregazione",
                "description": "I poligoni entro questa distanza (unità del CRS) l'uno dall'altro vengono aggregati. Imposta il raggio di chiusura morfologica alla metà di questo valore."
              },
              "min_area": {
                "label": "Area minima",
                "description": "Scarta i poligoni aggregati la cui area (unità del CRS al quadrato) è inferiore a questo valore. Default: mantenere tutti."
              },
              "min_hole_size": {
                "label": "Dimensione minima dei buchi",
                "description": "Riempie i buchi interni la cui area (unità del CRS al quadrato) è inferiore a questo valore. Default: mantenere tutti i buchi."
              },
              "barrier": {
                "label": "Barriera",
                "description": "Layer vettoriale opzionale di barriere (linee o poligoni) che l'aggregazione non può attraversare; i ponti che scavalcano una barriera vengono recisi. I poligoni in ingresso esistenti non vengono mai suddivisi."
              }
            }
          },
          "align_features": {
            "name": "Allinea elementi",
            "description": "Adatta i bordi delle linee/poligoni sorgente a un layer di destinazione affidabile vicino entro una distanza di ricerca, spostando intere sequenze di bordi (non solo le estremità) con una transizione graduale e confini condivisi coincidenti, come ArcGIS Align Features.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale di origine da allineare (linee o poligoni)."
              },
              "target": {
                "label": "Obiettivo",
                "description": "Layer di destinazione attendibile (linee, o bordi di poligoni) verso cui vengono attirati i vertici di origine."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "search_distance": {
                "label": "Distanza di ricerca",
                "description": "Distanza massima (unità del CRS) di cui un vertice di origine può essere attirato verso la destinazione. Obbligatorio."
              },
              "match_field": {
                "label": "Campo di corrispondenza",
                "description": "Campo attributo opzionale dell'origine; solo i bordi di destinazione il cui valore di target_match_field corrisponde sono candidati per i vertici di quella geometria."
              },
              "target_match_field": {
                "label": "Campo di corrispondenza di destinazione",
                "description": "Campo attributo di destinazione confrontato con match_field. Se omesso, assume il nome di match_field; richiede match_field."
              }
            }
          },
          "analyze_changes_ccdc": {
            "name": "Analizza i cambiamenti con CCDC",
            "description": "Rilevamento continuo dei cambiamenti CCDC su una serie temporale densa di immagini (come ArcGIS Analyze Changes Using CCDC): regressione OLS armonica (stagionale) per pixel, poi un test scorrevole sui residui (k×RMSE, numero minimo di anomalie consecutive) che dichiara le rotture e riadatta i segmenti. Produce raster di conteggio delle rotture, data della prima rottura e RMSE/pendenza/ampiezza del segmento iniziale — la storia stagionale dei cambiamenti a rotture multiple che landtrendr annuale e change_vector_analysis a due date non possono produrre.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Un unico raster multibanda (ogni banda è una fetta temporale) OPPURE un elenco separato da virgole di percorsi di raster a banda singola co-registrati, in ordine temporale."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster in uscita del conteggio delle rotture (rotture rilevate per pixel). Se omesso, il risultato è memorizzato in memoria."
              },
              "dates": {
                "label": "Date",
                "description": "Date numeriche separate da virgole (anni decimali o numeri di giorno) corrispondenti alle fette. Default 0,1,2,..."
              },
              "period": {
                "label": "Periodo",
                "description": "Durata di un ciclo stagionale nelle unità di 'dates' (default 1.0 per gli anni decimali; usare 365 per i numeri di giorno)."
              },
              "harmonic_order": {
                "label": "Ordine armonico",
                "description": "Numero di coppie armoniche seno/coseno alla frequenza annuale (default 1 = solo annuale; 2 aggiunge il termine semestrale)."
              },
              "change_threshold": {
                "label": "Soglia di cambiamento",
                "description": "Soglia di anomalia come multiplo k dell'RMSE del segmento (default 3.0). Un residuo > k×RMSE contrassegna un'osservazione."
              },
              "min_consecutive": {
                "label": "Minimo consecutivi",
                "description": "Numero di osservazioni contrassegnate consecutive necessarie per dichiarare una rottura (default 3)."
              },
              "min_observations": {
                "label": "Osservazioni minime",
                "description": "Numero minimo di osservazioni valide usate per inizializzare il modello armonico di un segmento (default 12). I pixel con meno osservazioni valide diventano senza dati."
              },
              "band": {
                "label": "Banda",
                "description": "Per un ingresso a elenco separato da virgole: banda in base 1 da leggere da ciascun raster (default 1). Ignorato per un unico ingresso multibanda."
              },
              "break_date_output": {
                "label": "Data di rottura in uscita",
                "description": "Raster opzionale della data della prima rottura rilevata per pixel (senza dati dove non vi sono rotture)."
              },
              "rmse_output": {
                "label": "RMSE in uscita",
                "description": "Raster opzionale dell'RMSE del modello armonico del segmento iniziale."
              },
              "slope_output": {
                "label": "Pendenza in uscita",
                "description": "Raster opzionale del coefficiente di trend lineare (pendenza) del segmento iniziale."
              },
              "amplitude_output": {
                "label": "Ampiezza in uscita",
                "description": "Raster opzionale dell'ampiezza della prima armonica del segmento iniziale sqrt(a²+b²)."
              }
            }
          },
          "apply_radiometric_calibration": {
            "name": "Applica calibrazione radiometrica",
            "description": "Converte i numeri digitali grezzi SAR in retrodiffusione calibrata — beta nought, sigma nought o gamma nought — in modo che le acquisizioni diventino fisicamente confrontabili e si possano applicare le soglie pubblicate (ArcGIS Apply Radiometric Calibration). Nulla in nessuno dei due registri lo fa: rescale_value_range è uno stiramento lineare senza significato radiometrico, e multilook, sar_coherence, i filtri speckle di Lee e compute_sar_indices consumano qualunque valore venga loro fornito.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster SAR in numeri digitali, ampiezza, intensità o dB (vedere 'input_units')."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster in uscita del backscatter calibrato. Se omesso, il risultato è memorizzato in memoria."
              },
              "calibration_type": {
                "label": "Tipo di calibrazione",
                "description": "'sigma0' (default), 'beta0' o 'gamma0'. sigma0 e gamma0 richiedono 'incidence_angle'."
              },
              "calibration_constant": {
                "label": "Costante di calibrazione",
                "description": "Costante di calibrazione del sensore A (default 1.0). Ignorata quando è fornito 'calibration_lut'."
              },
              "calibration_lut": {
                "label": "LUT di calibrazione",
                "description": "Raster co-registrato opzionale delle costanti di calibrazione A per cella, che sostituisce 'calibration_constant'."
              },
              "incidence_angle": {
                "label": "Angolo di incidenza",
                "description": "Angolo di incidenza locale in gradi: una costante o il percorso di un raster co-registrato. Obbligatorio per 'sigma0' e 'gamma0'."
              },
              "input_units": {
                "label": "Unità di ingresso",
                "description": "'dn' (default), 'amplitude', 'intensity' o 'db'. dn e amplitude vengono elevati al quadrato per ottenere la potenza; db viene prima delinearizzato."
              },
              "output_units": {
                "label": "Unità di uscita",
                "description": "'linear' (default) o 'db'."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da calibrare, in base 1 (default 1)."
              }
            }
          },
          "apportion_polygon": {
            "name": "Ripartisci poligono",
            "description": "Trasferisce attributi numerici da un layer poligonale sorgente a un layer poligonale di destinazione, ripartiti in base all'area di sovrapposizione (riaggregazione dasimetrica tra sistemi di zone), come ArcGIS Apportion Polygon.",
            "params": {
              "target": {
                "label": "Obiettivo",
                "description": "Layer poligonale di destinazione (riceve i valori ripartiti; le sue geometrie e i suoi attributi sono preservati)."
              },
              "source": {
                "label": "Sorgente",
                "description": "Layer poligonale di origine che contiene i valori da distribuire."
              },
              "fields": {
                "label": "Campi",
                "description": "Nome o nomi dei campi numerici dell'origine da ripartire, separati da virgole."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (una copia della destinazione con le colonne ripartite). Se omesso, il risultato è memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "'area' (default; ripartizione per area di sovrapposizione) o 'weight' (ripartizione per area di sovrapposizione moltiplicata per il 'weight_field' della destinazione)."
              },
              "weight_field": {
                "label": "Campo peso",
                "description": "Campo numerico della destinazione usato come peso aggiuntivo quando method=weight."
              },
              "suffix": {
                "label": "Suffisso",
                "description": "Suffisso per le colonne ripartite in uscita. Default '_app'."
              }
            }
          },
          "areal_interpolation": {
            "name": "Interpolazione areale",
            "description": "Predice valori aggregati per poligoni di destinazione a partire da poligoni sorgente con una geografia diversa, adattando una superficie sottostante liscia e reintegrandola anziché ponderare per area (ArcGIS Areal Interpolation Layer To Polygons). apportion_polygon assume che la quantità sia uniforme all'interno di ogni poligono sorgente — il classico fallimento del problema dell'unità areale modificabile — e non fornisce errori standard; la suite di kriging inclusa è interamente a supporto puntuale e non può accettare osservazioni poligonali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Poligoni di origine che contengono il campo misurato."
              },
              "target": {
                "label": "Obiettivo",
                "description": "Poligoni di destinazione per cui prevedere i valori."
              },
              "field": {
                "label": "Campo",
                "description": "Campo del valore numerico sui poligoni di origine."
              },
              "output": {
                "label": "Uscita",
                "description": "Poligoni di destinazione con PREDICTED, PRED_STD_ERR e le diagnostiche aggiunti. Se omesso, il risultato è memorizzato in memoria."
              },
              "field_type": {
                "label": "Tipo di campo",
                "description": "'count' (default): un totale estensivo, riscalato per preservare la somma dell'origine. 'average': una media intensiva, prevista direttamente senza riscalamento."
              },
              "discretization": {
                "label": "Discretizzazione",
                "description": "Numero approssimativo di punti interni usati per rappresentare il supporto areale di ciascun poligono (default 25). Valori più alti sono più accurati e molto più lenti."
              },
              "model": {
                "label": "Modello",
                "description": "Modello di variogramma: 'exponential' (default), 'spherical' o 'gaussian'."
              },
              "preserve_total": {
                "label": "Preserva il totale",
                "description": "Riscala le predizioni di conteggio in modo che il totale della destinazione corrisponda a quello dell'origine (default true per 'count', sempre disattivato per 'average'). Applicato solo quando le destinazioni coprono le origini — il fattore applicato è riportato come 'mass_scale', così una copertura parziale risulta visibile."
              }
            }
          },
          "attribute_uncertainty": {
            "name": "Incertezza degli attributi",
            "description": "Propagazione dell'errore Monte Carlo con seme su un attributo incerto (come ArcGIS Attribute Uncertainty): estrae realizzazioni NORMAL/UNIFORM da un campo di errore per geometria o da una coppia di limiti e aggiunge le statistiche media/deviazione standard/p5/p50/p95/CV.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale (o tabella) in ingresso con l'attributo incerto."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo numerico che contiene la stima (media/centro della distribuzione) per ciascuna geometria."
              },
              "error_field": {
                "label": "Campo errore",
                "description": "Campo numerico che contiene l'incertezza simmetrica: un errore standard per NORMAL o una semiampiezza per UNIFORM. Fornire questo OPPURE entrambi lower_field/upper_field."
              },
              "lower_field": {
                "label": "Campo inferiore",
                "description": "Campo numerico con il limite inferiore del valore. Da usare insieme a upper_field invece di error_field."
              },
              "upper_field": {
                "label": "Campo superiore",
                "description": "Campo numerico con il limite superiore del valore. Da usare insieme a lower_field invece di error_field."
              },
              "distribution": {
                "label": "Distribuzione",
                "description": "Distribuzione dell'errore: NORMAL (default) o UNIFORM."
              },
              "iterations": {
                "label": "Iterazioni",
                "description": "Numero di realizzazioni Monte Carlo per geometria (default 1000)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme per il generatore di numeri casuali deterministico (default 1)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer vettoriale in uscita con le statistiche aggiunte. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "band_collection_statistics": {
            "name": "Statistiche della collezione di bande",
            "description": "Minimo/massimo/media/deviazione standard per banda più le matrici di covarianza e correlazione tra le bande di una pila raster (come ArcGIS Band Collection Statistics) — il riepilogo multivariato (precursore di PCA / classificazione) che manca alla suite inclusa; distinto da cell_statistics per pixel.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Un unico raster multibanda (ogni banda è un layer) oppure un elenco separato da virgole di raster co-registrati."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso CSV opzionale per il rapporto delle statistiche. Le matrici sono comunque sempre restituite nel risultato."
              },
              "detail": {
                "label": "Dettaglio",
                "description": "'detailed' (default) include le matrici di covarianza/correlazione; 'brief' restituisce solo le statistiche per banda."
              }
            }
          },
          "bivariate_spatial_association": {
            "name": "Associazione spaziale bivariata",
            "description": "Statistica L di Lee globale e locale che misura dove due variabili continue co-variano spazialmente, con un valore p da test di permutazione con seme e una classe Alto-Alto/Alto-Basso/Basso-Alto/Basso-Basso per geometria — come ArcGIS Bivariate Spatial Association. La controparte a campo continuo di colocation_analysis.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso con due campi numerici."
              },
              "x_field": {
                "label": "Campo X",
                "description": "Campo della prima variabile numerica."
              },
              "y_field": {
                "label": "Campo Y",
                "description": "Campo della seconda variabile numerica."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer in uscita con i campi L locale, p-value e classe. Se omesso, il risultato è memorizzato in memoria."
              },
              "neighbors": {
                "label": "Vicini",
                "description": "Numero di vicini più prossimi per i pesi spaziali (default 8)."
              },
              "permutations": {
                "label": "Permutazioni",
                "description": "Numero di permutazioni per il test di significatività (default 199; 0 lo disattiva)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme del generatore di numeri casuali per le permutazioni (default 1), per risultati riproducibili."
              }
            }
          },
          "block_statistics": {
            "name": "Statistiche per blocco",
            "description": "Partiziona un raster in blocchi non sovrapposti, riduce ciascuno con una statistica e riscrive quel valore in ogni cella del blocco alla risoluzione di ingresso (ArcGIS Block Statistics). Completa focal_statistics (finestra sovrapposta), zonal_statistics (per layer di zone) e cell_statistics (attraverso una pila) inclusi; a differenza di aggregate_raster incluso preserva la dimensione della cella, così ingresso - media del blocco fornisce una superficie dei residui locali, e aggiunge le statistiche categoriche maggioranza/minoranza/mediana/varietà.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "statistic": {
                "label": "Statistica",
                "description": "Uno tra mean (default), majority, maximum, median, minimum, minority, range, std, sum, variety."
              },
              "neighborhood": {
                "label": "Intorno",
                "description": "Forma del blocco: rectangle (default), circle, annulus o wedge."
              },
              "size": {
                "label": "Dimensione",
                "description": "Dimensioni del blocco in celle: 'width,height' per rectangle (default '3,3'), 'radius' per circle/wedge, oppure 'inner,outer' per annulus."
              },
              "start_angle": {
                "label": "Angolo iniziale",
                "description": "Angolo iniziale del settore in gradi in senso antiorario da est (default 0)."
              },
              "end_angle": {
                "label": "Angolo finale",
                "description": "Angolo finale del settore in gradi in senso antiorario da est (default 90)."
              },
              "ignore_nodata": {
                "label": "Ignora il nodata",
                "description": "Se true (default), i blocchi sono calcolati solo dalle celle valide; se false, una qualsiasi cella senza dati rende senza dati l'intero blocco."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da leggere, in base 1 (default 1)."
              }
            }
          },
          "boundary_clean": {
            "name": "Pulizia dei confini",
            "description": "Liscia i confini delle zone di un raster categorico e rimuove lo speckle tramite filtraggio di maggioranza o pulizia dei confini per espansione/contrazione, la pulizia standard prima della poligonizzazione — come ArcGIS Boundary Clean / Majority Filter.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster categoriale (a valori interi) in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "'majority' (rimozione dello speckle per maggioranza dei vicini; default) o 'expand_shrink' (lisciamento Boundary Clean)."
              },
              "neighbors": {
                "label": "Vicini",
                "description": "Connettività dell'intorno: 4 (rook) o 8 (queen; default)."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Solo per la modalità majority: 'majority' (maggioranza stretta dei vicini; default) o 'half' (almeno la metà)."
              },
              "iterations": {
                "label": "Iterazioni",
                "description": "Numero di passaggi da eseguire (default 1)."
              },
              "sort": {
                "label": "Ordina",
                "description": "Solo per la modalità expand_shrink: priorità delle zone in base al numero di celle — 'descending' (vincono le zone più grandi; default), 'ascending' (vincono le zone più piccole) o 'none'."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da leggere, in base 1 (default 1)."
              }
            }
          },
          "buffer_3d": {
            "name": "Buffer 3D",
            "description": "Crea buffer di punti e linee 3D in geometria volumetrica (sfere e capsule) emessa come superficie triangolata, come ArcGIS Buffer 3D.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer 3D in ingresso di tipo punto o polilinea (una Z mancante è trattata come 0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              },
              "distance": {
                "label": "Distanza",
                "description": "Raggio del buffer in unità mappa."
              },
              "distance_field": {
                "label": "Campo distanza",
                "description": "Campo opzionale del raggio per ciascuna geometria, che sostituisce 'distance'."
              },
              "shape": {
                "label": "Forma",
                "description": "round (default; calotte emisferiche) o flat (cilindro con estremità piatte)."
              },
              "quality": {
                "label": "Qualità",
                "description": "Risoluzione della tassellatura: segmenti lungo la circonferenza (default 12, minimo 4, massimo 64)."
              }
            }
          },
          "buffer_vector": {
            "name": "Buffer vettoriale",
            "description": "Estende le geometrie di una distanza specificata, creando buffer poligonali con stili di estremità/giunzione personalizzabili. La dissolvenza opzionale fonde i buffer sovrapposti in poligoni unificati.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "distance": {
                "label": "Distanza",
                "description": "Distanza del buffer in unità mappa."
              },
              "quadrant_segments": {
                "label": "Segmenti per quadrante",
                "description": "Risoluzione degli archi in segmenti per quadrante; per impostazione predefinita 8."
              },
              "cap_style": {
                "label": "Stile dell'estremità",
                "description": "Stile delle estremità delle linee: round, flat o square."
              },
              "join_style": {
                "label": "Stile della giunzione",
                "description": "Stile di giunzione degli angoli: round, bevel o mitre."
              },
              "mitre_limit": {
                "label": "Limite dello smusso",
                "description": "Limite della giunzione a punta usato quando join_style=mitre; per impostazione predefinita 5.0."
              },
              "dissolve": {
                "label": "Dissolvi",
                "description": "Dissolve i buffer sovrapposti in un unico poligono unificato; per impostazione predefinita false."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita."
              }
            }
          },
          "build_balanced_zones": {
            "name": "Costruisci zone bilanciate",
            "description": "Raggruppa poligoni contigui in un numero obiettivo di zone connesse che bilanciano il conteggio delle geometrie, la somma di un attributo o l'omogeneità di un attributo, usando il partizionamento ad albero ricoprente SKATER.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer poligonale in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "zones": {
                "label": "Zone",
                "description": "Numero di zone da creare."
              },
              "criterion": {
                "label": "Criterio",
                "description": "Obiettivo di bilanciamento: 'homogeneity' (default), 'equal_count' o 'equal_sum' (del primo campo)."
              },
              "fields": {
                "label": "Campi",
                "description": "Campo o campi numerici di analisi separati da virgole. Obbligatori per 'homogeneity' e 'equal_sum'; determinano i pesi degli archi dell'albero di copertura."
              },
              "contiguity": {
                "label": "Contiguità",
                "description": "Regola di adiacenza: 'rook' (lato condiviso, default) o 'queen' (lato o vertice condiviso)."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Distanza massima entro cui due segmenti di confine sono considerati condivisi (rook). Default 1e-6."
              }
            }
          },
          "build_seamlines": {
            "name": "Costruisci linee di giunzione",
            "description": "Dato un insieme di raster sovrapposti (e impronte opzionali), calcola dove ogni immagine debba essere tagliata affinché il mosaico si unisca lungo una giunzione minimamente visibile, emettendo un poligono di linea di giunzione non sovrapposto per immagine tramite un'assegnazione di Voronoi, per ordine di priorità, radiometrica o sensibile ai bordi. Come ArcGIS Build Seamlines.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Percorsi dei raster da mosaicare, separati da virgole o punti e virgola."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita dei poligoni delle linee di giunzione (una geometria per raster in ingresso). Se omesso, il risultato è memorizzato in memoria."
              },
              "footprints": {
                "label": "Impronte",
                "description": "Layer poligonale opzionale che indica l'estensione valida di ciascun raster, nell'ordine degli ingressi. Se omesso, viene derivata dai dati validi."
              },
              "method": {
                "label": "Metodo",
                "description": "'voronoi' (default), 'order', 'radiometry' o 'edge_detection'."
              },
              "sort_ascending": {
                "label": "Ordina in modo crescente",
                "description": "Per il metodo 'order': true (default) dà priorità ai raster precedenti, false a quelli successivi."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di analisi (default: la dimensione di cella più fine tra gli ingressi)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 usata per i metodi radiometrici (default 1)."
              },
              "min_region_size": {
                "label": "Dimensione minima della regione",
                "description": "Riassegna a un'immagine vicina le regioni assegnate più piccole di questo numero di celle (default 0, ovvero mantenerle tutte)."
              },
              "blend_width": {
                "label": "Larghezza di fusione",
                "description": "Ampiezza della sfumatura in unità mappa, scritta come attributo per il mosaico successivo (default 0)."
              },
              "blend_type": {
                "label": "Tipo di fusione",
                "description": "'both' (default), 'inside' o 'outside'; scritto come attributo."
              }
            }
          },
          "calculate_adjacent_fields": {
            "name": "Calcola campi adiacenti",
            "description": "Popola otto campi direzionali di fogli adiacenti (N, NE, E, SE, S, SW, W, NW) su ogni tessera di una griglia indice di serie di mappe con il nome della pagina adiacente, per etichette a margine del tipo \"continua sul foglio …\" — come ArcGIS Calculate Adjacent Fields.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Griglia indice poligonale della serie di mappe in ingresso (ad esempio l'uscita di grid_index_features)."
              },
              "page_name_field": {
                "label": "Campo nome della pagina",
                "description": "Campo il cui valore etichetta ciascuna pagina (scritto nei campi direzionali dei vicini)."
              },
              "output": {
                "label": "Uscita",
                "description": "Vettoriale poligonale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "include_diagonal": {
                "label": "Includi la diagonale",
                "description": "Popola anche i quattro campi diagonali (NE, SE, SW, NW) dalle tessere che si toccano negli angoli. Default true."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Quantizza i vertici su una griglia di questa dimensione (unità del CRS) prima di confrontare i bordi. Default 0 (coordinate esatte)."
              }
            }
          },
          "calculate_central_meridian_and_parallels": {
            "name": "Calcola meridiano centrale e paralleli",
            "description": "Calcola per ogni geometria un meridiano centrale e due paralleli standard dall'estensione della geometria stessa, per pagine di serie di mappe e atlanti, come ArcGIS Calculate Central Meridian And Parallels.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie in ingresso in coordinate geografiche (longitudine/latitudine), tipicamente una griglia di pagine di grid_index_features."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              },
              "field": {
                "label": "Campo",
                "description": "Nome del campo del meridiano centrale da scrivere (default 'central_meridian')."
              },
              "standard_offset": {
                "label": "Offset standard",
                "description": "Frazione dell'intervallo di latitudine usata per rientrare ciascun parallelo standard rispetto al bordo della geometria (default 0.1667, la regola di 1/6 di Esri). Deve essere in [0, 0.5)."
              }
            }
          },
          "calculate_composite_index": {
            "name": "Calcola indice composito",
            "description": "Combina più attributi numerici in un indice composito (come ArcGIS Calculate Composite Index): ridimensionamento per variabile (min-max/z-score/percentile) con inversione opzionale, combinazione ponderata (media/somma/media geometrica) e ridimensionamento dell'uscita — il fratello vettoriale di fuzzy_overlay.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale (o tabella) in ingresso con campi di variabili numeriche."
              },
              "fields": {
                "label": "Campi",
                "description": "Campi delle variabili separati da virgole; aggiungere ':reverse' a un campo i cui valori alti devono abbassare l'indice (ad esempio 'income:reverse,unemployment')."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer vettoriale in uscita con i campi dell'indice aggiunti. Se omesso, il risultato è memorizzato in memoria."
              },
              "scaling": {
                "label": "Ridimensionamento",
                "description": "Scalamento per variabile: 'minmax' (default), 'zscore', 'percentile' o 'none'."
              },
              "weights": {
                "label": "Pesi",
                "description": "Pesi separati da virgole corrispondenti a 'fields' (default: pesi uguali)."
              },
              "combine": {
                "label": "Combina",
                "description": "Modalità di combinazione delle variabili scalate: 'mean' (default), 'sum' o 'geometric_mean'."
              },
              "output_range": {
                "label": "Intervallo in uscita",
                "description": "Riscalamento dell'indice combinato: 'minmax' (0–1, default), 'zero_to_100', 'zscore' o 'none'."
              }
            }
          },
          "calculate_distance_band": {
            "name": "Calcola banda di distanza",
            "description": "Riporta la distanza minima, media e massima alla quale ogni geometria ha almeno N vicini (come ArcGIS Calculate Distance Band from Neighbor Count) — la diagnostica di soglia che garantisce che nessuna geometria resti senza vicini prima delle statistiche spaziali basate sulla distanza. generate_spatial_weights_matrix incluso costruisce la matrice ma non riporta mai questa banda.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale/di geometrie in ingresso (CRS proiettato; distanze nelle sue unità)."
              },
              "neighbors": {
                "label": "Vicini",
                "description": "Numero di vicini k (>= 1). Default 1."
              },
              "distance_method": {
                "label": "Metodo di distanza",
                "description": "'euclidean' (default) o 'manhattan'."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso CSV opzionale per una tabella feature_id,kth_neighbor_distance."
              }
            }
          },
          "calculate_end_time": {
            "name": "Calcola ora di fine",
            "description": "Riempie un campo di tempo finale con il tempo iniziale del record successivo all'interno di ogni gruppo di entità, trasformando osservazioni istantanee in record con estensione temporale (ArcGIS Calculate End Time). transform_fields esegue trasformazioni per valore e summary_statistics aggrega i gruppi, ma nulla eseguiva un riempimento temporale ordinato per riga.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale o tabella in ingresso."
              },
              "start_field": {
                "label": "Campo iniziale",
                "description": "Campo di data e ora: un valore epoch numerico o una stringa di data/data-ora in formato ISO-8601."
              },
              "end_field": {
                "label": "Campo finale",
                "description": "Campo che riceve l'ora di fine (default 'END_TIME'). Viene creato se assente, sovrascritto se presente."
              },
              "id_fields": {
                "label": "Campi ID",
                "description": "Campi di raggruppamento separati da virgole o punti e virgola. Le ore di fine sono derivate solo all'interno di un gruppo, mai attraverso i confini tra gruppi."
              },
              "last_record": {
                "label": "Ultimo record",
                "description": "Cosa scrivere per l'ultima riga di ciascun gruppo: 'null' (default), 'same_as_start' o 'duration' (inizio + default_duration)."
              },
              "default_duration": {
                "label": "Durata predefinita",
                "description": "Secondi aggiunti all'inizio per last_record 'duration'."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "calculate_grid_convergence_angle": {
            "name": "Calcola angolo di convergenza del reticolo",
            "description": "Calcola, per ogni geometria, l'angolo di convergenza del reticolo tra il nord del reticolo e il nord vero a partire da lon/lat del centroide e da un meridiano centrale (per impostazione predefinita il meridiano centrale UTM della geometria stessa), scrivendolo in un campo per la corretta rotazione di simboli/etichette su mappe proiettate — come ArcGIS Calculate Grid Convergence Angle. Convenzione geografica (in senso orario da nord) o aritmetica (in senso antiorario da est). Pura matematica, senza PROJ; non correlato alla metrica del terreno convergence_index inclusa. La geometria è letta come gradi lon/lat.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (qualsiasi tipo di geometria) in coordinate geografiche (lon/lat in gradi, EPSG:4326)."
              },
              "angle_field": {
                "label": "Campo angolo",
                "description": "Nome del campo in virgola mobile che conterrà l'angolo di convergenza in gradi. Default 'GRID_CONV'."
              },
              "angle_type": {
                "label": "Tipo di angolo",
                "description": "Convenzione angolare: 'geographic' (gradi in senso orario da nord, positivi verso est) o 'arithmetic' (gradi in senso antiorario da est, 90 − geographic). Default 'geographic'."
              },
              "central_meridian": {
                "label": "Meridiano centrale",
                "description": "Longitudine del meridiano centrale in gradi. Se omessa, ogni geometria usa il meridiano centrale della propria zona UTM derivato dalla sua longitudine."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "calculate_missing_z_values": {
            "name": "Calcola valori Z mancanti",
            "description": "Riempie i valori Z segnaposto o assenti lungo le geometrie 3D interpolando dai valori Z validi su entrambi i lati, come ArcGIS Calculate Missing Z Values.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer di geometrie in ingresso con vertici 3D."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              },
              "placeholder": {
                "label": "Segnaposto",
                "description": "Valore sentinella che indica una Z mancante (ad esempio -9999). I vertici del tutto privi di Z sono sempre trattati come mancanti."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di riempimento: 'linear' (default; interpolazione in base alla distanza lungo la geometria) o 'nearest'."
              },
              "extrapolate": {
                "label": "Estrapola",
                "description": "Riempie le lacune iniziali/finali estendendo il vertice valido più vicino (default false; i vertici non riempiti vengono invece conteggiati)."
              }
            }
          },
          "calculate_motion_statistics": {
            "name": "Calcola statistiche di movimento",
            "description": "Annota i punti di traccia con timestamp con statistiche di movimento — velocità, accelerazione, rilevamento, distanza del segmento e cumulata, tempo trascorso e flag di inattività — raggruppati per traccia e ordinati per tempo, come ArcGIS Calculate Motion Statistics.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso di osservazioni con marca temporale."
              },
              "track_field": {
                "label": "Campo traccia",
                "description": "Campo che identifica ciascuna traccia/oggetto in movimento."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo che contiene l'istante di ciascun punto: secondi numerici o una marca temporale ISO-8601."
              },
              "output": {
                "label": "Uscita",
                "description": "Vettoriale puntuale in uscita (attributi originali + campi di movimento). Se omesso, il risultato è memorizzato in memoria."
              },
              "window": {
                "label": "Finestra",
                "description": "Numero di punti precedenti per la 'avg_speed' lisciata (default 1 = istantanea)."
              },
              "idle_distance": {
                "label": "Distanza di inattività",
                "description": "Raggio di inattività: un punto è inattivo quando l'oggetto in movimento non ha percorso più di questa distanza negli ultimi idle_duration secondi. Default 0 (rilevamento dell'inattività disattivato)."
              },
              "idle_duration": {
                "label": "Durata di inattività",
                "description": "Finestra retrospettiva (in secondi) per il rilevamento dell'inattività. Default 60."
              }
            }
          },
          "calculate_polygon_main_angle": {
            "name": "Calcola angolo principale del poligono",
            "description": "Scrive l'orientamento dominante di ogni poligono (la direzione del lato lungo del suo rettangolo di delimitazione di area minima, tramite rotating calipers) in un campo angolo — come ArcGIS Calculate Polygon Main Angle. L'orientamento vettoriale per poligono che manca a patch_orientation, incluso e solo raster; alimenta la rotazione di simboli/etichette.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer poligonale in uscita con il campo dell'angolo aggiunto. Se omesso, il risultato è memorizzato in memoria."
              },
              "angle_field": {
                "label": "Campo angolo",
                "description": "Nome del campo dell'angolo da scrivere (default 'MainAngle')."
              },
              "convention": {
                "label": "Convenzione",
                "description": "'arithmetic' (antiorario da est; default), 'geographic' (orario da nord) o 'graphic' (orario da est)."
              }
            }
          },
          "calculate_rates": {
            "name": "Calcola tassi",
            "description": "Calcola tassi lisciati da campi di conteggio e popolazione (come ArcGIS Calculate Rates): tasso grezzo, Bayes empirico globale di Marshall o Bayes empirico spaziale sui k vicini più prossimi — il passo standard di stabilizzazione prima dell'analisi degli hotspot di tassi di malattia/criminalità.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer poligonale o puntuale in ingresso con i campi del conteggio e della popolazione."
              },
              "count_field": {
                "label": "Campo conteggio",
                "description": "Campo che contiene il conteggio degli eventi (numeratore)."
              },
              "population_field": {
                "label": "Campo popolazione",
                "description": "Campo che contiene la popolazione a rischio (denominatore)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer in uscita con i campi dei tassi aggiunti. Se omesso, il risultato è memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "'crude', 'eb_global' (default) o 'eb_spatial'."
              },
              "per": {
                "label": "Per",
                "description": "Moltiplicatore del tasso, ad esempio 100000 per il tasso su 100.000 (default 100000)."
              },
              "neighbors": {
                "label": "Vicini",
                "description": "Solo per eb_spatial: numero di vicini più prossimi per il tasso di riferimento locale (default 8)."
              }
            }
          },
          "calculate_transformation_errors": {
            "name": "Calcola errori di trasformazione",
            "description": "Adatta una trasformazione di similarità/affine/proiettiva dai collegamenti di spostamento e riporta l'errore residuo di ogni collegamento più l'RMSE complessivo, così i punti di controllo errati possono essere individuati e rimossi prima della trasformazione. Come ArcGIS Calculate Transformation Errors.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Linee di collegamento dello spostamento: il primo vertice è il punto di origine (from), l'ultimo il punto di destinazione (to)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita della tabella dei collegamenti con i campi dei residui aggiunti. Se omesso, il risultato è memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "'affine' (default, 6 parametri), 'similarity' (4) o 'projective' (8)."
              },
              "keep_geometry": {
                "label": "Mantieni la geometria",
                "description": "Mantiene in uscita la geometria di ciascun collegamento (default true). Impostare false per ottenere una tabella pura."
              }
            }
          },
          "calculate_transit_service_frequency": {
            "name": "Calcola frequenza del servizio di trasporto",
            "description": "Frequenza del servizio di trasporto GTFS in una finestra: per una data di servizio (tramite calendar/calendar_dates) e una finestra temporale, conta le corse che servono ogni fermata o linea di percorso e riporta le corse per ora, come ArcGIS Calculate Transit Service Frequency.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso di una directory di un feed GTFS estratto."
              },
              "target": {
                "label": "Obiettivo",
                "description": "'stops' (un punto per fermata, default) o 'lines' (una polilinea per linea)."
              },
              "date": {
                "label": "Data",
                "description": "Data del servizio AAAAMMGG, risolta tramite calendar.txt/calendar_dates.txt. Se omessa, vengono conteggiati tutti i servizi."
              },
              "start_time": {
                "label": "Orario di inizio",
                "description": "Inizio della finestra HH:MM o HH:MM:SS (gli orari GTFS possono superare le 24:00). Se omesso, viene conteggiata l'intera giornata."
              },
              "duration_minutes": {
                "label": "Durata (minuti)",
                "description": "Durata della finestra in minuti (usata con start_time; imposta anche il denominatore orario)."
              },
              "count": {
                "label": "Conteggio",
                "description": "'departures' (default) o 'arrivals' — quale campo degli orari di fermata conteggiare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "calculate_utm_zone": {
            "name": "Calcola zona UTM",
            "description": "Calcola la zona UTM ottimale e il codice EPSG WGS84 per ogni geometria dalla longitudine/latitudine del suo centroide, aggiungendo un campo zona (1–60) e un campo EPSG (326##/327##) — per serie di mappe a proiezione adattiva, come ArcGIS Calculate UTM Zone. Pura matematica con le eccezioni di Norvegia/Svalbard; senza PROJ. La geometria è letta come gradi lon/lat.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (qualsiasi tipo di geometria) in coordinate geografiche (lon/lat in gradi, EPSG:4326)."
              },
              "zone_field": {
                "label": "Campo zona",
                "description": "Nome del campo intero che conterrà il numero della zona UTM (1–60). Default 'utm_zone'."
              },
              "epsg_field": {
                "label": "Campo EPSG",
                "description": "Nome del campo intero che conterrà il codice EPSG UTM WGS84 (326## a nord, 327## a sud). Default 'utm_epsg'."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "cartogram": {
            "name": "Cartogramma",
            "description": "Distorce i poligoni in modo che l'area sia proporzionale al valore di un attributo: non contiguo (scala ogni poligono attorno al suo centroide) o Dorling (cerchi proporzionali con rimozione delle sovrapposizioni).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo numerico al cui valore deve essere proporzionale l'area di ciascuna geometria."
              },
              "method": {
                "label": "Metodo",
                "description": "'non_contiguous' (default; ridimensiona i poligoni in loco) o 'dorling' (cerchi proporzionali)."
              },
              "iterations": {
                "label": "Iterazioni",
                "description": "Iterazioni di rimozione delle sovrapposizioni di Dorling (default 100). Ignorate da non_contiguous."
              }
            }
          },
          "causal_inference_analysis": {
            "name": "Analisi di inferenza causale",
            "description": "Stima l'effetto causale di un trattamento binario su un esito tramite abbinamento per punteggio di propensione, ponderazione per probabilità inversa o aggiustamento per regressione, con un intervallo di confidenza bootstrap con seme e una tabella di bilanciamento delle covariate per confondente prima/dopo l'aggiustamento (come ArcGIS Causal Inference Analysis).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer di geometrie in ingresso."
              },
              "outcome_field": {
                "label": "Campo esito",
                "description": "Campo numerico dell'esito (variabile dipendente)."
              },
              "treatment_field": {
                "label": "Campo trattamento",
                "description": "Campo del trattamento binario (0/1 o booleano). I trattamenti continui non sono supportati in questa versione."
              },
              "confounding_fields": {
                "label": "Campi confondenti",
                "description": "Campo o campi numerici dei fattori di confondimento da controllare, separati da virgole."
              },
              "method": {
                "label": "Metodo",
                "description": "'ps_matching' (default, abbinamento al vicino più prossimo con caliper sul punteggio di propensione), 'ipw' (ponderazione per probabilità inversa stabilizzata) o 'regression_adjustment' (esito ~ trattamento + fattori di confondimento)."
              },
              "add_spatial_confounders": {
                "label": "Aggiungi confondenti spaziali",
                "description": "Se true, amplia l'insieme dei fattori di confondimento con le coordinate x/y di ciascuna geometria e con la media sui k vicini più prossimi di ciascun fattore di confondimento (default false)."
              },
              "balance_threshold": {
                "label": "Soglia di bilanciamento",
                "description": "Soglia della differenza media standardizzata per la verifica del bilanciamento dopo l'aggiustamento (default 0.1)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale in uscita (copia dell'ingresso + colonne del punteggio di propensione / peso / ID di abbinamento). Se omesso, il risultato è memorizzato in memoria."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme intero per l'intervallo di confidenza bootstrap deterministico (default 42)."
              }
            }
          },
          "cell_position_statistics": {
            "name": "Statistiche della posizione delle celle",
            "description": "Statistiche di posizione e rango per cella attraverso una pila di raster allineati (ArcGIS Highest Position, Lowest Position, Popularity e Rank): quale layer contiene il valore estremo, il valore che ricorre un dato numero di volte o l'n-esimo valore più piccolo. cell_statistics riduce una pila a un valore e non può mai riportare da quale layer provenga, e find_argument_statistics incluso lavora lungo l'asse degli argomenti di un solo raster multibanda senza la semantica dei selettori di popolarità/rango.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Un unico raster multibanda (ogni banda è un layer) oppure un elenco separato da virgole di raster co-registrati."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "statistic": {
                "label": "Statistica",
                "description": "'highest_position' (default), 'lowest_position', 'popularity' o 'rank'."
              },
              "selector": {
                "label": "Selettore",
                "description": "Obbligatorio per 'popularity' e 'rank': il percorso di un raster co-registrato o un numero costante che indica il conteggio delle occorrenze per cella (popularity) o il rango in base 1 da selezionare."
              },
              "ignore_nodata": {
                "label": "Ignora il nodata",
                "description": "Salta le osservazioni senza dati per ciascuna cella (default true). Se false, una qualsiasi osservazione senza dati rende la cella senza dati."
              },
              "process_as_multiband": {
                "label": "Elabora come multibanda",
                "description": "'single_band' (default): ogni banda di ogni ingresso è un layer di un'unica pila. 'multi_band': la banda i di ogni ingresso forma una pila a sé, dando un risultato multibanda."
              }
            }
          },
          "cell_records_to_sectors": {
            "name": "Da record di celle a settori",
            "description": "Costruisce la geometria di copertura delle antenne da punti di torri cellulari: poligoni a settore o linee bisettrici di settore da azimut, ampiezza del fascio e raggio per torre — come ArcGIS Cell Site Records To Feature Class / Generate Sector Lines.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso di antenne/tralicci."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "output_type": {
                "label": "Tipo di uscita",
                "description": "Geometria da produrre: 'wedge' (poligoni di copertura, default) o 'line' (linee bisettrici dei settori)."
              },
              "azimuth_field": {
                "label": "Campo azimut",
                "description": "Campo che contiene l'azimut di ciascuna antenna (gradi bussola, 0 = nord, in senso orario). In sua assenza si usa 'azimuth'."
              },
              "beamwidth_field": {
                "label": "Campo ampiezza del fascio",
                "description": "Campo che contiene l'ampiezza del fascio di ciascuna antenna in gradi. In sua assenza si usa 'beamwidth'."
              },
              "radius_field": {
                "label": "Campo raggio",
                "description": "Campo che contiene il raggio di copertura di ciascuna antenna nelle unità del CRS. In sua assenza si usa 'radius'."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut predefinito in gradi bussola quando non è indicato alcun campo / un valore è mancante. Default 0."
              },
              "beamwidth": {
                "label": "Ampiezza del fascio",
                "description": "Ampiezza del fascio predefinita in gradi (0 < bw ≤ 360; ≥ 360 = omnidirezionale). Default 65."
              },
              "radius": {
                "label": "Raggio",
                "description": "Raggio di copertura predefinito nelle unità del CRS (deve essere positivo). Default 1000."
              },
              "segments": {
                "label": "Segmenti",
                "description": "Numero di segmenti rettilinei usati per approssimare l'arco di ciascun settore (≥ 1). Default 16."
              }
            }
          },
          "cell_statistics": {
            "name": "Statistiche delle celle",
            "description": "Statistica per pixel attraverso una pila di raster allineati (come ArcGIS Cell Statistics): media, maggioranza, massimo, mediana, minimo, minoranza, percentile, intervallo, deviazione standard, somma o varietà — il riduttore locale multi-raster che sum_overlay/weighted_sum inclusi (solo somma) e gli strumenti di intorno/zonali non forniscono.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Un unico raster multibanda (ogni banda è un layer) oppure un elenco separato da virgole di raster co-registrati."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster a banda singola in uscita del valore ridotto. Se omesso, il risultato è memorizzato in memoria."
              },
              "statistic": {
                "label": "Statistica",
                "description": "'mean' (default), 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'range', 'std', 'sum' o 'variety'."
              },
              "ignore_nodata": {
                "label": "Ignora il nodata",
                "description": "Salta le osservazioni senza dati per ciascuna cella (default true). Se false, una qualsiasi osservazione senza dati rende la cella senza dati."
              },
              "percentile_value": {
                "label": "Valore del percentile",
                "description": "Percentile in [0, 100] per la statistica 'percentile' (default 50 = mediana)."
              }
            }
          },
          "central_feature": {
            "name": "Elemento centrale / media direzionale lineare",
            "description": "La geometria centrale (la geometria in ingresso con la minore distanza totale da tutte le altre) o la media direzionale lineare (rilevamento medio, varianza circolare e lunghezza media delle geometrie lineari) — i due membri di Misurazione delle distribuzioni geografiche che mancano a directional_distribution (ArcGIS Central Feature / Linear Directional Mean).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (punti per central_feature; linee per linear_directional_mean)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "statistic": {
                "label": "Statistica",
                "description": "'central_feature' (default) o 'linear_directional_mean'."
              },
              "weight_field": {
                "label": "Campo peso",
                "description": "Campo numerico opzionale che pondera ciascuna geometria (solo per central_feature)."
              },
              "case_field": {
                "label": "Campo caso",
                "description": "Campo opzionale per cui raggruppare le geometrie; un risultato per ogni valore distinto."
              },
              "distance": {
                "label": "Distanza",
                "description": "Metrica di distanza per central_feature: 'euclidean' (default) o 'manhattan'."
              },
              "orientation_only": {
                "label": "Solo orientamento",
                "description": "Tratta le linee come non orientate (orientamento modulo 180°) per linear_directional_mean. Default false."
              }
            }
          },
          "change_point_detection": {
            "name": "Rilevamento dei punti di cambiamento",
            "description": "Rileva cambiamenti bruschi nella serie temporale in ogni posizione di un cubo spazio-temporale H3 (come ArcGIS Change Point Detection): segmentazione binaria su un costo di variazione di media o pendenza con una penalità scalata per sensibilità (o un numero fisso di punti di cambiamento), riportando per cella il conteggio dei cambiamenti, l'anno del cambiamento maggiore e le medie dei segmenti. La segmentazione temporale che change_vector_analysis a due date e i test monotoni di Mann-Kendall non possono fare.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale in ingresso di eventi con marca temporale (lon/lat)."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo che contiene l'istante di ciascun punto: un numero o una marca temporale ISO-8601."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer poligonale H3 in uscita con gli attributi dei punti di cambiamento. Se omesso, il risultato è memorizzato in memoria."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo numerico da aggregare per gruppo (default: conteggio dei punti)."
              },
              "change_type": {
                "label": "Tipo di cambiamento",
                "description": "'mean' (variazioni di livello; default) o 'slope' (variazioni di trend)."
              },
              "method": {
                "label": "Metodo",
                "description": "'auto' (basato su penalità, default) o 'defined' (esattamente num_change_points)."
              },
              "num_change_points": {
                "label": "Numero di punti di cambiamento",
                "description": "Metodo defined: numero di punti di cambiamento da trovare per ciascuna posizione (default 1)."
              },
              "sensitivity": {
                "label": "Sensibilità",
                "description": "Metodo auto: scala della penalità; più alta = meno punti di cambiamento (default 1.0)."
              },
              "time_step": {
                "label": "Passo temporale",
                "description": "Ampiezza di un passo temporale nelle unità di time_field (default 1)."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Risoluzione H3 da 0 a 15 (default 7)."
              }
            }
          },
          "classification_accuracy_assessment": {
            "name": "Valutazione dell'accuratezza della classificazione",
            "description": "Valuta un raster classificato (o punti che già portano una classe predetta) rispetto a punti di riferimento etichettati con la verità a terra, producendo una matrice di confusione, l'accuratezza complessiva, l'accuratezza del produttore/dell'utente per classe e il kappa di Cohen — come ArcGIS Compute Confusion Matrix.",
            "params": {
              "points": {
                "label": "Punti",
                "description": "Layer puntuale di riferimento (per la valutazione dell'accuratezza) che contiene il campo della classe di verità a terra."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Attributo dei punti che contiene l'etichetta della classe di verità a terra (di riferimento)."
              },
              "input": {
                "label": "Ingresso",
                "description": "Raster classificato da campionare in corrispondenza di ciascun punto di riferimento (cella più vicina). Fornire questo OPPURE 'classified_field'."
              },
              "classified_field": {
                "label": "Campo classificato",
                "description": "Attributo dei punti che contiene già la classe prevista (della mappa), usato al posto del campionamento di un raster. Fornire questo OPPURE 'input'."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 del raster classificato da campionare (default 1)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita per i punti di riferimento annotati con REF_CLASS, MAP_CLASS, CORRECT. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "collapse_dual_lines_to_centerline": {
            "name": "Riduci le doppie linee a un asse",
            "description": "Rileva coppie di linee approssimativamente parallele entro una tolleranza di larghezza (carreggiate separate, bordi stradali) e sostituisce ogni coppia con una singola linea centrale, ricollegando le intersezioni — come ArcGIS Collapse Dual Lines To Centerline.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale lineare in ingresso (CRS proiettato; larghezze nelle sue unità)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "min_width": {
                "label": "Larghezza minima",
                "description": "Separazione minima tra le linee accoppiate, nelle unità del CRS (default 0)."
              },
              "max_width": {
                "label": "Larghezza massima",
                "description": "Separazione massima tra le linee accoppiate, nelle unità del CRS. Obbligatoria (la larghezza di collasso)."
              },
              "attribute": {
                "label": "Attributo",
                "description": "Campo opzionale che deve corrispondere perché due linee siano accoppiate (ad esempio nome o classe della strada)."
              },
              "sample_distance": {
                "label": "Distanza di campionamento",
                "description": "Intervallo di infittimento per la verifica del parallelismo, nelle unità del CRS. Default: max_width / 2."
              },
              "min_overlap": {
                "label": "Sovrapposizione minima",
                "description": "Frazione minima di una linea che deve correre parallela alla sua compagna perché siano accoppiate (0-1, default 0.5)."
              }
            }
          },
          "collapse_hydro_polygon": {
            "name": "Riduci il poligono idrografico",
            "description": "Collassa i poligoni d'acqua stretti in linee centrali mantenendo i tratti larghi come poligoni (come ArcGIS Collapse Hydro Polygon): traccia la linea centrale di ogni poligono lungo il suo asse principale tramite i punti medi di sezioni trasversali perpendicolari, misura la larghezza locale e collassa dove la larghezza mediana è pari o inferiore a una soglia. La generalizzazione poligono→linea con soglia di larghezza che collapse_dual_lines_to_centerline per bordi stradali e river_centerlines raster non fanno.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer poligonale in ingresso dei corpi idrici."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer in uscita delle linee centrali per i poligoni collassati (stretti). Se omesso, il risultato è memorizzato in memoria."
              },
              "collapse_width": {
                "label": "Larghezza di collasso",
                "description": "I poligoni la cui larghezza mediana è pari o inferiore a questo valore collassano in una linea centrale."
              },
              "sample_distance": {
                "label": "Distanza di campionamento",
                "description": "Spaziatura delle stazioni delle sezioni trasversali lungo l'asse (default: collapse_width / 2)."
              },
              "min_length": {
                "label": "Lunghezza minima",
                "description": "Scarta le linee centrali collassate più corte di questo valore (default 0)."
              },
              "retained": {
                "label": "Mantenuti",
                "description": "Layer poligonale in uscita opzionale per i tratti larghi (non collassati)."
              }
            }
          },
          "collapse_road_detail": {
            "name": "Riduci il dettaglio stradale",
            "description": "Collassa piccoli anelli e deviazioni stradali (rotatorie, dogbone, sfalsamenti) sotto una soglia di diametro in singole connessioni passanti per la visualizzazione a piccola scala, preservando la connettività della rete — come ArcGIS Collapse Road Detail.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale lineare in ingresso delle strade, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "collapse_distance": {
                "label": "Distanza di collasso",
                "description": "Diametro massimo del dettaglio da collassare. Gli anelli/le deviazioni il cui diametro di ingombro è inferiore a questo valore (metri per un CRS geografico, unità del CRS altrimenti) vengono collassati; quelli più grandi sono mantenuti."
              },
              "road_class_field": {
                "label": "Campo classe stradale",
                "description": "Campo opzionale della classe stradale. Se impostato, vengono collassati solo gli anelli le cui strade di contorno condividono tutte lo stesso valore di classe (gli incroci tra classi diverse sono preservati)."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Distanza entro la quale gli estremi delle strade sono considerati lo stesso incrocio. Default 1e-6."
              }
            }
          },
          "collect_events": {
            "name": "Raccogli eventi",
            "description": "Collassa i punti di incidente coincidenti in posizioni uniche, ciascuna con un conteggio ICOUNT degli eventi presenti, come ArcGIS Collect Events.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso (Point o MultiPoint)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Tolleranza di aggancio in unità mappa; i punti le cui coordinate si arrotondano alla stessa cella sono considerati coincidenti (default 1e-8, ovvero di fatto esatto)."
              }
            }
          },
          "colocation_analysis": {
            "name": "Analisi di colocalizzazione",
            "description": "Quoziente di colocazione locale (Leslie & Kronenfeld) che misura se i punti della categoria A si trovano in modo sproporzionato tra i vicini della categoria B, con un valore p da test di permutazione con seme — come ArcGIS Colocation Analysis.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso con un campo di categoria."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (una copia dell'ingresso con i campi di colocazione). Se omesso, il risultato è memorizzato in memoria."
              },
              "category_field": {
                "label": "Campo categoria",
                "description": "Campo che contiene la categoria di ciascun punto."
              },
              "category_a": {
                "label": "Categoria A",
                "description": "Categoria focale (A): i punti la cui colocazione con B viene misurata."
              },
              "category_b": {
                "label": "Categoria B",
                "description": "Categoria dei vicini (B): i punti rispetto ai quali A viene testata."
              },
              "neighbors": {
                "label": "Vicini",
                "description": "Numero di vicini più prossimi k (default 8)."
              },
              "weight": {
                "label": "Peso",
                "description": "Ponderazione dei vicini: 'gaussian' (decadimento con la distanza, default) o 'uniform'."
              },
              "permutations": {
                "label": "Permutazioni",
                "description": "Numero di permutazioni delle etichette per il test di significatività (default 99; 0 lo disattiva)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme del generatore di numeri casuali per le permutazioni (default 1), per risultati riproducibili."
              }
            }
          },
          "color_polygons": {
            "name": "Colora poligoni",
            "description": "Assegna a ogni poligono un piccolo indice di colore intero in modo che due poligoni adiacenti non condividano mai lo stesso valore (come ArcGIS Calculate Color Theorem Field) — stile coropletico sicuro per l'adiacenza tramite colorazione di grafo DSATUR su contiguità per bordo condiviso (o angolo condiviso).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer poligonale in uscita con il campo del colore aggiunto. Se omesso, il risultato è memorizzato in memoria."
              },
              "field": {
                "label": "Campo",
                "description": "Nome del campo dell'indice di colore da scrivere (default 'color_id')."
              },
              "adjacency": {
                "label": "Adiacenza",
                "description": "'edge' (rook, confine condiviso; default) o 'edge_or_corner' (queen, confine o vertice condiviso)."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Dimensione della griglia a cui agganciare i vertici prima di confrontare i bordi (default 0 = esatto)."
              }
            }
          },
          "combine": {
            "name": "Combina",
            "description": "Assegna un ID di zona univoco a ogni combinazione unica di valori attraverso due o più raster categorici co-registrati, più una tabella degli attributi dei valori (id, conteggio, una colonna per ingresso).",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Elenco separato da virgole di almeno 2 raster categoriali/interi co-registrati da combinare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita per la griglia degli ID delle condizioni univoche. Se omesso, il risultato è memorizzato in memoria."
              },
              "csv_output": {
                "label": "CSV in uscita",
                "description": "Percorso CSV opzionale per la tabella degli attributi dei valori (valore, conteggio, una colonna per ciascun raster in ingresso)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 da leggere da ogni raster in ingresso. Default 1."
              }
            }
          },
          "compare_spatial_weights": {
            "name": "Confronta i pesi spaziali",
            "description": "Classifica le concettualizzazioni candidate dei pesi spaziali (KNN, banda di distanza fissa, contiguità per bordi / bordi+angoli, Delaunay) in base a quanto ciascuna cattura il clustering spaziale di uno o più campi di analisi, usando l'I di Moran globale standardizzato per righe con il suo z-score e valore p bilaterale — come ArcGIS Compare Neighborhood Conceptualizations. Produce una tabella di confronto ordinata e il singolo metodo migliore.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (punti/linee/poligoni; la contiguità richiede poligoni)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso della tabella di confronto in uscita — un CSV (estensione .csv) o una tabella vettoriale senza geometria. Se omesso, il risultato è memorizzato in memoria."
              },
              "input_fields": {
                "label": "Campi in ingresso",
                "description": "Elenco separato da virgole dei nomi dei campi numerici da analizzare per il clustering spaziale."
              },
              "id_field": {
                "label": "Campo ID",
                "description": "Campo che contiene l'ID univoco di ciascuna geometria (accettato per compatibilità; non necessario per calcolare l'I di Moran)."
              },
              "methods": {
                "label": "Metodi",
                "description": "Concettualizzazioni candidate separate da virgole tra: knn, fixed_distance_band, contiguity_edges, contiguity_edges_corners, delaunay. Default 'knn,contiguity_edges,contiguity_edges_corners'. I metodi non applicabili alla geometria (o che generano errore) vengono saltati."
              },
              "number_of_neighbors": {
                "label": "Numero di vicini",
                "description": "Numero di vicini più prossimi k per il metodo knn. Default 8."
              },
              "threshold_distance": {
                "label": "Distanza di soglia",
                "description": "Soglia della banda di distanza in unità mappa. Necessaria solo quando fixed_distance_band è tra i metodi."
              }
            }
          },
          "composite_bands": {
            "name": "Componi bande",
            "description": "Impila più raster a banda singola in un unico raster multibanda, nell'ordine dato (ArcGIS Composite Bands). create_colour_composite incluso è fisso a tre bande RGB, quindi non c'era modo di assemblare l'ingresso a N bande che band_collection_statistics, principal_component_analysis, spectral_index e la suite OBIA richiedono tutti.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Percorsi dei raster separati da virgole o punti e virgola, nell'ordine delle bande in uscita. Almeno uno."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 presa da ciascun ingresso quando l'ingresso è a sua volta multibanda (default 1)."
              },
              "nodata_policy": {
                "label": "Politica per il nodata",
                "description": "'any' (default): una cella è senza dati se una qualsiasi banda è senza dati. 'all': solo se lo sono tutte."
              },
              "nodata": {
                "label": "Nodata",
                "description": "Valore no-data per l'uscita (default: il no-data del primo ingresso)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster multibanda in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "compute_accuracy_for_object_detection": {
            "name": "Calcola l'accuratezza del rilevamento di oggetti",
            "description": "Valuta le geometrie rilevate rispetto alla verità a terra usando l'abbinamento IoU, riportando precisione, richiamo, precisione media per classe e mAP complessiva, come ArcGIS Compute Accuracy For Object Detection.",
            "params": {
              "detected": {
                "label": "Rilevati",
                "description": "Geometrie rilevate (poligoni o riquadri di delimitazione)."
              },
              "ground_truth": {
                "label": "Verità a terra",
                "description": "Geometrie di riferimento rispetto a cui valutare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale della tabella di accuratezza in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "detected_class_field": {
                "label": "Campo classe dei rilevati",
                "description": "Campo dell'etichetta di classe sui rilevamenti. Omettere per valutare tutto come un'unica classe."
              },
              "ground_truth_class_field": {
                "label": "Campo classe della verità a terra",
                "description": "Campo dell'etichetta di classe sulla verità a terra. Omettere per valutare tutto come un'unica classe."
              },
              "confidence_field": {
                "label": "Campo confidenza",
                "description": "Campo del punteggio di confidenza sui rilevamenti, usato per ordinarli ai fini della precisione media. Senza di esso i rilevamenti sono valutati nell'ordine in ingresso."
              },
              "min_iou": {
                "label": "IoU minimo",
                "description": "Intersezione su unione minima perché un rilevamento sia considerato una corrispondenza (default 0.5)."
              }
            }
          },
          "compute_sar_indices": {
            "name": "Calcola indici SAR",
            "description": "Deriva indici SAR polarimetrici — RVI (Radar Vegetation Index), RFDI (Radar Forest Degradation Index), CSI (Canopy Structure Index) e DPSVI (Dual-Pol SAR Vegetation Index) — dalla retrodiffusione multi-polarizzazione (ArcGIS Compute SAR Indices). spectral_index copre solo la matematica tra bande ottiche: le sue formule e convenzioni di banda sono nel dominio della riflettanza e non ha alcuna nozione di canali di polarizzazione, quindi la catena SAR del catalogo (multilook, sar_coherence, filtri speckle) attualmente non ha un punto di arrivo analitico.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster SAR calibrato multi-polarizzazione (una banda per polarizzazione)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster dell'indice in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "index": {
                "label": "Indice",
                "description": "'rvi' (default), 'rfdi', 'csi' o 'dpsvi'."
              },
              "polarization_bands": {
                "label": "Bande di polarizzazione",
                "description": "Mappatura delle bande in base 1, ad esempio 'vv=1,vh=2' o 'hh=1,hv=2,vv=3'. Default in base al numero di bande: 2 bande = 'vv=1,vh=2', 3 o più bande = 'hh=1,hv=2,vv=3'."
              },
              "input_units": {
                "label": "Unità di ingresso",
                "description": "'linear' (default) o 'db'. L'ingresso in dB viene convertito in potenza lineare prima dell'aritmetica dei rapporti, perché i rapporti di decibel non sono significativi."
              }
            }
          },
          "construct_sight_lines": {
            "name": "Costruisci linee di vista",
            "description": "Costruisce geometrie di linee di vista tra punti osservatore e geometrie obiettivo, con offset di altezza di osservatore/obiettivo, campionamento lungo obiettivi lineari e areali, campi opzionali di azimut e angolo verticale e distanza 2D o 3D. Come ArcGIS Construct Sight Lines.",
            "params": {
              "observers": {
                "label": "Osservatori",
                "description": "Geometrie puntuali degli osservatori."
              },
              "targets": {
                "label": "Obiettivi",
                "description": "Geometrie di destinazione di tipo punto, linea o poligono."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso in uscita delle linee di vista. Se omesso, il risultato è memorizzato in memoria."
              },
              "observer_height_field": {
                "label": "Campo altezza dell'osservatore",
                "description": "Campo opzionale che indica lo scarto di altezza di ciascun osservatore (aggiunto alla sua Z)."
              },
              "target_height_field": {
                "label": "Campo altezza dell'obiettivo",
                "description": "Campo opzionale che indica lo scarto di altezza di ciascuna destinazione (aggiunto alla sua Z)."
              },
              "join_field": {
                "label": "Campo di unione",
                "description": "Campo opzionale presente su entrambi gli ingressi; vengono accoppiati solo gli osservatori e le destinazioni che condividono un valore. Senza di esso ogni osservatore viene accoppiato con ogni destinazione."
              },
              "sample_distance": {
                "label": "Distanza di campionamento",
                "description": "Spaziatura in unità mappa per i punti di destinazione generati lungo i bordi di linee/poligoni (default: un punto per vertice)."
              },
              "output_direction": {
                "label": "Direzione in uscita",
                "description": "Aggiunge i campi AZIMUTH e VERT_ANGLE (default false)."
              },
              "distance_method": {
                "label": "Metodo di distanza",
                "description": "'2d' (default) o '3d' per il campo DISTANCE."
              }
            }
          },
          "contiguous_cartogram": {
            "name": "Cartogramma contiguo",
            "description": "Cartogramma a equalizzazione di densità (diffusione di Gastner-Newman): distorce le aree dei poligoni in proporzione a un attributo mantenendo la mappa come un foglio connesso con confini condivisi (ArcGIS Generate Contiguous Cartogram). Lo strumento cartogram incluso implementa solo i metodi non contiguo e Dorling, che distruggono entrambi l'adiacenza, e la sua stessa documentazione rinvia la forma contigua.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer poligonale contiguo."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Attributo numerico positivo al cui totale devono diventare proporzionali le aree."
              },
              "grid_size": {
                "label": "Dimensione della griglia",
                "description": "Risoluzione della griglia di densità; deve essere una potenza di due (default 256). È il principale parametro di compromesso tra accuratezza e costo."
              },
              "iterations": {
                "label": "Iterazioni",
                "description": "Passi di diffusione (default 20). Un numero maggiore di passi equalizza ulteriormente la densità al costo di una maggiore distorsione."
              },
              "blur": {
                "label": "Sfocatura",
                "description": "Pre-lisciamento gaussiano del campo di densità, in celle della griglia (default 0.5). Evita la distorsione estrema prodotta da una brusca discontinuità di densità."
              },
              "sea_density": {
                "label": "Densità del mare",
                "description": "Densità al di fuori dell'area di studio: 'mean' (default) o 'min'. Questo modifica sostanzialmente il risultato ai bordi della mappa."
              },
              "densify_spacing": {
                "label": "Spaziatura di densificazione",
                "description": "Lunghezza massima del segmento di bordo in celle della griglia prima che vengano inseriti dei vertici (default 1.0). Altrimenti i confini rettilinei lunghi si separano da quelli vicini."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer poligonale in uscita con i vertici spostati e gli attributi originali. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "contour_list": {
            "name": "Elenco di isoipse",
            "description": "Genera isolinee a un elenco esplicito di valori anziché a un intervallo fisso, come polilinee concatenate o poligoni riempiti, ciascuno etichettato con il proprio livello (ArcGIS Contour List). contours_from_raster incluso accetta solo 'interval' e 'base', quindi le serie irregolari usate dalle carte reali — passi di profondità IHO, stadi di ricorrenza delle piene, interruzioni di classe pubblicate — richiedono un'esecuzione per valore e una fusione, e comunque non possono uscire come un unico layer etichettato per livello.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster di superficie in ingresso."
              },
              "contour_values": {
                "label": "Valori delle isolinee",
                "description": "Elenco separato da virgole dei livelli da tracciare come isolinee, nelle unità z proprie del raster."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer delle isolinee in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "geometry_type": {
                "label": "Tipo di geometria",
                "description": "'polyline' (default) per le isolinee, oppure 'polygon' per la regione riempita pari o superiore a ciascun livello."
              },
              "min_length": {
                "label": "Lunghezza minima",
                "description": "Scarta le isolinee più corte di questo valore, in unità mappa, eliminando le macchioline prodotte da una superficie rumorosa."
              },
              "close_rings": {
                "label": "Chiudi gli anelli",
                "description": "Ripete il primo vertice sulle isolinee che si chiudono su sé stesse (default true)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 di cui tracciare le isolinee (default 1)."
              }
            }
          },
          "contour_with_barriers": {
            "name": "Isoipse con barriere",
            "description": "Traccia isolinee di una superficie che terminano alle geometrie di barriera invece di attraversarle.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster di superficie continua in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale lineare in uscita (driver dedotto dalla sua estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "barriers": {
                "label": "Barriere",
                "description": "Layer vettoriale opzionale di barriere (linee o poligoni). Le isolinee non attraverseranno queste geometrie."
              },
              "interval": {
                "label": "Intervallo",
                "description": "Equidistanza delle isolinee nelle unità della superficie. I livelli sono base + k*interval entro l'intervallo dei dati. Ignorata se è indicato 'levels'."
              },
              "base": {
                "label": "Base",
                "description": "Valore di base da cui si misura l'equidistanza (default 0)."
              },
              "levels": {
                "label": "Livelli",
                "description": "Valori espliciti delle isolinee separati da virgole (ad esempio \"10,20,30\"). Prevalgono su interval/base."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da leggere, in base 1 (default 1)."
              }
            }
          },
          "convert_coordinate_notation": {
            "name": "Converti la notazione delle coordinate",
            "description": "Converte le coordinate di ogni geometria tra notazioni — gradi decimali (DD), gradi-minuti-secondi (DMS), gradi-minuti decimali (DDM), UTM e MGRS/USNG — scrivendo un nuovo campo nella notazione di destinazione, come ArcGIS Convert Coordinate Notation. Pura matematica di reticolo (Mercatore trasversa di Krüger + lettere MGRS su WGS84); senza PROJ.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale (o tabella) in ingresso."
              },
              "input_notation": {
                "label": "Notazione in ingresso",
                "description": "Notazione della coordinata in ingresso: DD, DMS, DDM, UTM o MGRS."
              },
              "output_notation": {
                "label": "Notazione in uscita",
                "description": "Notazione di destinazione da scrivere: DD, DMS, DDM, UTM o MGRS."
              },
              "coord_field": {
                "label": "Campo coordinate",
                "description": "Campo che contiene la stringa della coordinata in ingresso. Se omesso, viene usata la geometria puntuale (valido solo quando input_notation=DD; geometria x=lon, y=lat)."
              },
              "output_field": {
                "label": "Campo in uscita",
                "description": "Nome del campo da scrivere. Default: la notazione di uscita in minuscolo (ad esempio 'utm')."
              },
              "precision": {
                "label": "Precisione",
                "description": "Cifre MGRS per asse (1=10km … 5=1m, fino a 9). Default 5. Ignorato dalle altre notazioni."
              },
              "update_geometry": {
                "label": "Aggiorna la geometria",
                "description": "Se true, ricostruisce la geometria di ciascuna geometria come punto lon/lat in EPSG:4326 a partire dalla coordinata interpretata. Default false (mantiene geometria/CRS in ingresso)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "convert_sar_units": {
            "name": "Converti unità SAR",
            "description": "Converte un raster SAR tra le rappresentazioni ampiezza, intensità, potenza lineare, decibel, da complesso a intensità e da fase srotolata a spostamento (ArcGIS Convert SAR Units). raster_calculator può valutare l'aritmetica ma non ne porta la semantica né le protezioni — restituisce -inf per le celle a valore zero in una conversione logaritmica, e nulla nel catalogo registra in quale unità si trovi un raster SAR, quindi i filtri speckle e gli indici di rapporto vengono spesso applicati alla rappresentazione sbagliata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster SAR in ingresso. Per 'complex_to_intensity' si tratta di un raster I/Q a due bande (la convenzione di multilook / sar_coherence)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "conversion": {
                "label": "Conversione",
                "description": "'linear_to_db', 'db_to_linear', 'amplitude_to_intensity', 'intensity_to_amplitude', 'complex_to_intensity' o 'phase_to_displacement'."
              },
              "wavelength": {
                "label": "Lunghezza d'onda",
                "description": "Lunghezza d'onda radar in metri per 'phase_to_displacement' (default 0.05546576, banda C di Sentinel-1)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da leggere, in base 1 (default 1). Ignorata per 'complex_to_intensity', che legge sempre le bande 1 e 2 come I e Q."
              }
            }
          },
          "coregister_rasters": {
            "name": "Coregistra raster",
            "description": "Allinea automaticamente un raster secondario a un riferimento tramite correlazione incrociata normalizzata su una griglia di tessere, raffinamento sub-pixel del picco, adattamento di una trasformazione ai minimi quadrati con eliminazione dei valori anomali e ricampionamento (ArcGIS Apply Coregistration). È la precondizione mancante per l'intera catena InSAR del catalogo: sar_coherence, flatten_interferogram e goldstein_phase_filter richiedono tutti ingressi co-registrati e nulla li produceva. georeference_raster_from_control_points richiede punti di controllo scelti a mano, image_correlation valuta solo la similarità e warp_raster necessita di una trasformazione fornita.",
            "params": {
              "reference": {
                "label": "Riferimento",
                "description": "Raster di riferimento. L'uscita viene scritta sulla griglia di questo raster."
              },
              "secondary": {
                "label": "Secondario",
                "description": "Raster da allineare al riferimento. Tutte le sue bande vengono ricampionate."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster secondario ricampionato in uscita sulla griglia di riferimento. Se omesso, il risultato è memorizzato in memoria."
              },
              "tie_points": {
                "label": "Punti di legame",
                "description": "Layer puntuale in uscita dei punti di legame accettati con il relativo spostamento misurato e la correlazione. Prodotto sempre; memorizzato in memoria quando non è indicato alcun percorso."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 usata per la corrispondenza (default 1). Un ingresso a due bande viene confrontato sulla sua magnitudine complessa se questo parametro non è indicato."
              },
              "transform": {
                "label": "Trasformazione",
                "description": "'translation', 'affine' (default) o 'polynomial2'."
              },
              "tile_size": {
                "label": "Dimensione della tessera",
                "description": "Lato di ciascuna tessera di corrispondenza in celle (default 32)."
              },
              "grid_size": {
                "label": "Dimensione della griglia",
                "description": "Numero di tessere per asse (default 8, quindi 64 tessere)."
              },
              "max_shift": {
                "label": "Spostamento massimo",
                "description": "Semiampiezza della finestra di ricerca intera in celle (default 8)."
              },
              "min_correlation": {
                "label": "Correlazione minima",
                "description": "Rifiuta i punti di legame la cui correlazione normalizzata di picco è inferiore a questo valore (default 0.3)."
              },
              "outlier_sigma": {
                "label": "Sigma dei valori anomali",
                "description": "Elimina i punti di legame il cui residuo di adattamento supera questo numero di deviazioni standard (default 3.0). Impostare 0 per disattivare l'eliminazione."
              },
              "resample": {
                "label": "Ricampiona",
                "description": "'bilinear' (default) o 'nearest'."
              }
            }
          },
          "corridor": {
            "name": "Corridoio",
            "description": "Corridoio a costo minimo tra due superfici di costo accumulato (ArcGIS Corridor): somma due raster di distanza di costo in una superficie di corridoio il cui minimo è il percorso a costo minimo, quindi opzionalmente applica una soglia per ottenere la fascia quasi ottimale. Modalità diretta (due raster di costo) o di convenienza (un raster di attrito + due raster sorgente).",
            "params": {
              "cost1": {
                "label": "Costo 1",
                "description": "Primo raster del costo accumulato (dalla sorgente A). Modalità diretta."
              },
              "cost2": {
                "label": "Costo 2",
                "description": "Secondo raster del costo accumulato (dalla sorgente B). Modalità diretta."
              },
              "cost": {
                "label": "Costo",
                "description": "Raster di attrito/costo di attraversamento. Modalità semplificata (con source1/source2)."
              },
              "source1": {
                "label": "Sorgente 1",
                "description": "Primo raster delle sorgenti (le celle positive sono sorgenti). Modalità semplificata."
              },
              "source2": {
                "label": "Sorgente 2",
                "description": "Secondo raster delle sorgenti (le celle positive sono sorgenti). Modalità semplificata."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster del corridoio in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Mantiene solo le celle il cui costo di corridoio è pari o inferiore a questo valore assoluto (le altre vengono mascherate a no-data)."
              },
              "percent": {
                "label": "Percentuale",
                "description": "Mantiene solo le celle entro questa percentuale al di sopra del costo minimo di corridoio (ad esempio 5 = entro il 5%). Ignorato se è impostato 'threshold'."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 da leggere dal raster o dai raster in ingresso. Default 1."
              }
            }
          },
          "cost_back_link": {
            "name": "Collegamento inverso di costo",
            "description": "Produce il raster di codifica delle direzioni di vicinato 0-8 che indica, per ogni cella, il passo successivo lungo il percorso a costo minimo verso la sorgente più vicina, più la superficie di costo accumulato (ArcGIS Cost Back Link e Path Back Link). cost_distance, cost_pathway e cost_allocation lo calcolano tutti internamente e lo scartano, quindi ripercorrere N destinazioni costa attualmente N risoluzioni complete di costo anziché un passaggio di accumulo più N percorsi economici.",
            "params": {
              "source": {
                "label": "Sorgente",
                "description": "Celle sorgente: un raster (ogni cella diversa da zero e non no-data è una sorgente) o un layer vettoriale puntuale/multipunto."
              },
              "cost": {
                "label": "Costo",
                "description": "Raster del costo per unità di distanza. Opzionale quando è indicato 'surface' (in tal caso il costo vale 1 ovunque, dando la pura distanza sulla superficie)."
              },
              "surface": {
                "label": "Superficie",
                "description": "Raster di quota opzionale che abilita la variante Path Back Link: la spaziatura orizzontale è sostituita dalla distanza reale sulla superficie sqrt(dxy^2 + dz^2)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster del backlink in uscita (0 = sorgente, 1-8 = direzione verso la sorgente, 1 = est in senso antiorario). Se omesso, il risultato è memorizzato in memoria."
              },
              "out_distance": {
                "label": "Distanza in uscita",
                "description": "Raster del costo accumulato. Prodotto sempre; ripiega su un handle in memoria quando non è indicato alcun percorso."
              },
              "max_distance": {
                "label": "Distanza massima",
                "description": "Soglia di accumulo opzionale: le celle il cui costo supera questo valore restano irraggiungibili."
              }
            }
          },
          "cost_connectivity": {
            "name": "Connettività di costo",
            "description": "Rete a costo minimo che connette più siti su una superficie di costo (come ArcGIS Cost Connectivity / Optimal Region Connections): allocazione Dijkstra multi-sorgente, percorsi a costo minimo a coppie tra regioni adiacenti e il loro albero ricoprente minimo — la rete a costo minimo che cost_distance e path_distance inclusi, a sorgente singola, non possono costruire.",
            "params": {
              "sources": {
                "label": "Sorgenti",
                "description": "Layer puntuale dei siti/delle regioni da collegare."
              },
              "cost": {
                "label": "Costo",
                "description": "Raster di costo/attrito (costo di attraversamento per cella; le celle no-data sono barriere)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer polilineare in uscita dei percorsi a costo minimo. Se omesso, il risultato è memorizzato in memoria."
              },
              "connections": {
                "label": "Connessioni",
                "description": "'mst' (albero di copertura minimo che collega tutti i siti; default) o 'all_neighbors' (ogni percorso tra regioni adiacenti)."
              },
              "id_field": {
                "label": "Campo ID",
                "description": "Campo opzionale per etichettare le sorgenti (default: indice in base 1)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 del raster di costo (default 1)."
              }
            }
          },
          "count_overlapping_features": {
            "name": "Conta gli elementi sovrapposti",
            "description": "Appiattisce i poligoni sovrapposti in regioni disgiunte, ciascuna con l'attributo del numero (e opzionalmente degli ID) delle geometrie in ingresso che la coprono, come ArcGIS Count Overlapping Features.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso (le geometrie possono sovrapporsi)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita (driver dedotto dall'estensione) con un campo 'count'. Se omesso, il risultato è memorizzato in memoria."
              },
              "min_count": {
                "label": "Conteggio minimo",
                "description": "Mantiene solo le regioni coperte da almeno questo numero di geometrie (default 1; usare 2 per le sole sovrapposizioni)."
              },
              "id_field": {
                "label": "Campo ID",
                "description": "Campo opzionale che identifica ciascuna geometria in ingresso (usato nella colonna degli ID / nel rapporto). Default: l'indice della geometria."
              },
              "report_ids": {
                "label": "Riporta gli ID",
                "description": "Percorso CSV opzionale per una tabella di join region_id,feature_id (una riga per ciascuna geometria che copre la regione)."
              }
            }
          },
          "create_accuracy_assessment_points": {
            "name": "Crea punti di valutazione dell'accuratezza",
            "description": "Genera punti di riferimento distribuiti casualmente e stratificati per le classi di un raster classificato o di un layer poligonale, precompilati con la classe della mappa e pronti per l'etichettatura della verità a terra (ArcGIS Create Accuracy Assessment Points). classification_accuracy_assessment consuma tali punti ma nulla li produceva, e create_spatial_sampling_locations stratifica per geometria poligonale o campo anziché per classe raster e non ha allocazione equalizzata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster classificato, oppure un layer poligonale classificato con 'class_field'."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Attributo di classe, obbligatorio quando 'input' è un layer vettoriale. Ignorato per gli ingressi raster, che usano il valore della cella."
              },
              "num_points": {
                "label": "Numero di punti",
                "description": "Numero totale di punti di riferimento (default 500)."
              },
              "sampling_strategy": {
                "label": "Strategia di campionamento",
                "description": "Uno tra 'stratified_random' (default, ripartizione proporzionale all'area della classe), 'equalized_stratified' (numero uguale per classe), 'random' (ignora la classe)."
              },
              "min_points_per_class": {
                "label": "Punti minimi per classe",
                "description": "Valore minimo applicato con 'stratified_random' affinché le classi rare non vengano escluse (default 1)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 di un ingresso raster (default 1)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme per il generatore di numeri casuali deterministico (default 1)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer puntuale in uscita con CLASSVALUE (classe della mappa), GrndTruth (-1 fino alla raccolta) e Stratum. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "create_cartographic_partitions": {
            "name": "Crea partizioni cartografiche",
            "description": "Produce poligoni di partizione adattivi e non sovrapposti che contengono ciascuno all'incirca un numero obiettivo di geometrie (più densi dove i dati si concentrano), così i grandi lavori di generalizzazione / mascheramento possono essere suddivisi in tessere in modo sicuro per la copertura — una controparte in puro Rust di ArcGIS Create Cartographic Partitions.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (qualsiasi geometria). Ogni geometria è ridotta a un punto rappresentativo e assegnata a una partizione."
              },
              "feature_count": {
                "label": "Numero di geometrie",
                "description": "Numero massimo obiettivo di geometrie per partizione. Una cella viene suddivisa finché contiene più di questo numero di geometrie. Default 1000."
              },
              "output": {
                "label": "Uscita",
                "description": "Vettoriale poligonale in uscita delle partizioni (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "create_overpass": {
            "name": "Crea cavalcavia",
            "description": "Costruisce poligoni di maschera di scontornatura (e linee di decorazione ad ala opzionali) dove una linea \"sopra\" incrocia una linea \"sotto\", così la linea inferiore viene mascherata all'incrocio.",
            "params": {
              "above": {
                "label": "Sopra",
                "description": "Vettoriale lineare delle geometrie che passano SOPRA l'incrocio (la maschera è orientata lungo di esse). Formato rilevato automaticamente, o handle in memoria."
              },
              "below": {
                "label": "Sotto",
                "description": "Vettoriale lineare delle geometrie mascherate SOTTO l'incrocio (le linee da scontornare). Formato rilevato automaticamente, o handle in memoria."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per i poligoni di maschera (driver dedotto dalla sua estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "output_decoration": {
                "label": "Decorazione in uscita",
                "description": "Percorso di uscita opzionale per le linee di decorazione ad ala. Se omesso, il risultato è memorizzato in memoria (viene comunque restituito come 'output_decoration')."
              },
              "margin_along": {
                "label": "Margine longitudinale",
                "description": "Semilunghezza di ciascuna maschera lungo la linea superiore, nelle unità del CRS (la lunghezza della maschera è il doppio di questo valore). Default 1.0."
              },
              "margin_across": {
                "label": "Margine trasversale",
                "description": "Semiampiezza di ciascuna maschera trasversalmente alla linea superiore, nelle unità del CRS (l'ampiezza della maschera è il doppio di questo valore). Default 1.0."
              },
              "wing_type": {
                "label": "Tipo di ala",
                "description": "Stile della decorazione: 'none', 'perpendicular' (default; un trattino attraverso ciascuna estremità della maschera) o 'parallel' (linee di contorno lungo ciascun lato)."
              }
            }
          },
          "create_routes": {
            "name": "Crea rotte",
            "description": "Dissolve le geometrie lineari per un campo identificatore di percorso, ordina i loro segmenti in una singola polilinea per percorso e assegna misure lineari (valori M) dalla lunghezza geometrica o dai campi di misura iniziale/finale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale lineare in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "route_id_field": {
                "label": "Campo ID percorso",
                "description": "Attributo che identifica ciascuna rotta; le linee in ingresso vengono raggruppate in base a esso, con una rotta in uscita per ogni valore distinto."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale delle rotte in uscita (driver dedotto dalla sua estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "measure_source": {
                "label": "Sorgente della misura",
                "description": "Modalità di assegnazione delle misure: LENGTH (0..lunghezza geometrica), ONE_FIELD (inizio da un campo, fine = inizio + lunghezza) o TWO_FIELDS (inizio/fine da campi, con interpolazione). Default LENGTH."
              },
              "from_measure_field": {
                "label": "Campo misura iniziale",
                "description": "Campo numerico che indica la misura iniziale di ciascuna rotta (usato da ONE_FIELD e TWO_FIELDS). Letto dal primo segmento della rotta."
              },
              "to_measure_field": {
                "label": "Campo misura finale",
                "description": "Campo numerico che indica la misura finale di ciascuna rotta (usato da TWO_FIELDS). Letto dal primo segmento della rotta."
              },
              "measure_factor": {
                "label": "Fattore della misura",
                "description": "Moltiplicatore applicato alla misura naturale (basata sulla lunghezza), ad esempio 0.001 per convertire i metri in chilometri. Default 1.0."
              },
              "measure_offset": {
                "label": "Offset della misura",
                "description": "Valore aggiunto a ogni misura lungo la rotta (trasla i valori m dell'intera rotta). Default 0.0."
              },
              "ignore_gaps": {
                "label": "Ignora i vuoti",
                "description": "Per LENGTH/ONE_FIELD, esclude dalla misura accumulata i salti rettilinei tra segmenti disgiunti, in modo che le interruzioni non gonfino le distanze. Default false."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Gli estremi entro questa distanza (unità del CRS) sono considerati coincidenti durante la ricucitura dei segmenti. Default 1e-6."
              }
            }
          },
          "create_spatial_sampling_locations": {
            "name": "Crea siti di campionamento spaziale",
            "description": "Genera punti di campionamento su un'area di studio poligonale con disegno casuale semplice, stratificato, sistematico (quadrato/esagono/triangolo) o a cluster, con casualità riproducibile tramite seme.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale poligonale dell'area di studio (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale puntuale in uscita (driver dedotto dalla sua estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "'simple_random' (default), 'stratified', 'systematic' o 'cluster'."
              },
              "num_samples": {
                "label": "Numero di campioni",
                "description": "Numero totale di punti di campionamento per simple_random, stratified e cluster. Default 100."
              },
              "strata_field": {
                "label": "Campo strato",
                "description": "Per stratified: raggruppa le geometrie in ingresso in strati in base a questo attributo. Se omesso, ogni geometria in ingresso costituisce uno strato a sé."
              },
              "allocation": {
                "label": "Allocazione",
                "description": "Per stratified: 'proportional' all'area dello strato (default), 'equal' per ciascuno strato, oppure 'population_field' proporzionale al totale di un campo."
              },
              "population_field": {
                "label": "Campo popolazione",
                "description": "Per allocation=population_field: il campo numerico il cui totale per strato determina la ripartizione."
              },
              "bin_shape": {
                "label": "Forma delle celle",
                "description": "Per systematic: reticolo 'square' (default), 'hexagon' o 'triangle'."
              },
              "bin_size": {
                "label": "Dimensione delle celle",
                "description": "Spaziatura (unità del CRS) per i reticoli sistematici e per i gruppi dei cluster. Obbligatoria per tali metodi."
              },
              "num_clusters": {
                "label": "Numero di cluster",
                "description": "Per cluster: quanti gruppi selezionare casualmente. Default 10."
              },
              "min_distance": {
                "label": "Distanza minima",
                "description": "Spaziatura minima tra i punti simple_random / stratified / cluster (unità del CRS). Default 0 (nessun vincolo)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme per il generatore di numeri casuali deterministico (default 1)."
              }
            }
          },
          "create_spatially_balanced_points": {
            "name": "Crea punti spazialmente bilanciati",
            "description": "Genera punti di campionamento spazialmente ben distribuiti (quasi-casuali di Halton) all'interno di un poligono di vincolo, opzionalmente ponderati da un raster di probabilità di inclusione, ciascuno etichettato con un ordine di campionamento bilanciato, come ArcGIS Create Spatially Balanced Points.",
            "params": {
              "constraint": {
                "label": "Vincolo",
                "description": "Layer poligonale di vincolo; i punti sono generati all'interno di questi poligoni."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "num_points": {
                "label": "Numero di punti",
                "description": "Numero di punti di campionamento da generare."
              },
              "probability": {
                "label": "Probabilità",
                "description": "Raster opzionale delle probabilità di inclusione; le celle con valori più alti hanno maggiore probabilità di essere campionate (normalizzate per il suo massimo)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme casuale per un campionamento riproducibile (default 1)."
              }
            }
          },
          "create_underpass": {
            "name": "Crea sottopasso",
            "description": "Agli incroci tra linee, costruisce poligoni di maschera orientati lungo la geometria superiore e ritaglia un vuoto corrispondente nella geometria inferiore, in modo che si legga come passante al di sotto (ArcGIS Create Underpass). Fratello di create_overpass incluso, che maschera la linea inferiore così che quella superiore si legga continua; un sottopasso invece necessita dell'interruzione decorativa, che è ciò che distingue un portale di galleria da un ponte. Produce sia le maschere sia le linee inferiori tagliate.",
            "params": {
              "above": {
                "label": "Sopra",
                "description": "Vettoriale lineare delle geometrie che passano SOPRA l'incrocio (le maschere sono orientate lungo di esse). Formato rilevato automaticamente, o handle in memoria."
              },
              "below": {
                "label": "Sotto",
                "description": "Vettoriale lineare delle geometrie che passano SOTTO l'incrocio (le linee su cui viene creata l'interruzione). Formato rilevato automaticamente, o handle in memoria."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per i poligoni di maschera del sottopasso. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_lines": {
                "label": "Linee in uscita",
                "description": "Percorso di uscita opzionale per il layer inferiore con le interruzioni del sottopasso ritagliate. Se omesso, il risultato è memorizzato in memoria (viene comunque restituito come 'output_lines')."
              },
              "margin_along": {
                "label": "Margine longitudinale",
                "description": "Semilunghezza di ciascuna maschera misurata LUNGO la linea superiore, nelle unità del CRS; la maschera si estende per il doppio di questo valore in tale direzione. Default 1.0."
              },
              "margin_across": {
                "label": "Margine trasversale",
                "description": "Semiampiezza di ciascuna maschera TRASVERSALMENTE alla linea superiore, nelle unità del CRS. Per un incrocio perpendicolare è ciò che delimita l'interruzione ritagliata nella linea inferiore, per cui la lunghezza rimossa è il doppio di questo valore. Default 1.0."
              },
              "min_angle": {
                "label": "Angolo minimo",
                "description": "Salta gli incroci in cui le due linee si incontrano con un angolo inferiore a questo valore in gradi, poiché una maschera quasi parallela è instabile. Default 15."
              }
            }
          },
          "cul_de_sac_masks": {
            "name": "Maschere di vicoli ciechi",
            "description": "Genera poligoni di maschera di scontornatura sensibili alla scala alle sacche delle strade a fondo cieco di una rete stradale, come ArcGIS Cul-De-Sac Masks.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer delle linee centrali delle strade."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale dei poligoni di maschera in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "reference_scale": {
                "label": "Scala di riferimento",
                "description": "Denominatore della scala della mappa per cui è dimensionata la maschera (ad esempio 24000 per 1:24.000)."
              },
              "symbol_width": {
                "label": "Larghezza del simbolo",
                "description": "Larghezza del contorno stradale nelle unità di pagina (vedere 'page_unit') alla scala di riferimento."
              },
              "margin": {
                "label": "Margine",
                "description": "Margine aggiuntivo attorno al simbolo, nelle unità di pagina (default 0)."
              },
              "page_unit": {
                "label": "Unità della pagina",
                "description": "Unità di 'symbol_width' e 'margin': punti (default, 1/72 di pollice), mm o pollici."
              },
              "map_units_per_meter": {
                "label": "Unità mappa per metro",
                "description": "Unità del CRS per metro (default 1, corretto per i CRS proiettati basati sul metro). Per un layer in gradi usare circa 0.000008983."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Tolleranza di aggancio delle coordinate per unire gli estremi delle linee in nodi di rete (default 0.001 unità mappa)."
              },
              "attributes": {
                "label": "Attributi",
                "description": "ids_only (default) | all — indica se riportare sulla maschera gli attributi della geometria di origine."
              }
            }
          },
          "cut_fill": {
            "name": "Sterro e riporto",
            "description": "Variazione volumetrica tra due superfici DEM (prima/dopo) o tra una superficie e un piano di riferimento: raster con segno della variazione di elevazione più volumi di scavo, riporto e netto, con etichettatura opzionale del volume per regione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster 'prima' (o della singola superficie per la modalità a piano)."
              },
              "after": {
                "label": "Dopo",
                "description": "Raster 'dopo' (modalità a due superfici). Deve condividere la griglia di 'input'. Fornire questo oppure 'plane'."
              },
              "plane": {
                "label": "Piano",
                "description": "Quota del piano di riferimento (modalità superficie-volume): la variazione è misurata come input meno questo valore. Fornire questo oppure 'after'."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita per la variazione di quota con segno (Δz). Se omesso, il risultato è memorizzato in memoria."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 da leggere dal raster o dai raster in ingresso. Default 1."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Le celle con |Δz| pari o inferiore a questo valore (unità z del CRS) sono considerate invariate. Default 0."
              },
              "region_output": {
                "label": "Regione in uscita",
                "description": "Percorso opzionale del raster per le etichette delle regioni contigue di sterro/riporto (ID di regione >= 1; le celle invariate sono nodata)."
              },
              "csv_output": {
                "label": "CSV in uscita",
                "description": "Percorso CSV opzionale per la tabella dei volumi per regione (region_id, type, cell_count, volume)."
              }
            }
          },
          "darcy_flow": {
            "name": "Flusso di Darcy",
            "description": "Campo di velocità di Darcy delle acque sotterranee in regime stazionario da raster di carico idraulico, trasmissività e porosità — un raster di magnitudine del flusso (velocità di Darcy) e un raster di direzione del flusso verso il gradiente discendente (v = -(T/n)·∇head), con tracciamento avvettivo opzionale delle particelle (RK2) da punti seme in polilinee di flusso — come ArcGIS Darcy Flow / Particle Track.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster del carico idraulico (quota della superficie freatica). La dimensione della cella è ricavata da questo raster."
              },
              "transmissivity": {
                "label": "Trasmissività",
                "description": "Raster della trasmissività (co-registrato con il raster del carico idraulico)."
              },
              "porosity": {
                "label": "Porosità",
                "description": "Raster della porosità efficace (co-registrato con il raster del carico idraulico; i valori devono essere > 0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita della magnitudine della velocità di Darcy. Se omesso, il risultato è memorizzato in memoria."
              },
              "direction": {
                "label": "Direzione",
                "description": "Percorso opzionale del raster della direzione di flusso in uscita (azimut in gradi, da nord in senso orario, verso il gradiente discendente). Se omesso, il risultato è memorizzato in memoria."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 da leggere da ciascun raster in ingresso (default 1)."
              },
              "seeds": {
                "label": "Semi",
                "description": "Vettoriale puntuale opzionale dei semi delle particelle. Se indicato, le linee di flusso vengono tracciate a partire da ciascun seme."
              },
              "streamlines": {
                "label": "Linee di flusso",
                "description": "Percorso opzionale del vettoriale lineare in uscita per le linee di flusso delle particelle tracciate (richiede 'seeds')."
              },
              "step": {
                "label": "Passo",
                "description": "Lunghezza del passo di tracciamento delle particelle nelle unità del CRS (default: la dimensione della cella del raster del carico idraulico)."
              },
              "max_steps": {
                "label": "Passi massimi",
                "description": "Numero massimo di passi di integrazione per particella (default 1000)."
              }
            }
          },
          "delineate_built_up_areas": {
            "name": "Delimita le aree edificate",
            "description": "Generalizza le impronte di edifici dense in poligoni lisci di insediamento / estensione urbana raggruppando gli edifici vicini (chiusura morfologica), con filtri di numero minimo di edifici e di area.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer poligonale in ingresso delle impronte degli edifici, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "grouping_distance": {
                "label": "Distanza di raggruppamento",
                "description": "Gli edifici le cui impronte si trovano entro questa distanza (unità del CRS) vengono raggruppati in un'unica area edificata. Imposta il raggio di chiusura morfologica alla metà di questo valore."
              },
              "min_building_count": {
                "label": "Numero minimo di edifici",
                "description": "Scarta le aree edificate che contengono meno di questo numero di edifici (default 1 — mantiene tutti i gruppi)."
              },
              "min_area": {
                "label": "Area minima",
                "description": "Scarta le aree edificate la cui area (unità del CRS al quadrato) è inferiore a questo valore e riempie i buchi interni più piccoli di esso. Default: mantenere tutte."
              },
              "simplify_tolerance": {
                "label": "Tolleranza di semplificazione",
                "description": "Tolleranza di Douglas–Peucker (unità del CRS) applicata al contorno dell'area edificata per assottigliare il buffer arrotondato ricco di vertici. Default 0 (nessuna semplificazione)."
              }
            }
          },
          "delineate_depressions": {
            "name": "Delimita le depressioni",
            "description": "Delinea depressioni annidate da un raster dei pozzi usando il metodo dei level set (lidar slicing.py).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster dei pozzi in ingresso (ad esempio l'uscita di extract_sinks)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster degli ID delle depressioni. Se omesso, il risultato è memorizzato in memoria."
              },
              "level_output": {
                "label": "Livello in uscita",
                "description": "Percorso di uscita opzionale per il raster del livello delle depressioni."
              },
              "csv_output": {
                "label": "CSV in uscita",
                "description": "Percorso di uscita opzionale per il CSV degli attributi delle depressioni."
              },
              "vector_output": {
                "label": "Vettoriale in uscita",
                "description": "Percorso di uscita opzionale per i poligoni delle depressioni in formato GeoJSON (con gli attributi uniti)."
              },
              "min_size": {
                "label": "Dimensione minima",
                "description": "Numero minimo di pixel per una depressione (default 10)."
              },
              "min_depth": {
                "label": "Profondità minima",
                "description": "Profondità minima della depressione (accettata per compatibilità; inutilizzata, per corrispondenza con lidar)."
              },
              "interval": {
                "label": "Intervallo",
                "description": "Intervallo di sezionamento per il metodo level-set (default 0.3)."
              }
            }
          },
          "delineate_mounts": {
            "name": "Delimita i rilievi",
            "description": "Delinea la gerarchia annidata delle forme elevate (rilievi) in un DEM (lidar mounts.py).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster DEM in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster degli ID dei rilievi. Se omesso, il risultato è memorizzato in memoria."
              },
              "level_output": {
                "label": "Livello in uscita",
                "description": "Percorso di uscita opzionale per il raster del livello dei rilievi."
              },
              "csv_output": {
                "label": "CSV in uscita",
                "description": "Percorso di uscita opzionale per il CSV degli attributi dei rilievi."
              },
              "vector_output": {
                "label": "Vettoriale in uscita",
                "description": "Percorso di uscita opzionale per i poligoni dei rilievi in formato GeoJSON (con gli attributi uniti)."
              },
              "min_size": {
                "label": "Dimensione minima",
                "description": "Numero minimo di pixel per un rilievo (default 10)."
              },
              "min_height": {
                "label": "Altezza minima",
                "description": "Altezza minima del rilievo (accettata per compatibilità; inutilizzata, per corrispondenza con lidar)."
              },
              "interval": {
                "label": "Intervallo",
                "description": "Intervallo di sezionamento per il metodo level-set (default 0.3)."
              },
              "delta": {
                "label": "Delta",
                "description": "Valore di base aggiunto durante il ribaltamento del DEM (default 100)."
              }
            }
          },
          "dem_filter": {
            "name": "Filtro DEM",
            "description": "Liscia un DEM con un filtro di media, mediano o gaussiano (lidar filtering.py).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster DEM in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "filter": {
                "label": "Filtro",
                "description": "Tipo di filtro: 'mean', 'median' o 'gaussian' (default 'mean')."
              },
              "kernel_size": {
                "label": "Dimensione del kernel",
                "description": "Dimensione della finestra in pixel per i filtri di media/mediano (default 3)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Deviazione standard per il filtro gaussiano (default 1.0)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da filtrare, in base 1 (default 1)."
              }
            }
          },
          "dendrogram": {
            "name": "Dendrogramma",
            "description": "Costruisce un albero di fusione gerarchico sulle firme delle classi per mostrare quanto le classi siano separabili, come ArcGIS Dendrogram.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer di geometrie raggruppate che contiene un campo di classe e i campi numerici che definiscono lo spazio delle caratteristiche."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Campo che contiene l'identificativo della classe / del cluster."
              },
              "fields": {
                "label": "Campi",
                "description": "Campi numerici separati da virgole che definiscono lo spazio delle caratteristiche."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale della tabella di fusione in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "distance": {
                "label": "Distanza",
                "description": "Distanza tra le firme: 'variance' (default; normalizzata per la dispersione entro la classe) o 'mean_only'."
              },
              "standardize": {
                "label": "Standardizza",
                "description": "Standardizza in punteggi z ciascun campo prima di calcolare le distanze, in modo che i campi con intervalli ampi non prevalgano (default true)."
              },
              "output_text": {
                "label": "Testo in uscita",
                "description": "Percorso opzionale per una rappresentazione dell'albero in testo semplice con indentazione."
              }
            }
          },
          "densify_sampling_network": {
            "name": "Densifica la rete di campionamento",
            "description": "Propone nuove posizioni di campionamento nelle celle della superficie di errore standard della predizione di kriging più alto, rispettando una distanza di inibizione di spaziatura minima, come ArcGIS Densify Sampling Network.",
            "params": {
              "prediction_error": {
                "label": "Errore di predizione",
                "description": "Raster in ingresso dell'errore standard di predizione (ad esempio una superficie di varianza/errore di kriging). I nuovi campioni mirano alle sue celle con errore più alto."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "count": {
                "label": "Conteggio",
                "description": "Numero di nuove posizioni di campionamento da proporre."
              },
              "inhibition_distance": {
                "label": "Distanza di inibizione",
                "description": "Spaziatura minima tra i campioni proposti in unità mappa (default 0 = nessuna inibizione; semplicemente le celle con errore più alto)."
              },
              "mask": {
                "label": "Maschera",
                "description": "Layer poligonale opzionale; sono candidate ammissibili solo le celle il cui centro ricade al suo interno."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 del raster dell'errore di predizione da leggere (default 1)."
              }
            }
          },
          "detect_bright_ocean_objects": {
            "name": "Rileva oggetti luminosi in mare",
            "description": "Trova navi e altri bersagli puntiformi luminosi sull'acqua in immagini SAR con un rilevatore CFAR a due parametri e li emette come rettangoli di delimitazione orientati con lunghezza, larghezza, rotta e retrodiffusione di picco (ArcGIS Detect Bright Ocean Objects). Nessuno dei due registri ha un rilevatore a clutter locale: una soglia globale non può funzionare perché il clutter marino si illumina con il vento e l'angolo di incidenza, matched_filter_target_detection è un rilevatore ottico spettrale e detect_image_anomalies usa un modello globale anziché a finestra scorrevole.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster del backscatter SAR."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer poligonale in uscita degli oggetti rilevati. Se omesso, il risultato è memorizzato in memoria."
              },
              "geometry_type": {
                "label": "Tipo di geometria",
                "description": "'bounding_box' (default) per il rettangolo minimo orientato, oppure 'perimeter' per il contorno tracciato del rilevamento."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Soglia di rilevamento CFAR in deviazioni standard dello sfondo (default 5.0)."
              },
              "guard_size": {
                "label": "Dimensione della guardia",
                "description": "Semiampiezza in celle della banda di guardia esclusa dalla stima dello sfondo (default 3). Deve essere inferiore a background_size."
              },
              "background_size": {
                "label": "Dimensione dello sfondo",
                "description": "Semiampiezza in celle dell'anello di sfondo (default 12)."
              },
              "mask_features": {
                "label": "Geometrie di maschera",
                "description": "Layer poligonale che maschera la terraferma o l'acqua. Le celle escluse dalla maschera non vengono né analizzate né usate come sfondo."
              },
              "mask_type": {
                "label": "Tipo di maschera",
                "description": "'land_polygon' (default; analizza al di fuori dei poligoni) o 'water_polygon' (analizza al loro interno)."
              },
              "min_object_length": {
                "label": "Lunghezza minima dell'oggetto",
                "description": "Scarta gli oggetti più corti di questo valore, in unità mappa."
              },
              "max_object_length": {
                "label": "Lunghezza massima dell'oggetto",
                "description": "Scarta gli oggetti più lunghi di questo valore, in unità mappa."
              },
              "min_object_width": {
                "label": "Larghezza minima dell'oggetto",
                "description": "Scarta gli oggetti più stretti di questo valore, in unità mappa."
              },
              "max_object_width": {
                "label": "Larghezza massima dell'oggetto",
                "description": "Scarta gli oggetti più larghi di questo valore, in unità mappa."
              },
              "min_cells": {
                "label": "Celle minime",
                "description": "Scarta i rilevamenti più piccoli di questo numero di celle (default 2), sopprimendo i picchi di speckle isolati."
              },
              "input_units": {
                "label": "Unità di ingresso",
                "description": "'intensity' (default), 'dn', 'amplitude' o 'db'. Il rilevamento opera sulla potenza lineare, dove le statistiche del clutter sono significative."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in cui effettuare la ricerca, in base 1 (default 1)."
              }
            }
          },
          "detect_dark_ocean_areas": {
            "name": "Rileva aree scure in mare",
            "description": "Trova chiazze anomalmente scure sull'acqua in immagini SAR — chiazze di petrolio, fuoriuscite naturali, film algali, zone a basso vento — come regioni che si trovano un dato numero di deviazioni standard sotto lo sfondo marino locale, riportate con il loro contrasto in dB (ArcGIS Detect Dark Ocean Areas). Il complemento di detect_bright_ocean_objects, e distinto da extract_water_sar: una scena tutta acqua è unimodale, quindi una divisione di Otsu bisecherebbe semplicemente il clutter marino e riporterebbe metà dell'oceano come chiazza.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster del backscatter SAR sull'acqua."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer poligonale in uscita delle aree scure. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_raster": {
                "label": "Raster in uscita",
                "description": "Maschera binaria in uscita (1 scuro, 0 sfondo). Prodotta sempre; memorizzata in memoria quando non è indicato alcun percorso."
              },
              "method": {
                "label": "Metodo",
                "description": "'statistical' (default; un numero prefissato di deviazioni standard sotto la media dello sfondo), 'otsu' o 'fixed'."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Per 'statistical', quante deviazioni standard sotto la media sono considerate scure (default 2.0). Per 'fixed', il livello in dB pari o inferiore al quale una cella è scura."
              },
              "min_area": {
                "label": "Area minima",
                "description": "Scarta le aree scure più piccole di questa area in unità mappa al quadrato. Le chiazze sono ampie e contigue; lo speckle no."
              },
              "min_contrast_db": {
                "label": "Contrasto minimo (dB)",
                "description": "Scarta le regioni che si trovano meno di questo numero di dB al di sotto dello sfondo. Una chiazza di olio minerale è tipicamente più di 5 dB al di sotto."
              },
              "mask_features": {
                "label": "Geometrie di maschera",
                "description": "Layer poligonale che limita l'analisi all'acqua. La terraferma è brillante e gonfierebbe la stima dello sfondo."
              },
              "mask_type": {
                "label": "Tipo di maschera",
                "description": "'land_polygon' (default; analizza al di fuori dei poligoni) o 'water_polygon' (analizza al loro interno)."
              },
              "histogram_bins": {
                "label": "Classi dell'istogramma",
                "description": "Classi usate per l'istogramma di Otsu (default 256)."
              },
              "input_units": {
                "label": "Unità di ingresso",
                "description": "'intensity' (default), 'dn', 'amplitude' o 'db'."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in cui effettuare la ricerca, in base 1 (default 1)."
              }
            }
          },
          "detect_feature_changes": {
            "name": "Rileva cambiamenti negli elementi",
            "description": "Abbina due dataset lineari per distanza di Hausdorff e classifica ciascuno come invariato / spaziale / attributo / spaziale_attributo / nuovo, più le geometrie di base eliminate — il punto di ingresso per il rilevamento dei cambiamenti e la conflazione vettoriale, come ArcGIS Detect Feature Changes.",
            "params": {
              "update": {
                "label": "Aggiorna",
                "description": "Layer vettoriale lineare aggiornato (il nuovo stato)."
              },
              "base": {
                "label": "Base",
                "description": "Layer vettoriale lineare di base (lo stato precedente) con cui effettuare il confronto."
              },
              "output": {
                "label": "Uscita",
                "description": "Vettoriale lineare in uscita (geometrie aggiornate classificate, più le geometrie di base eliminate). Se omesso, il risultato è memorizzato in memoria."
              },
              "search_distance": {
                "label": "Distanza di ricerca",
                "description": "Distanza massima (unità del CRS) per associare una linea aggiornata a una linea di base. Obbligatoria."
              },
              "spatial_tolerance": {
                "label": "Tolleranza spaziale",
                "description": "Distanza di Hausdorff al di sotto della quale una geometria associata è considerata invariata (unità del CRS). Default: search_distance / 5."
              },
              "compare_fields": {
                "label": "Campi da confrontare",
                "description": "Campo o campi separati da virgole presenti su entrambi i layer da confrontare per rilevare variazioni degli attributi."
              }
            }
          },
          "detect_graphic_conflict": {
            "name": "Rileva conflitti grafici",
            "description": "Trova dove le estensioni simbolizzate (larghezza disegnata) di due layer di geometrie — o di un layer rispetto a se stesso — si sovrappongono o si affollano entro una separazione minima, emettendo un poligono di conflitto per ogni coppia in conflitto etichettato con gli ID di entrambe le geometrie sorgente e l'area di sovrapposizione, come ArcGIS Detect Graphic Conflict.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (punti, linee o poligoni)."
              },
              "conflict": {
                "label": "Conflitto",
                "description": "Secondo layer vettoriale rispetto a cui verificare 'input'. Omettere per verificare 'input' rispetto a sé stesso."
              },
              "symbol_width": {
                "label": "Larghezza del simbolo",
                "description": "Larghezza/diametro simbolizzato delle geometrie di 'input', in unità mappa."
              },
              "conflict_symbol_width": {
                "label": "Larghezza del simbolo in conflitto",
                "description": "Larghezza/diametro simbolizzato delle geometrie di 'conflict', in unità mappa. Default: uguale a 'symbol_width'. Ignorato quando 'conflict' è omesso."
              },
              "conflict_distance": {
                "label": "Distanza di conflitto",
                "description": "Separazione aggiuntiva richiesta oltre al semplice contatto, in unità mappa. Default 0."
              },
              "line_connection_allowance": {
                "label": "Tolleranza di connessione delle linee",
                "description": "Raggio attorno a un estremo condiviso di due geometrie lineari dello stesso layer entro il quale la loro sovrapposizione è considerata normale connettività testa-coda e non un conflitto. Default 0 (nessuna tolleranza)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita con i campi 'input_fid', 'conflict_fid' e 'overlap_area'. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "detect_image_anomalies": {
            "name": "Rileva anomalie nell'immagine",
            "description": "Assegna a ogni pixel di un'immagine multibanda un punteggio in base alla sua distanza di Mahalanobis dalle statistiche di banda della scena (o di una finestra mobile) — il rilevatore di anomalie Reed–Xiaoli (RX) — con una maschera opzionale a soglia di percentile, come ArcGIS Detect Image Anomalies.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster multibanda in ingresso (2 o più bande)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster in uscita del punteggio di anomalia (F32). Se omesso, il risultato è memorizzato in memoria."
              },
              "mode": {
                "label": "Modalità",
                "description": "'global' (statistiche sull'intera scena, default) o 'local' (statistiche su finestra mobile)."
              },
              "window": {
                "label": "Finestra",
                "description": "Dimensione dispari della finestra (in pixel) per la modalità locale (default 15)."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Percentile opzionale (0-100) della distribuzione dei punteggi al di sopra del quale viene scritta una maschera binaria delle anomalie."
              },
              "mask_output": {
                "label": "Maschera in uscita",
                "description": "Percorso di uscita per la maschera binaria delle anomalie (richiede 'threshold'). Se omesso in presenza di una soglia, il risultato è memorizzato in memoria."
              }
            }
          },
          "detect_incidents": {
            "name": "Rileva incidenti",
            "description": "Segnala dove una condizione inizia e termina lungo ogni traccia: raggruppa i punti con timestamp per traccia, ordina per tempo, valuta un confronto di inizio (e opzionalmente di fine) su un attributo numerico ed emette gli episodi di incidente come punti segnalati o segmenti lineari per episodio con ID e durate — come ArcGIS Detect Incidents.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso di osservazioni con marca temporale."
              },
              "track_field": {
                "label": "Campo traccia",
                "description": "Campo che identifica ciascuna traccia/oggetto in movimento (ad esempio l'ID di un veicolo o di un animale)."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo che contiene l'istante di ciascun punto: secondi numerici o una marca temporale ISO-8601."
              },
              "start_condition": {
                "label": "Condizione iniziale",
                "description": "Condizione che apre un incidente, ad esempio 'speed > 30'. Grammatica: '<field> <op> <number>' con op tra > >= < <= == != , eventualmente due clausole unite da AND."
              },
              "end_condition": {
                "label": "Condizione finale",
                "description": "Condizione opzionale che chiude un incidente (stessa grammatica). Se omessa, un incidente termina quando la condizione di apertura cessa di essere soddisfatta."
              },
              "mode": {
                "label": "Modalità",
                "description": "Modalità di uscita: 'points' (default, ogni punto viene trasferito con i campi dell'incidente) o 'segments' (una polilinea per incidente)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "dice": {
            "name": "Suddividi a dadi",
            "description": "Divide poligoni o polilinee con più vertici di un limite in una griglia di pezzi più piccoli (come ArcGIS Dice), così le sovrapposizioni e la suddivisione in tessere a valle restano veloci — un quadtree adattivo interseca la geometria con ogni quadrante finché ogni pezzo è sotto il limite.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer poligonale o polilineare in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer in uscita dei pezzi suddivisi. Se omesso, il risultato è memorizzato in memoria."
              },
              "vertex_limit": {
                "label": "Limite di vertici",
                "description": "Numero massimo di vertici per geometria in uscita (default 10000). Le geometrie pari o inferiori a questo valore vengono trasferite immutate."
              }
            }
          },
          "difference_3d": {
            "name": "Differenza 3D",
            "description": "Sottrae un insieme di solidi 3D da un altro insieme, riportando il volume rimosso e quello rimanente in ogni geometria minuendo (ArcGIS Difference 3D). union_3d era l'unica sovrapposizione 3D in entrambi i registri ed erase è solo poligonale 2D, quindi non c'era modo di calcolare il volume di scavo rimanente dopo un corpo di taglio o il volume di un pennacchio fuori da un involucro di esclusione. I volumi dei minuendi sono esatti; il volume rimosso è stimato per occupazione di voxel a una risoluzione riportata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Solidi 3D chiusi minuendi (MultiPolygon a maglia triangolare con Z)."
              },
              "subtract": {
                "label": "Sottrai",
                "description": "Solidi 3D chiusi sottraendi da rimuovere da ciascun minuendo."
              },
              "output": {
                "label": "Uscita",
                "description": "Tabella in uscita, una riga per minuendo. Se omessa, il risultato è memorizzato in memoria."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Celle voxel lungo l'asse più lungo del riquadro di delimitazione di ciascun minuendo (default 64). Valori più alti sono più accurati e più lenti."
              },
              "keep_geometry": {
                "label": "Mantieni la geometria",
                "description": "Riporta la geometria originale di ciascun minuendo sulla relativa riga in uscita (default false: una tabella di soli attributi). La geometria è il minuendo NON tagliato — non viene prodotta alcuna maglia unita esatta."
              }
            }
          },
          "diffusion_interpolation_with_barriers": {
            "name": "Interpolazione per diffusione con barriere",
            "description": "Interpola misurazioni puntuali sparse in un raster simulando una diffusione di calore che fluisce ATTORNO alle barriere assolute (senza flusso) anziché attraverso di esse (come ArcGIS Diffusion Interpolation With Barriers). I campioni sono fissati come celle bloccate; ogni altra cella si rilassa verso la media dei suoi vicini non barriera in `number_iterations` passaggi di Jacobi dell'equazione di Laplace/del calore, così l'influenza decade con la distanza di diffusione. Distinto dal kernel a percorso minimo senza barriere di interpolate_with_barriers e dal lisciatore raster anisotropic_diffusion_filter.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso delle misure campionate (Point / MultiPoint)."
              },
              "z_field": {
                "label": "Campo Z",
                "description": "Campo numerico dei punti che contiene il valore da interpolare."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster interpolato in uscita (GeoTIFF). Se omesso, il risultato è memorizzato in memoria."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella / risoluzione in uscita in unità mappa (metri per un CRS geografico, unità del CRS altrimenti). Obbligatoria."
              },
              "barriers": {
                "label": "Barriere",
                "description": "Layer vettoriale opzionale di barriere (polilinee o poligoni) che blocca la diffusione. Le polilinee bloccano le celle attraversate dai loro segmenti; i poligoni bloccano le celle il cui centro ricade al loro interno. Omettere per un confronto privo di barriere."
              },
              "bandwidth": {
                "label": "Larghezza di banda",
                "description": "Peso di rilassamento lambda per iterazione in (0, 0.25] (default 0.2): a ogni passata ciascuna cella libera si sposta di questa frazione verso la media dei suoi vicini."
              },
              "number_iterations": {
                "label": "Numero di iterazioni",
                "description": "Numero di passate di rilassamento di Jacobi dell'equazione del calore (default 100). Più iterazioni diffondono l'influenza più lontano."
              },
              "weight_field": {
                "label": "Campo peso",
                "description": "Campo numerico opzionale che indica un peso per punto (default 1), usato solo per mediare i campioni coincidenti che ricadono nella stessa cella in uscita."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Sostituisce il codice EPSG del CRS in ingresso (ad esempio quando il layer non è etichettato). Il valore 4326 attiva la proiezione locale in metri."
              }
            }
          },
          "dimension_reduction": {
            "name": "Riduzione della dimensionalità",
            "description": "Analisi delle componenti principali sugli attributi numerici delle geometrie (come ArcGIS Dimension Reduction): standardizza i campi selezionati, decompone in autovalori la matrice di correlazione/covarianza con una rotazione di Jacobi implementata a mano e riscrive i punteggi delle componenti PC1..PCk nelle geometrie più un rapporto di autovalori/varianza/loading — la controparte per attributi vettoriali di principal_component_analysis incluso, solo per bande.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale (o tabella) in ingresso con campi attributo numerici."
              },
              "fields": {
                "label": "Campi",
                "description": "Elenco separato da virgole di almeno due campi numerici da ridurre."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer vettoriale in uscita con i campi dei punteggi delle componenti principali aggiunti. Se omesso, il risultato è memorizzato in memoria."
              },
              "table": {
                "label": "Tabella",
                "description": "Percorso CSV opzionale per il rapporto delle componenti (autovalore, varianza spiegata, cumulata, loading per variabile). Restituito comunque sempre nel risultato."
              },
              "num_components": {
                "label": "Numero di componenti",
                "description": "Numero di componenti principali da mantenere. Default: quante bastano per raggiungere 'min_variance', altrimenti tutti i campi."
              },
              "min_variance": {
                "label": "Varianza minima",
                "description": "Mantiene il minor numero di componenti la cui varianza spiegata cumulata raggiunge questa frazione (0-1). Ignorato se è impostato 'num_components'."
              },
              "standardize": {
                "label": "Standardizza",
                "description": "Standardizza ciascun campo (punteggio z) prima della PCA in modo che le scale siano confrontabili — analizza la matrice di correlazione. Default true; false analizza la matrice di covarianza."
              }
            }
          },
          "dimensional_moving_statistics": {
            "name": "Statistiche mobili dimensionali",
            "description": "Fa scorrere una finestra mobile lungo la dimensione di un cubo raster, scrivendo una fetta lisciata per ogni fetta in ingresso — la media o mediana mobile in loco che trasforma una serie temporale satellitare rumorosa in una utilizzabile (ArcGIS Dimensional Moving Statistics). time_series_smoothing del round 17 è solo vettoriale, i filtri focali inclusi spostano una finestra spazialmente all'interno di una singola fetta e aggregate_multidimensional_raster accorcia il cubo in gruppi. Include una media circolare, senza la quale mediare esposizione o fase attraverso il punto di avvolgimento è privo di senso.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Un unico raster multibanda (ogni banda è una fetta) oppure un elenco separato da virgole di raster co-registrati."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster multibanda in uscita con una banda per ciascuna fetta in ingresso. Se omesso, il risultato è memorizzato in memoria."
              },
              "dimension": {
                "label": "Dimensione",
                "description": "Nome della dimensione, usato solo nel rapporto (default 'slice')."
              },
              "backward_window": {
                "label": "Finestra all'indietro",
                "description": "Fette precedenti a quella corrente da includere (default 1)."
              },
              "forward_window": {
                "label": "Finestra in avanti",
                "description": "Fette successive a quella corrente da includere (default 1)."
              },
              "statistic": {
                "label": "Statistica",
                "description": "'mean' (default), 'circular_mean', 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'std' o 'sum'."
              },
              "percentile_value": {
                "label": "Valore del percentile",
                "description": "Percentile in [0, 100] per la statistica 'percentile' (default 50)."
              },
              "period": {
                "label": "Periodo",
                "description": "Periodo di avvolgimento per 'circular_mean' (default 360, cioè gradi; usare 6.283185307179586 per i radianti)."
              },
              "min_valid": {
                "label": "Minimo validi",
                "description": "Numero minimo di osservazioni non no-data nella finestra prima che venga scritto un valore (default 1)."
              },
              "nodata_handling": {
                "label": "Gestione del nodata",
                "description": "'data' (default; salta i no-data e calcola dai restanti), 'nodata' (un qualsiasi no-data nella finestra rende l'uscita no-data) o 'fill_nodata' (scrive un valore anche dove la fetta centrale è essa stessa no-data)."
              }
            }
          },
          "directional_distribution": {
            "name": "Distribuzione direzionale",
            "description": "Statistiche descrittive della distribuzione geografica: centro medio, centro mediano, geometria centrale, distanza standard (cerchio) ed ellisse di deviazione standard — con ponderazione e raggruppamento opzionali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (preferibilmente punti; le altre geometrie usano il punto rappresentativo dato dalla media dei vertici)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "statistic": {
                "label": "Statistica",
                "description": "Misura da calcolare: 'mean_center', 'median_center', 'central_feature', 'standard_distance' o 'standard_deviational_ellipse'."
              },
              "weight_field": {
                "label": "Campo peso",
                "description": "Campo numerico opzionale per ponderare ciascuna geometria (ad esempio la popolazione). Default: ogni geometria ha peso 1."
              },
              "case_field": {
                "label": "Campo caso",
                "description": "Campo opzionale per cui raggruppare le geometrie; viene prodotta una geometria in uscita per ogni valore distinto."
              },
              "n_std": {
                "label": "N deviazioni standard",
                "description": "Moltiplicatore della deviazione standard (1, 2 o 3) per il cerchio della distanza standard e per l'ellisse deviazionale. Default 1."
              }
            }
          },
          "directional_trend": {
            "name": "Tendenza direzionale",
            "description": "Proietta i punti campione su un azimut scelto e adatta un polinomio di 1°-3° ordine valore-distanza per rilevare una tendenza globale/anisotropa prima della variografia (come Directional Trend di ArcGIS). 'determine' esplora gli azimut per trovare la direzione di massima varianza spiegata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (preferibilmente punti; le altre geometrie usano il punto rappresentativo dato dalla media dei vertici)."
              },
              "field": {
                "label": "Campo",
                "description": "Campo attributo numerico di cui analizzare il trend."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Direzione bussola in gradi (0 = nord, in senso orario) su cui proiettare, oppure 'determine' (default) per scandire 0-179° alla ricerca della direzione di massima varianza spiegata."
              },
              "order": {
                "label": "Ordine",
                "description": "Ordine polinomiale 1, 2 o 3 (default 2)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale in uscita (driver dedotto dalla sua estensione). Se omesso, il risultato è memorizzato in memoria. I punti contengono proj_dist, value, fitted e residual."
              }
            }
          },
          "directional_variogram": {
            "name": "Analisi del variogramma direzionale",
            "description": "Calcola variogrammi in più direzioni per rilevare l'anisotropia spaziale. Rivela schemi di continuità direzionale essenziali per un kriging realistico.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale con i valori misurati"
              },
              "field": {
                "label": "Campo",
                "description": "Campo che contiene i valori misurati"
              },
              "directions": {
                "label": "Direzioni",
                "description": "Elenco separato da virgole degli azimut (0-180°) da analizzare"
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Tolleranza di direzione in gradi (default 22.5)"
              },
              "max_distance": {
                "label": "Distanza massima",
                "description": "Distanza di lag massima da calcolare (default 1000)"
              },
              "bin_size": {
                "label": "Dimensione delle celle",
                "description": "Ampiezza delle classi di lag (default 50)"
              },
              "output_json": {
                "label": "JSON in uscita",
                "description": "Percorso del file in uscita per i risultati del variogramma direzionale"
              },
              "output_html": {
                "label": "HTML in uscita",
                "description": "Percorso di uscita opzionale per la visualizzazione HTML del diagramma a rosa"
              }
            }
          },
          "disperse_markers": {
            "name": "Disperdi i marcatori",
            "description": "Distanzia i simboli puntuali coincidenti o sovrapposti fino a una spaziatura minima centro-centro (schemi espanso/ad anello/a croce/quadrato) così i punti impilati restano individualmente visibili, come ArcGIS Disperse Markers.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "min_spacing": {
                "label": "Spaziatura minima",
                "description": "Spaziatura minima da centro a centro da imporre tra i punti raggruppati, in unità mappa."
              },
              "pattern": {
                "label": "Pattern",
                "description": "'expanded' (default, anelli concentrici + repulsione locale), 'ring' (cerchio singolo), 'cross' (quattro bracci) o 'square' (griglia)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme intero per la risoluzione deterministica dei pari merito quando i membri partono esattamente coincidenti (default 0)."
              }
            }
          },
          "dissolve_route_events": {
            "name": "Dissolvi gli eventi di rotta",
            "description": "Fonde gli eventi di percorso che si toccano o si sovrappongono lungo lo stesso percorso in singoli intervalli di misura, solo quando i campi di dissolvenza coincidono ('dissolve') oppure concatenando i valori diversi ('concatenate'). Come ArcGIS Dissolve Route Events.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Tabella degli eventi in ingresso (eventi lineari con misure di inizio/fine)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso della tabella degli eventi in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "route_id_field": {
                "label": "Campo ID percorso",
                "description": "Campo che contiene l'identificativo della rotta."
              },
              "from_measure_field": {
                "label": "Campo misura iniziale",
                "description": "Campo che contiene la misura iniziale di ciascun evento."
              },
              "to_measure_field": {
                "label": "Campo misura finale",
                "description": "Campo che contiene la misura finale di ciascun evento. Per gli eventi puntuali, usare lo stesso campo di 'from_measure_field'."
              },
              "dissolve_fields": {
                "label": "Campi di dissolvenza",
                "description": "Nome o nomi dei campi separati da virgole o punti e virgola che devono coincidere perché due tratti vengano fusi (o i cui valori vengono concatenati)."
              },
              "mode": {
                "label": "Modalità",
                "description": "'dissolve' (default) o 'concatenate'."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Intervallo di misura al di sotto del quale due tratti sono considerati adiacenti (default 0)."
              },
              "separator": {
                "label": "Separatore",
                "description": "Separatore usato per unire i valori in modalità 'concatenate' (default ', ')."
              }
            }
          },
          "edgematch_features": {
            "name": "Raccorda gli elementi ai bordi",
            "description": "Collega dataset lineari attraverso il confine di una tessera/foglio (come ArcGIS Generate Edgematch Links + Edgematch Features): abbina uno a uno le estremità pendenti entro una tolleranza e le riconcilia (punto medio o aggancio), con un layer opzionale di collegamenti di abbinamento. L'abbinamento uno a uno tra geometrie che manca a snap_endnodes cieco.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer lineare in ingresso (ad esempio due tessere adiacenti unite) su cui effettuare l'edgematch."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer lineare corretto in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Distanza massima tra gli estremi liberi perché vengano associati."
              },
              "method": {
                "label": "Metodo",
                "description": "'midpoint' (sposta entrambi gli estremi nel loro punto medio; default) o 'move_endpoint' (aggancia il secondo al primo)."
              },
              "match_fields": {
                "label": "Campi di corrispondenza",
                "description": "Campi opzionali separati da virgole; una coppia associata deve coincidere su questi campi (disambigua i candidati)."
              },
              "links": {
                "label": "Collegamenti",
                "description": "Layer lineare opzionale in uscita dei collegamenti associati (per il controllo di qualità)."
              }
            }
          },
          "eighty_twenty_analysis": {
            "name": "Analisi ottanta-venti",
            "description": "Aggancia i punti di incidente in posizioni ponderate e calcola la concentrazione di Pareto (\"X% degli incidenti avviene nell'Y% delle posizioni\"), etichettando ogni posizione con rango, percentuale cumulata di incidenti e fascia testa/coda, come ArcGIS Eighty Twenty Analysis.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso degli incidenti (Point o MultiPoint)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "cluster_tolerance": {
                "label": "Tolleranza di cluster",
                "description": "Distanza entro la quale gli incidenti vengono agganciati a un'unica posizione (unità mappa, default 0 = solo punti esattamente coincidenti)."
              },
              "weight_field": {
                "label": "Campo peso",
                "description": "Campo numerico opzionale che indica il peso di ciascun incidente (default: ogni incidente vale 1)."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Percentuale di concentrazione soglia che definisce la 'testa' di Pareto (default 80)."
              }
            }
          },
          "eliminate_polygon_part": {
            "name": "Elimina parte di poligono",
            "description": "Rimuove i buchi interni (e opzionalmente le piccole parti esterne) dei poligoni la cui area è inferiore a una soglia di area assoluta o percentuale, preservando gli attributi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale poligonale in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "condition": {
                "label": "Condizione",
                "description": "Criterio dimensionale: 'AREA' (default) confronta con 'min_area'; 'PERCENT' confronta l'area della parte/del buco come percentuale dell'area esterna totale della geometria con 'percentage'."
              },
              "min_area": {
                "label": "Area minima",
                "description": "Condizione AREA: rimuove le parti/i buchi la cui area (in unità del CRS al quadrato) è inferiore a questo valore. Obbligatorio quando condition = AREA."
              },
              "percentage": {
                "label": "Percentuale",
                "description": "Condizione PERCENT: rimuove le parti/i buchi la cui area, come percentuale (0-100) dell'area esterna totale della geometria, è inferiore a questo valore. Obbligatorio quando condition = PERCENT."
              },
              "part_option": {
                "label": "Opzione per le parti",
                "description": "Cosa è ammissibile alla rimozione: 'CONTAINED_ONLY' (default) rimuove solo gli anelli interni (i buchi); 'ANY' rimuove anche le piccole parti esterne a eccezione dell'unica parte più grande."
              }
            }
          },
          "eliminate_polygons": {
            "name": "Elimina poligoni",
            "description": "Fonde i poligoni sliver (per area massima e/o interrogazione sugli attributi) in un poligono vicino, scelto per confine condiviso più lungo o area maggiore.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale poligonale in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "max_area": {
                "label": "Area massima",
                "description": "Seleziona i poligoni la cui area (in unità del CRS al quadrato) è pari o inferiore a questo valore. Può essere combinato con 'where' (entrambi devono essere soddisfatti)."
              },
              "where": {
                "label": "Dove",
                "description": "Seleziona i poligoni che soddisfano una semplice condizione sugli attributi 'FIELD OP VALUE', dove OP è uno tra = != < <= > >= (ad esempio \"class = 0\"). Può essere combinato con 'max_area'."
              },
              "exclude": {
                "label": "Escludi",
                "description": "Protegge dall'eliminazione le geometrie che soddisfano questa condizione (stessa sintassi 'FIELD OP VALUE'); vengono mantenute e possono ricevere fusioni."
              },
              "strategy": {
                "label": "Strategia",
                "description": "Vicino in cui viene fusa una scheggia: 'longest_border' (default) o 'largest_area'."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Distanza perpendicolare massima (in unità del CRS) perché due segmenti di confine siano considerati un lato condiviso. Default 1e-6."
              }
            }
          },
          "emerging_hot_spot_analysis": {
            "name": "Analisi degli hotspot emergenti",
            "description": "Tendenze degli hotspot spazio-temporali su un cubo spazio-temporale H3: raggruppa i punti con timestamp in celle H3 x passi temporali, calcola Getis-Ord Gi* per gruppo e classifica ogni cella (hotspot o coldspot nuovo/in intensificazione/persistente/in diminuzione/...) tramite un test di tendenza di Mann-Kendall, come ArcGIS Emerging Hot Spot Analysis.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso (lon/lat geografiche, EPSG:4326). Le altre geometrie usano il punto rappresentativo dato dalla media dei vertici."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Un poligono H3 per cella. Se omesso, il risultato è memorizzato in memoria."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo che contiene l'istante di ciascun punto: un campo numerico (nelle sue unità) o una stringa di data/data-ora in formato ISO-8601."
              },
              "time_step": {
                "label": "Passo temporale",
                "description": "Ampiezza di un passo temporale: un numero semplice (time_field numerico) o una durata come '1w', '7d', '12h', '1M' per un campo di data. Default '1w'."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo numerico opzionale sommato in ciascun gruppo. Default: conteggio dei punti per gruppo."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Risoluzione H3 da 0 (la più grossolana) a 15 (la più fine); default 7 (celle di ~5 km²)."
              },
              "neighborhood": {
                "label": "Intorno",
                "description": "Raggio dell'intorno spaziale in k-ring H3 (default 1)."
              },
              "time_window": {
                "label": "Finestra temporale",
                "description": "Raggio dell'intorno temporale in passi temporali (default 1)."
              }
            }
          },
          "empirical_bayesian_kriging": {
            "name": "Kriging bayesiano empirico",
            "description": "Interpola un campo puntuale tramite molti sottoinsiemi locali sovrapposti, ciascuno con il proprio semivariogramma la cui incertezza è catturata simulando semivariogrammi perturbati da un generatore casuale con seme, quindi fonde le predizioni/varianze di kriging dei sottoinsiemi per distanza (come Empirical Bayesian Kriging di ArcGIS) — distinto dal kriging ordinario/universale/semplice/co-kriging incluso, che adatta tutti un unico semivariogramma globale accettato manualmente (o a singola finestra mobile).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale in ingresso."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numerico del layer in ingresso da interpolare."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster delle predizioni in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita nelle unità del CRS. Default: dimensionata in modo che l'asse più lungo della griglia sia di circa 150 celle."
              },
              "subset_size": {
                "label": "Dimensione del sottoinsieme",
                "description": "Numero obiettivo di punti per sottoinsieme locale (default 40, minimo 4)."
              },
              "overlap": {
                "label": "Sovrapposizione",
                "description": "Frazione della larghezza/altezza di una tessera di sottoinsieme di cui le tessere vicine si sovrappongono (default 0.25)."
              },
              "simulations": {
                "label": "Simulazioni",
                "description": "Numero di semivariogrammi simulati estratti per ciascun sottoinsieme per rappresentare l'incertezza del modello (default 5, massimo 50)."
              },
              "semivariogram": {
                "label": "Semivariogramma",
                "description": "Famiglia del modello di semivariogramma: 'power' (default), 'linear' o 'exponential'."
              },
              "transform": {
                "label": "Trasformazione",
                "description": "Trasformazione dei dati prima del kriging: 'none' (default) o 'log_empirical' (logaritmo naturale; richiede che il campo sia > 0 ovunque)."
              },
              "error_output": {
                "label": "Errore in uscita",
                "description": "Raster opzionale in uscita dell'errore standard di predizione."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme del generatore di numeri casuali deterministico per la simulazione dei semivariogrammi (default 42)."
              }
            }
          },
          "enclose_multipatch": {
            "name": "Chiudi multipatch",
            "description": "Converte superfici aperte di mesh triangolari 3D in solidi chiusi e stagni tappando i loro anelli di confine, così diventano ingressi validi per l'analisi volumetrica (ArcGIS Enclose Multipatch). is_closed_3d può diagnosticare una mesh aperta ma nulla poteva ripararla, e union_3d / intersect_3d / difference_3d / inside_3d rifiutano o riportano in modo errato le mesh aperte — che è lo stato normale di impronte estruse, gusci di terreno e superfici di edifici importate.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie di superficie 3D (MultiPolygon a maglia triangolare con Z)."
              },
              "output": {
                "label": "Uscita",
                "description": "Geometrie solide chiuse in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "drop_failed": {
                "label": "Scarta i falliti",
                "description": "Omette le geometrie che non è stato possibile rendere a tenuta stagna (default false: vengono prodotte con CAP_FAILED = true, così l'insuccesso è visibile anziché silenzioso)."
              }
            }
          },
          "enforce_river_monotonicity": {
            "name": "Imponi la monotonicità del fiume",
            "description": "Incide un DEM in modo che le elevazioni diminuiscano monotonicamente verso valle lungo le polilinee fluviali mappate — un passo di imposizione idrologica per la modellazione idraulica e delle inondazioni, come ArcGIS Enforce River Monotonicity. A differenza di fill_depressions/fill_burn (che rimuovono i pozzi chiusi), questo impone un profilo monotono lungo un vettoriale fluviale noto.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer polilineare in ingresso dei fiumi (LineString / MultiLineString) con lo stesso CRS del DEM."
              },
              "surface": {
                "label": "Superficie",
                "description": "Raster di quota (DEM) da correggere."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del DEM corretto in uscita (formato dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Dislivello minimo imposto a ogni passo di infittimento, nelle unità Z (default 0 = non crescente). Valori positivi impongono un profilo strettamente decrescente."
              },
              "sample_distance": {
                "label": "Distanza di campionamento",
                "description": "Intervallo di infittimento nelle unità del CRS lungo ciascuna linea fluviale. Default: la dimensione della cella del raster (circa un campione per cella)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 del DEM da correggere (default 1)."
              }
            }
          },
          "estimate_time_to_event": {
            "name": "Stima il tempo all'evento",
            "description": "Stima il tempo fino a un evento tramite una curva di sopravvivenza di Kaplan-Meier (come ArcGIS Estimate Time To Event): da un campo durata e un campo evento/censura, calcola la probabilità di sopravvivenza di ogni geometria e il tempo mediano all'evento del suo strato, opzionalmente stratificato per un campo categorico.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale o poligonale in ingresso con un campo di durata e un campo dell'evento/della censura."
              },
              "age_field": {
                "label": "Campo età",
                "description": "Campo che contiene la durata osservata di ciascuna geometria (tempo all'evento o tempo alla censura), un numero non negativo."
              },
              "event_field": {
                "label": "Campo evento",
                "description": "Campo che indica se l'evento si è verificato (valore vero: 1/true) o se l'osservazione è stata censurata (valore falso: 0/false)."
              },
              "stratify_field": {
                "label": "Campo di stratificazione",
                "description": "Campo categoriale opzionale per adattare una curva di sopravvivenza separata per ciascun gruppo."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer in uscita con i campi km_survival, km_median e km_stratum aggiunti. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "estimate_variogram": {
            "name": "Stima il variogramma",
            "description": "Calcola un semivariogramma empirico dalle osservazioni puntuali per caratterizzare la struttura della correlazione spaziale. Primo passo essenziale del flusso di lavoro geostatistico.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso con i valori"
              },
              "field": {
                "label": "Campo",
                "description": "Campo che contiene i valori misurati"
              },
              "lag_distance": {
                "label": "Distanza del lag",
                "description": "Ampiezza delle classi di lag in unità mappa (default: 100.0)"
              },
              "lag_tolerance": {
                "label": "Tolleranza del lag",
                "description": "Tolleranza per il raggruppamento in classi di lag (default: 50.0)"
              },
              "max_lag_count": {
                "label": "Numero massimo di lag",
                "description": "Numero massimo di lag da mantenere (default: 20)"
              }
            }
          },
          "euclidean_direction": {
            "name": "Direzione euclidea",
            "description": "Calcola l'azimut della bussola da ogni cella verso la sua cella sorgente più vicina, più raster opzionali di distanza e direzione di ritorno (ArcGIS Euclidean Direction). Completa la famiglia euclidea inclusa, che fornisce euclidean_distance (quanto lontano) ed euclidean_allocation (quale sorgente) ma non il rilevamento. Usa una trasformata di distanza esatta che porta le coordinate della sorgente più vicina; con un raster di barriere aggira invece gli ostacoli.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster delle sorgenti: sono sorgenti le celle che non sono né no-data né zero."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster delle direzioni in uscita (gradi in senso orario da nord). Se omesso, il risultato è memorizzato in memoria."
              },
              "output_distance": {
                "label": "Distanza in uscita",
                "description": "Percorso opzionale per il raster delle distanze associato."
              },
              "output_back_direction": {
                "label": "Direzione di ritorno in uscita",
                "description": "Percorso opzionale per il raster della direzione di ritorno: la direzione da seguire da questa cella per tornare verso la sorgente più vicina. Coincide con il raster delle direzioni quando non sono fornite barriere; con le barriere è il primo passo del percorso di ritorno."
              },
              "barriers": {
                "label": "Barriere",
                "description": "Raster opzionale di barriere; le celle diverse da zero e non no-data bloccano i percorsi rettilinei, obbligando ad aggirarle."
              },
              "max_distance": {
                "label": "Distanza massima",
                "description": "Le celle più distanti di questo valore da qualsiasi sorgente vengono scritte come no-data."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 del raster delle sorgenti da leggere (default 1)."
              }
            }
          },
          "evaluate_bin_sizes": {
            "name": "Valuta le ampiezze delle classi",
            "description": "Esplora dimensioni candidate delle celle di aggregazione e riporta diagnostiche che identificano quale dimensione riveli meglio la struttura, come ArcGIS Evaluate Bin Sizes.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie puntuali da aggregare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale della tabella di diagnostica in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "bin_shape": {
                "label": "Forma delle celle",
                "description": "hexagon (default; approssimazione con sfalsamento di riga, vedere la documentazione) | square."
              },
              "sizes": {
                "label": "Dimensioni",
                "description": "Dimensioni candidate dei gruppi separate da virgole (unità mappa). Se omesse, viene generata una scansione geometrica a partire dalla distanza media dal vicino più prossimo."
              },
              "steps": {
                "label": "Passi",
                "description": "Numero di candidati nella scansione generata (default 8, massimo 64)."
              },
              "analysis_field": {
                "label": "Campo di analisi",
                "description": "Campo numerico opzionale da sommare per gruppo anziché contare i punti."
              }
            }
          },
          "evaluate_variable_influence": {
            "name": "Valuta l'influenza delle variabili",
            "description": "Riporta l'importanza per permutazione e le curve di dipendenza parziale per un modello a foresta adattato da una tabella, rispondendo a quali variabili esplicative un modello usi effettivamente e quale forma abbia ogni effetto (ArcGIS Evaluate Variable Influence). Il catalogo può adattare modelli — generalized_linear_regression, exploratory_regression, geographically_weighted_regression, forest_based_forecast, le random forest di whitebox — ma nessuno riporta nessuna delle due misure. ArcGIS legge un file di modello .ssm addestrato; questo stack non ha un formato di modello portabile, quindi lo strumento adatta la propria foresta e poi la spiega. Completamente deterministico: bagging a passo fisso e una permutazione fissa, senza generatore casuale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer o tabella che contiene le osservazioni di addestramento."
              },
              "dependent_field": {
                "label": "Campo dipendente",
                "description": "Campo da prevedere."
              },
              "explanatory_fields": {
                "label": "Campi esplicativi",
                "description": "Campi numerici separati da virgole da valutare."
              },
              "output": {
                "label": "Uscita",
                "description": "Tabella in uscita dell'importanza per variabile. Se omessa, il risultato è memorizzato in memoria."
              },
              "output_partial_dependence": {
                "label": "Dipendenza parziale in uscita",
                "description": "Tabella in uscita delle curve di dipendenza parziale, una riga per variabile e punto della griglia. Prodotta sempre; memorizzata in memoria quando non è indicato alcun percorso."
              },
              "model_type": {
                "label": "Tipo di modello",
                "description": "'regression' (default) per un obiettivo continuo, oppure 'classification' per uno categoriale."
              },
              "number_of_trees": {
                "label": "Numero di alberi",
                "description": "Alberi dell'insieme (default 50)."
              },
              "max_depth": {
                "label": "Profondità massima",
                "description": "Profondità massima dell'albero (default 8)."
              },
              "min_samples_leaf": {
                "label": "Campioni minimi per foglia",
                "description": "Numero minimo di osservazioni che una foglia può contenere (default 3)."
              },
              "grid_points": {
                "label": "Punti della griglia",
                "description": "Punti per ciascuna curva di dipendenza parziale (default 12)."
              },
              "permutation_repeats": {
                "label": "Ripetizioni di permutazione",
                "description": "Permutazioni distinte mediate per variabile (default 3). Un numero maggiore è più stabile e più lento."
              }
            }
          },
          "excel_to_table": {
            "name": "Da Excel a tabella",
            "description": "Legge un foglio da una cartella di lavoro .xlsx/.xls/.xlsb/.ods in una tabella degli attributi, inferendo le colonne numeriche e di testo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso della cartella di lavoro Excel/OpenDocument in ingresso (.xlsx, .xls, .xlsb o .ods)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale della tabella in uscita (driver dedotto dalla sua estensione; si consiglia GeoParquet .parquet). Se omesso, il risultato è memorizzato in memoria."
              },
              "sheet": {
                "label": "Foglio",
                "description": "Foglio da leggere, per nome o per indice in base 0. Default: il primo foglio."
              },
              "cell_range": {
                "label": "Intervallo di celle",
                "description": "Intervallo opzionale in notazione A1 da importare, ad esempio 'B2:E40'. Default: l'intero intervallo utilizzato del foglio."
              },
              "field_names_row": {
                "label": "Riga dei nomi dei campi",
                "description": "Riga in base 1 all'interno dell'intervallo selezionato che contiene i nomi delle colonne (default 1). Le righe precedenti vengono saltate; 0 significa nessuna riga di intestazione (genera automaticamente Field1, Field2, ...)."
              }
            }
          },
          "expand_shrink": {
            "name": "Espandi / restringi",
            "description": "Espande o contrae le classi selezionate di un raster categorico di un numero di celle, lasciando intatte le altre classi — la pulizia standard per la copertura del suolo classificata prima della poligonizzazione, come ArcGIS Expand / Shrink.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster categoriale (a valori interi) in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "classes": {
                "label": "Classi",
                "description": "Valore o valori di classe separati da virgole da espandere o contrarre."
              },
              "cells": {
                "label": "Celle",
                "description": "Numero di celle di cui espandere o contrarre (>= 1)."
              },
              "mode": {
                "label": "Modalità",
                "description": "'expand' (accresce le classi selezionate; default) o 'shrink' (le erode)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da leggere, in base 1 (default 1)."
              }
            }
          },
          "exploratory_interpolation": {
            "name": "Interpolazione esplorativa",
            "description": "Esegue diversi metodi di interpolazione (IDW, vicino più prossimo, superfici di tendenza di primo/secondo ordine), li valida in modo incrociato leave-one-out e li classifica per accuratezza di predizione (RMSE/MAE) o bias (ME) — come ArcGIS Exploratory Interpolation. Riporta una tabella di confronto ordinata per metodo e può emettere il raster di predizione del metodo migliore. Include una richiesta autonoma di validazione incrociata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso delle misure."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numerico dei punti che contiene il valore da interpolare."
              },
              "output": {
                "label": "Uscita",
                "description": "Tabella di confronto ordinata in uscita — un CSV (estensione .csv) o una tabella vettoriale senza geometria. Se omessa, il risultato è memorizzato in memoria."
              },
              "methods": {
                "label": "Metodi",
                "description": "Sottoinsieme dei metodi da confrontare separati da virgole o barre verticali: 'idw', 'nearest', 'trend1', 'trend2'. Default: tutti e quattro."
              },
              "criterion": {
                "label": "Criterio",
                "description": "Criterio di ordinamento: 'rmse' (default, errore più basso), 'mae' (errore assoluto più basso) o 'me' (distorsione minima, |errore medio| più piccolo)."
              },
              "power": {
                "label": "Potenza",
                "description": "Esponente di decadimento con la distanza dell'IDW (default 2)."
              },
              "output_raster": {
                "label": "Raster in uscita",
                "description": "GeoTIFF opzionale in uscita: il metodo classificatosi primo adattato su tutti i campioni e valutato su una griglia che copre l'estensione dei campioni."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella del raster vincitore nelle unità del CRS (gradi per un CRS geografico). Default: dimensionata in modo che l'asse più lungo copra circa 256 celle."
              }
            }
          },
          "exploratory_regression": {
            "name": "Regressione esplorativa",
            "description": "Enumera modelli OLS su ogni combinazione di campi esplicativi candidati e seleziona ciascuno in base a R² corretto, significatività dei coefficienti, multicollinearità VIF, normalità dei residui di Jarque-Bera e autocorrelazione spaziale dei residui con l'I di Moran, riportando ogni modello più l'insieme ordinato di quelli superati e un riepilogo di significatività per variabile — come ArcGIS Exploratory Regression.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer di geometrie in ingresso con geometria (usata per l'intorno dell'I di Moran sui residui)."
              },
              "dependent_field": {
                "label": "Campo dipendente",
                "description": "Campo numerico dipendente (risposta)."
              },
              "explanatory_fields": {
                "label": "Campi esplicativi",
                "description": "Campi numerici esplicativi candidati separati da virgole tra cui effettuare la ricerca."
              },
              "min_vars": {
                "label": "Variabili minime",
                "description": "Numero minimo di variabili esplicative per modello candidato (default 1)."
              },
              "max_vars": {
                "label": "Variabili massime",
                "description": "Numero massimo di variabili esplicative per modello candidato (default: min(numero di candidati, 6))."
              },
              "max_coef_p": {
                "label": "P massimo dei coefficienti",
                "description": "p-value massimo consentito per ogni coefficiente esplicativo (default 0.05)."
              },
              "min_adj_r2": {
                "label": "R² corretto minimo",
                "description": "R quadro corretto minimo (default 0.5)."
              },
              "max_vif": {
                "label": "VIF massimo",
                "description": "Fattore di inflazione della varianza massimo consentito per ciascun termine (default 7.5)."
              },
              "min_jb_p": {
                "label": "P minimo di Jarque-Bera",
                "description": "p-value minimo di Jarque-Bera per la normalità dei residui (default 0.1)."
              },
              "min_moran_p": {
                "label": "P minimo di Moran",
                "description": "p-value minimo per l'autocorrelazione spaziale dei residui (I di Moran); al di sopra di questo valore i residui non sono raggruppati in modo significativo (default 0.1)."
              },
              "neighbors": {
                "label": "Vicini",
                "description": "Numero di vicini più prossimi che definiscono i pesi spaziali per il test dell'I di Moran sui residui (default 8)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso della tabella del rapporto in uscita — un CSV (estensione .csv) o una tabella vettoriale senza geometria."
              }
            }
          },
          "extract_locations_from_text": {
            "name": "Estrai località dal testo",
            "description": "Scansiona testo libero alla ricerca di coordinate incorporate — gradi decimali (DD), gradi-minuti decimali (DDM), gradi-minuti-secondi (DMS) e riferimenti di reticolo MGRS/USNG — ed emette un punto WGS84 per ogni corrispondenza, come ArcGIS Extract Locations From Text (ramo delle coordinate). Pura scansione di pattern; nessun servizio di geocodifica.",
            "params": {
              "input_text": {
                "label": "Testo in ingresso",
                "description": "Il testo libero da analizzare. Il testo letterale oppure il percorso di un file di testo UTF-8 (letto quando il valore corrisponde a un file esistente)."
              },
              "notations": {
                "label": "Notazioni",
                "description": "Sottoinsieme delle notazioni da cercare, separate da virgole o spazi: DD, DDM, DMS, MGRS (USNG è un alias di MGRS). Default: tutte e quattro."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "extract_ocean_winds": {
            "name": "Estrai i venti oceanici",
            "description": "Ricava la velocità del vento oceanico neutro-equivalente a 10 m dalla retrodiffusione SAR calibrata invertendo la funzione di modello geofisico CMOD5.N (ArcGIS Extract Ocean Winds). L'intera catena SAR inclusa resta nel dominio radiometrico e nulla convertiva la retrodiffusione in una quantità geofisica, che è anche ciò che separa una chiazza a basso vento da una chiazza di petrolio.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster del backscatter calibrato (sigma0)."
              },
              "units": {
                "label": "Unità",
                "description": "Unità di 'input': 'dn', 'amplitude', 'intensity' o 'db' (default 'db')."
              },
              "incidence_angle": {
                "label": "Angolo di incidenza",
                "description": "Angolo di incidenza per cella in gradi: il percorso di un raster o un numero costante."
              },
              "wind_direction": {
                "label": "Direzione del vento",
                "description": "Direzione meteorologica del vento in gradi (la direzione DA cui soffia il vento), come percorso di un raster o come costante. È un'informazione a priori necessaria: CMOD ha due incognite e una sola osservazione."
              },
              "look_direction": {
                "label": "Direzione di osservazione",
                "description": "Azimut di vista del radar in gradi, come percorso di un raster o come costante. Usato per convertire la direzione del vento nell'angolo relativo richiesto da CMOD."
              },
              "polarization": {
                "label": "Polarizzazione",
                "description": "'vv' (default, CMOD5.N nativo) o 'hh' (applica un rapporto di polarizzazione approssimato)."
              },
              "polarization_ratio_alpha": {
                "label": "Alpha del rapporto di polarizzazione",
                "description": "Alfa nel rapporto di polarizzazione da HH a VV (default 0.6). Usato solo quando la polarizzazione è 'hh'."
              },
              "water_mask": {
                "label": "Maschera dell'acqua",
                "description": "Layer poligonale o raster opzionale che limita l'uscita all'acqua; qui i ritorni dalla terraferma sono privi di significato."
              },
              "max_wind": {
                "label": "Vento massimo",
                "description": "Estremo superiore dell'intervallo di inversione, in m/s (default 50)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster della velocità del vento in uscita in m/s. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "extract_scanned_features": {
            "name": "Estrai gli elementi scansionati",
            "description": "Vettorializza un raster binario (scansionato/con soglia) in linee pulite (tracciamento dello scheletro) o poligoni, con rimozione del rumore, riempimento dei buchi, chiusura dei vuoti e semplificazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster binario/classificato in ingresso da vettorizzare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "feature_type": {
                "label": "Tipo di geometria",
                "description": "'lines' (default): scheletrizza e traccia le linee centrali. 'polygons': vettorizza le regioni riempite."
              },
              "foreground_value": {
                "label": "Valore di primo piano",
                "description": "Valore della cella che indica il primo piano. Se omesso, sono di primo piano le celle >= 'threshold' (o, in sua assenza, qualsiasi cella valida diversa da zero)."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Il primo piano è costituito dalle celle con valore >= questo (usato quando 'foreground_value' non è indicato)."
              },
              "noise_size": {
                "label": "Dimensione del rumore",
                "description": "Rimuove le componenti di primo piano più piccole di questo numero di celle (default 4)."
              },
              "hole_size": {
                "label": "Dimensione dei buchi",
                "description": "Riempie i buchi di sfondo più piccoli di questo numero di celle (default 4)."
              },
              "gap_distance": {
                "label": "Distanza dei vuoti",
                "description": "Per lines: colma le interruzioni fino a questa distanza (unità del CRS) tra estremi di linee quasi collineari. Default 0 (disattivato)."
              },
              "simplify_tolerance": {
                "label": "Tolleranza di semplificazione",
                "description": "Tolleranza di Douglas-Peucker (unità del CRS) per la geometria in uscita. Default: circa 1 cella."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da leggere, in base 1 (default 1)."
              }
            }
          },
          "extract_sinks": {
            "name": "Estrai le depressioni",
            "description": "Estrae i pozzi (estensione massima delle depressioni) da un DEM (lidar filling.py).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster DEM in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster dei pozzi. Se omesso, il risultato è memorizzato in memoria."
              },
              "min_size": {
                "label": "Dimensione minima",
                "description": "Numero minimo di pixel per un pozzo (mantenuto se strettamente maggiore; default 10)."
              },
              "region_output": {
                "label": "Regione in uscita",
                "description": "Percorso di uscita opzionale per il raster delle regioni etichettate."
              },
              "depth_output": {
                "label": "Profondità in uscita",
                "description": "Percorso di uscita opzionale per il raster della profondità di riempimento."
              },
              "filled_output": {
                "label": "Riempito in uscita",
                "description": "Percorso di uscita opzionale per il DEM con le depressioni riempite."
              },
              "csv_output": {
                "label": "CSV in uscita",
                "description": "Percorso di uscita opzionale per il CSV degli attributi per regione."
              },
              "vector_output": {
                "label": "Vettoriale in uscita",
                "description": "Percorso di uscita opzionale per i poligoni delle regioni in formato GeoJSON (con gli attributi uniti)."
              },
              "flat_increment": {
                "label": "Incremento delle aree piatte",
                "description": "Incremento costante aggiunto durante il riempimento per garantire il drenaggio (default 0)."
              }
            }
          },
          "extract_spectra_from_image": {
            "name": "Estrai gli spettri dall'immagine",
            "description": "Deriva una libreria spettrale da un'immagine multibanda e da regioni di addestramento, uno spettro per classe, nel formato CSV letto da spectral_library_matching (ArcGIS Extract Spectra From Image). spectral_library_matching, spectral_angle_mapper e matched_filter_target_detection consumano tutti una libreria e nulla ne creava una, quindi la suite spettrale poteva essere usata solo con librerie pubblicate preesistenti.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Immagine multibanda."
              },
              "training_features": {
                "label": "Geometrie di addestramento",
                "description": "Layer poligonale o puntuale che delimita ciascuna classe o obiettivo."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Attributo che contiene l'etichetta di classe. Le geometrie che condividono un'etichetta sono raccolte in un unico spettro."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV della libreria spettrale in uscita ('name,b1,b2,...' per ciascuna classe), pronto per il parametro 'library_csv' di spectral_library_matching."
              },
              "statistic": {
                "label": "Statistica",
                "description": "Riduzione sulle celle coperte: 'mean' (default), 'median', 'max', 'min'."
              },
              "trim_percent": {
                "label": "Percentuale di taglio",
                "description": "Percentuale scartata da ciascuna coda per banda prima della riduzione, per sopprimere i pixel misti di bordo (default 0, massimo 49)."
              },
              "min_cells": {
                "label": "Celle minime",
                "description": "Le classi che coprono meno celle di questo valore vengono segnalate e saltate anziché produrre uno 'spettro' di un solo pixel (default 1)."
              },
              "wavelengths": {
                "label": "Lunghezze d'onda",
                "description": "Lunghezze d'onda opzionali per banda separate da virgole, registrate come intestazione di commento nella libreria e in output_stats."
              },
              "output_stats": {
                "label": "Statistiche in uscita",
                "description": "CSV opzionale che riceve la deviazione standard e il conteggio delle celle per classe e per banda. Mantenuto separato affinché la libreria resti interpretabile."
              }
            }
          },
          "extract_water_sar": {
            "name": "Estrai l'acqua (SAR)",
            "description": "Delinea l'acqua libera e l'estensione delle inondazioni dalla retrodiffusione SAR con una soglia di Otsu per scena sui decibel, più filtri opzionali di pendenza del DEM e altezza sopra il minimo che scartano l'ombra radar e le superfici scure asciutte (ArcGIS Extract Water). Nessuno dei due registri può farlo dal radar: NDWI/MNDWI di spectral_index necessitano di bande di riflettanza verde/NIR/SWIR che un SAR non ha, depth_to_water modella dove l'acqua dovrebbe essere a partire dal terreno anziché osservarla, e una soglia impostata a mano in raster_calculator non si trasferisce tra scene perché la separazione acqua/terra si sposta con vento e angolo di incidenza.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster del backscatter SAR."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer poligonale dell'acqua in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_raster": {
                "label": "Raster in uscita",
                "description": "Maschera binaria dell'acqua in uscita (1 acqua, 0 terraferma). Prodotta sempre; memorizzata in memoria quando non è indicato alcun percorso."
              },
              "dem": {
                "label": "DEM",
                "description": "DEM opzionale, co-registrato con l'ingresso, che abilita i filtri di pendenza e altezza."
              },
              "threshold_db": {
                "label": "Soglia (dB)",
                "description": "Soglia fissa in dB; le celle pari o inferiori a essa sono acqua. Prevale sulla soglia automatica di Otsu."
              },
              "min_area": {
                "label": "Area minima",
                "description": "Scarta i corpi idrici più piccoli di questa area in unità mappa al quadrato."
              },
              "max_slope": {
                "label": "Pendenza massima",
                "description": "Con un DEM, rifiuta l'acqua su terreni più ripidi di questo numero di gradi (default 5). L'acqua stagnante non può occupare un versante ripido, ma l'ombra radar in quel punto è altrettanto scura."
              },
              "max_height_above_min": {
                "label": "Altezza massima sopra il minimo",
                "description": "Con un DEM, rifiuta le celle candidate che si trovano più di questo numero di unità z sopra la cella più bassa del DEM all'interno della loro stessa regione connessa."
              },
              "mask_features": {
                "label": "Geometrie di maschera",
                "description": "Layer poligonale che limita l'area di analisi."
              },
              "mask_type": {
                "label": "Tipo di maschera",
                "description": "'land_polygon' (default; analizza al di fuori dei poligoni) o 'water_polygon' (analizza al loro interno)."
              },
              "histogram_bins": {
                "label": "Classi dell'istogramma",
                "description": "Classi usate per l'istogramma di Otsu (default 256)."
              },
              "input_units": {
                "label": "Unità di ingresso",
                "description": "'intensity' (default), 'dn', 'amplitude' o 'db'."
              },
              "band": {
                "label": "Banda",
                "description": "Banda su cui applicare la soglia, in base 1 (default 1)."
              }
            }
          },
          "extrude_between": {
            "name": "Estrudi tra",
            "description": "Costruisce solidi chiusi e stagni che coprono lo spazio tra due superfici all'interno di ogni poligono in ingresso, con volumi esatti per geometria (ArcGIS Extrude Between). cut_fill fornisce la variazione di volume per cella tra due raster ma emette un raster, non può essere limitato alle impronte e non porta attributi; buffer_3d e minimum_bounding_volume costruiscono solidi da geometrie anziché da una coppia di superfici. L'uscita alimenta direttamente union_3d, intersect_3d, difference_3d e inside_3d.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Impronte poligonali che definiscono l'estensione laterale di ciascun solido. Viene usato solo il PRIMO anello della prima parte: i buchi interni e le parti aggiuntive di un MultiPolygon vengono ignorati, quindi separare preventivamente le impronte multiparte e riempire i buchi prima dell'estrusione."
              },
              "surface_upper": {
                "label": "Superficie superiore",
                "description": "Raster della superficie di delimitazione superiore."
              },
              "surface_lower": {
                "label": "Superficie inferiore",
                "description": "Raster della superficie di delimitazione inferiore, co-registrato con quella superiore."
              },
              "output": {
                "label": "Uscita",
                "description": "Geometrie solide chiuse (MultiPolygon a maglia triangolare con Z). Se omesso, il risultato è memorizzato in memoria."
              },
              "sample_distance": {
                "label": "Distanza di campionamento",
                "description": "Spaziatura di campionamento delle impronte e di infittimento dei contorni nelle unità del CRS. Default: la dimensione di cella più fine tra le superfici."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 da leggere da ciascun raster di superficie (default 1)."
              }
            }
          },
          "feature_outline_masks": {
            "name": "Maschere di contorno degli elementi",
            "description": "Genera poligoni di maschera cartografica a un margine attorno alle geometrie (contorno esatto, involucro convesso o riquadro di delimitazione), opzionalmente ritagliati a un secondo layer (Intersecting Layers Masks).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (qualsiasi geometria), formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "margin": {
                "label": "Margine",
                "description": "Distanza del margine della maschera. Metri per un CRS geografico (EPSG:4326 o sconosciuto, convertiti in gradi), altrimenti nelle unità del CRS del layer. Deve essere positiva."
              },
              "mask_kind": {
                "label": "Tipo di maschera",
                "description": "Forma della maschera: 'exact' (default, contorno della geometria bufferizzato), 'convex_hull' (inviluppo convesso dilatato) o 'box' (rettangolo di ingombro + margine)."
              },
              "masked_layer": {
                "label": "Layer mascherato",
                "description": "Secondo layer poligonale opzionale. Se indicato, le maschere vengono ritagliate sulla loro intersezione con esso (Intersecting Layers Masks); le maschere non sovrapposte vengono scartate."
              },
              "id_field": {
                "label": "Campo ID",
                "description": "Campo di origine opzionale il cui valore viene copiato su ciascuna maschera come 'source_id'. Per impostazione predefinita l'indice della geometria di origine."
              }
            }
          },
          "feature_to_line": {
            "name": "Da elemento a linea",
            "description": "Planarizza geometrie lineari/di confine poligonale in segmenti lineari nodati e non sovrapposti, divisi a ogni intersezione reciproca e auto-intersezione, come ArcGIS Feature To Line — il precursore della costruzione topologica che polygons_to_lines e split_vector_lines inclusi non forniscono.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale lineare o poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "cluster_tolerance": {
                "label": "Tolleranza di cluster",
                "description": "Aggancia i punti di suddivisione a questa griglia in unità mappa per unire i nodi quasi coincidenti (default 1e-9)."
              },
              "attributes": {
                "label": "Attributi",
                "description": "Se true (default), contrassegna ogni segmento in uscita con 'src_fid', l'ID della geometria di origine."
              }
            }
          },
          "feature_vertices_to_points": {
            "name": "Da vertici degli elementi a punti",
            "description": "Crea un layer puntuale dai vertici selezionati delle geometrie — ALL, START, END, BOTH_ENDS, MID (punto medio lungo l'arco) o DANGLE (estremità lineari non condivise) — con un campo FID del padre, come ArcGIS Feature Vertices To Points.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso di tipo linea, poligono o punto."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "point_location": {
                "label": "Posizione del punto",
                "description": "Quali vertici estrarre: ALL | START | END | BOTH_ENDS | MID | DANGLE. Default ALL."
              }
            }
          },
          "features_to_gpx": {
            "name": "Da elementi a GPX",
            "description": "Scrive le geometrie puntuali come waypoint GPX e le geometrie lineari come tracce GPX, mappando i campi attributo su nome/descrizione/elevazione/tempo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale o lineare da esportare (si assume WGS84 / EPSG:4326)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del file .gpx in uscita."
              },
              "name_field": {
                "label": "Campo nome",
                "description": "Campo attributo mappato sull'elemento GPX <name> (opzionale)."
              },
              "description_field": {
                "label": "Campo descrizione",
                "description": "Campo attributo mappato sull'elemento GPX <desc> (opzionale)."
              },
              "z_field": {
                "label": "Campo Z",
                "description": "Campo attributo mappato sulla quota GPX <ele> (opzionale; in sua assenza si usa una Z della geometria, se presente)."
              },
              "date_field": {
                "label": "Campo data",
                "description": "Campo attributo mappato sulla marca temporale GPX <time>, una stringa ISO-8601 (opzionale)."
              }
            }
          },
          "features_to_gtfs": {
            "name": "Da elementi a GTFS",
            "description": "Esporta le geometrie puntuali in stops.txt GTFS e le geometrie lineari in shapes.txt GTFS, chiudendo il ciclo di andata e ritorno GTFS.",
            "params": {
              "stops_input": {
                "label": "Fermate in ingresso",
                "description": "Layer vettoriale puntuale da scrivere come stops.txt (usa i campi attributo stop_id/stop_name quando presenti)."
              },
              "shapes_input": {
                "label": "Tracciati in ingresso",
                "description": "Layer vettoriale lineare da scrivere come shapes.txt (usa un campo attributo shape_id quando presente)."
              },
              "output_dir": {
                "label": "Cartella di uscita",
                "description": "Directory in cui vengono scritti i file di testo GTFS (stops.txt / shapes.txt). Viene creata se assente."
              }
            }
          },
          "features_to_kml": {
            "name": "Da elementi a KML",
            "description": "Scrive un layer vettoriale in un documento KML 2.2 (o un KMZ compresso), con gli attributi come ExtendedData e uno stile condiviso opzionale (ArcGIS Layer To KML / Map To KML). kml_to_features poteva già leggere KML ma nulla lo scriveva, a differenza delle coppie simmetriche GPX, GTFS e GeoParquet.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso. Deve essere in lon/lat EPSG:4326, l'unico CRS definito da KML."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del file .kml o .kmz in uscita."
              },
              "name_field": {
                "label": "Campo nome",
                "description": "Attributo usato per il <name> di ciascun Placemark."
              },
              "description_field": {
                "label": "Campo descrizione",
                "description": "Attributo usato per <description>. Se omesso, tutti gli attributi vengono scritti come <ExtendedData>."
              },
              "z_field": {
                "label": "Campo Z",
                "description": "Attributo che fornisce una quota, scritta come terza coordinata."
              },
              "altitude_mode": {
                "label": "Modalità altitudine",
                "description": "'clampToGround' (default), 'relativeToGround' o 'absolute'."
              },
              "color": {
                "label": "Colore",
                "description": "Colore delle linee/dei contorni in esadecimale KML aabbggrr (ad esempio 'ff0000ff' per il rosso opaco)."
              },
              "line_width": {
                "label": "Larghezza della linea",
                "description": "Larghezza della linea in pixel (default 1.0)."
              },
              "fill_color": {
                "label": "Colore di riempimento",
                "description": "Colore di riempimento dei poligoni in esadecimale KML aabbggrr. Omettere per non applicare alcun riempimento."
              }
            }
          },
          "fence_diagram": {
            "name": "Diagramma a steccato",
            "description": "Genera pannelli di sezione verticale 3D dove una linea di traccia attraversa una pila di superfici — il modo standard per visualizzare la stratigrafia del sottosuolo o la stratificazione atmosferica (ArcGIS Fence Diagram). profile, long_profile e stack_profile campionano superfici lungo una linea ma restituiscono linee di profilo 2D o tabelle, senza geometria per lo spazio TRA superfici consecutive, e voxel_isosurface estrae una superficie di livello da un volume anziché una sezione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie lineari che definiscono la traccia della sezione."
              },
              "surfaces": {
                "label": "Superfici",
                "description": "Elenco separato da virgole di raster di superficie co-registrati, ordinati dall'ALTO verso il BASSO."
              },
              "output": {
                "label": "Uscita",
                "description": "Pannelli di sezione 3D, uno per ciascuna traccia e per ciascuna coppia di superfici. Se omesso, il risultato è memorizzato in memoria."
              },
              "sample_distance": {
                "label": "Distanza di campionamento",
                "description": "Spaziatura di campionamento lungo la traccia nelle unità del CRS. Default: la dimensione di cella più fine tra le superfici."
              },
              "floor_height": {
                "label": "Altezza del pavimento",
                "description": "Limite inferiore costante opzionale: una superficie di base sintetica a questa quota, che chiude il pannello più profondo."
              },
              "ceiling_height": {
                "label": "Altezza del soffitto",
                "description": "Limite superiore costante opzionale: una superficie sommitale sintetica a questa quota."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 da leggere da ciascun raster di superficie (default 1)."
              }
            }
          },
          "fill_missing_values": {
            "name": "Riempi i valori mancanti",
            "description": "Stima e riempie i valori nulli in un campo attributo numerico usando i vicini spaziali (k più vicini o una banda di distanza), opzionalmente limitati a una finestra temporale, con uno stimatore selezionabile (mean/median/min/max/temporal_trend). Le righe imputate sono contrassegnate con un campo flag (ArcGIS Fill Missing Values).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso con il campo da riempire."
              },
              "fill_field": {
                "label": "Campo di riempimento",
                "description": "Campo numerico i cui valori nulli devono essere stimati e riempiti."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "estimator": {
                "label": "Stimatore",
                "description": "Modalità di combinazione dei valori dei vicini: 'mean' (default), 'median', 'min', 'max' o 'temporal_trend' (minimi quadrati nel tempo; richiede time_field)."
              },
              "neighbourhood": {
                "label": "Intorno",
                "description": "Selezione spaziale: 'knn' (default, i k più prossimi) o 'distance_band' (tutti quelli entro search_radius)."
              },
              "k": {
                "label": "K",
                "description": "Numero di vicini più prossimi per 'knn' (default 8)."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio (unità del CRS) per la selezione 'distance_band'."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo numerico opzionale che indica il tempo/l'ordine di ciascuna geometria (obbligatorio per 'temporal_trend')."
              },
              "time_window": {
                "label": "Finestra temporale",
                "description": "Opzionale: limita i vicini a quelli entro questa distanza temporale dall'elemento di destinazione (richiede time_field)."
              },
              "flag_field": {
                "label": "Campo flag",
                "description": "Nome del campo booleano che contrassegna le righe imputate (default 'imputed')."
              }
            }
          },
          "fill_spill_merge": {
            "name": "Fill-Spill-Merge",
            "description": "Instrada un volume finito di acqua superficiale su un DEM per produrre estensioni realistiche di laghi/inondazioni (riempimento parziale delle depressioni con tracimazione e fusione), reimplementando Fill-Spill-Merge di RichDEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso (quote)."
              },
              "water_level": {
                "label": "Livello dell'acqua",
                "description": "Profondità uniforme dell'acqua superficiale applicata a ogni cella. Fornire questo oppure 'surface_water'."
              },
              "surface_water": {
                "label": "Acque superficiali",
                "description": "Raster della profondità dell'acqua superficiale per cella (allineato al DEM). Prevale su 'water_level' quando sono indicati entrambi."
              },
              "ocean_level": {
                "label": "Livello dell'oceano",
                "description": "Livello del mare opzionale: le celle a quota pari o inferiore a questo valore che si connettono al bordo della griglia diventano oceano (linea di base dell'inondazione costiera)."
              },
              "edge_outlet": {
                "label": "Sbocco sul bordo",
                "description": "Tratta ogni cella di bordo della griglia come uno sbocco libero (default true). L'acqua che raggiunge il bordo esce dal DEM."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster della profondità dell'acqua stagnante. Se omesso, il risultato è memorizzato in memoria."
              },
              "water_surface": {
                "label": "Superficie dell'acqua",
                "description": "Percorso di uscita opzionale per la superficie idraulica (DEM + profondità dell'acqua)."
              },
              "flood_extent": {
                "label": "Estensione dell'inondazione",
                "description": "Percorso di uscita opzionale per una maschera dell'estensione dell'inondazione (1 dove è presente acqua stagnante, altrimenti 0)."
              }
            }
          },
          "find_argument_statistics": {
            "name": "Trova statistiche di argomento",
            "description": "Statistiche sugli argomenti per pixel su una pila raster (come ArcGIS Find Argument Statistics): l'indice (o la data) della fetta del massimo/minimo, la posizione mediana, il conteggio delle fette oltre una soglia (durata) o la sequenza consecutiva più lunga — le risposte sulla posizione degli argomenti che gli aggregati di valori di cell_statistics e image_stack_profile inclusi non possono dare.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Un unico raster multibanda (ogni banda è una fetta) oppure un elenco separato da virgole di raster co-registrati, in ordine temporale."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster a banda singola in uscita degli indici delle fette / delle date / dei conteggi. Se omesso, il risultato è memorizzato in memoria."
              },
              "statistic": {
                "label": "Statistica",
                "description": "'argmax' (default), 'argmin', 'median_position', 'duration' o 'longest_run'."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Soglia numerica per 'duration'/'longest_run' (obbligatoria per tali metodi)."
              },
              "comparison": {
                "label": "Confronto",
                "description": "Confronto per 'duration'/'longest_run': '>' (default), '>=', '<' o '<='."
              },
              "dates": {
                "label": "Date",
                "description": "Date numeriche opzionali separate da virgole (ad esempio il giorno dell'anno) per ciascuna fetta; argmax/argmin/median restituiscono la data corrispondente anziché l'indice della fetta."
              },
              "min_valid": {
                "label": "Minimo validi",
                "description": "Numero minimo di osservazioni non no-data per pixel (default 1)."
              }
            }
          },
          "find_dwell_locations": {
            "name": "Trova i luoghi di sosta",
            "description": "Rileva dove un'entità in movimento è rimasta ferma: sequenze di posizioni di traccia entro una tolleranza di distanza per almeno una tolleranza temporale, emesse come posizioni, centri medi o involucri convessi, come ArcGIS Find Dwell Locations.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie puntuali con marca temporale (rilevamenti di traccia)."
              },
              "track_field": {
                "label": "Campo traccia",
                "description": "Campo che identifica la traccia a cui appartiene ciascun rilevamento."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo della marca temporale (secondi numerici o testo ISO-8601)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              },
              "distance_tolerance": {
                "label": "Tolleranza di distanza",
                "description": "Distanza massima (unità mappa) a cui un rilevamento può trovarsi dal centroide progressivo della sosta."
              },
              "time_tolerance": {
                "label": "Tolleranza temporale",
                "description": "Durata minima (nelle stesse unità di time_field) di una sequenza stazionaria perché sia considerata una sosta."
              },
              "output_type": {
                "label": "Tipo di uscita",
                "description": "dwell_features (default) | mean_centers | convex_hulls | all_features."
              }
            }
          },
          "find_identical": {
            "name": "Trova gli identici",
            "description": "Trova le geometrie identiche per geometria e/o campi scelti, raggruppando i duplicati; 'report' aggiunge le colonne dup_group/dup_seq, 'delete' mantiene solo la prima di ogni gruppo, come ArcGIS Find Identical / Delete Identical.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso da deduplicare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "fields": {
                "label": "Campi",
                "description": "Campi da confrontare separati da virgole. Omettere per confrontare solo la geometria; combinare con 'compare_geometry'."
              },
              "compare_geometry": {
                "label": "Confronta la geometria",
                "description": "Indica se la geometria fa parte del test di identità (default true; impostare false per confrontare solo i campi)."
              },
              "xy_tolerance": {
                "label": "Tolleranza XY",
                "description": "Tolleranza di aggancio per il confronto delle geometrie (i vertici vengono arrotondati a questa griglia prima dell'hashing). Default 0 (esatto)."
              },
              "mode": {
                "label": "Modalità",
                "description": "'report' (default; aggiunge dup_group/dup_seq) o 'delete' (mantiene il primo di ciascun gruppo)."
              }
            }
          },
          "find_meeting_locations": {
            "name": "Trova i luoghi d'incontro",
            "description": "Rileva raduni in cui più tracce distinte sono insieme entro una distanza per almeno una durata minima (come ArcGIS Find Meeting Locations) — la co-occorrenza di N tracce che trace_proximity_events (a coppie) e reconstruct_tracks (sosta a traccia singola) non coprono. Produce involucri di area e punti rappresentativi con numero di partecipanti, tempo di inizio/fine e durata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale di traccia con marca temporale (CRS proiettato; distanze in unità mappa)."
              },
              "track_field": {
                "label": "Campo traccia",
                "description": "Campo che identifica ciascuna traccia/entità."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo che contiene l'istante di ciascun punto: secondi numerici o una marca temporale ISO-8601."
              },
              "search_distance": {
                "label": "Distanza di ricerca",
                "description": "Distanza massima (unità mappa) perché le tracce siano considerate insieme."
              },
              "min_meeting_duration": {
                "label": "Durata minima dell'incontro",
                "description": "Durata minima (unità di tempo) per cui un raduno deve persistere per essere segnalato."
              },
              "max_meeting_duration": {
                "label": "Durata massima dell'incontro",
                "description": "Durata massima opzionale; i raduni più lunghi vengono scartati."
              },
              "min_participants": {
                "label": "Partecipanti minimi",
                "description": "Numero minimo di tracce distinte in un raduno (default 2)."
              },
              "time_step": {
                "label": "Passo temporale",
                "description": "Ampiezza di una fetta temporale (unità di tempo). Default: min_meeting_duration."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer in uscita dei punti rappresentativi (un punto per incontro). Se omesso, il risultato è memorizzato in memoria."
              },
              "output_area": {
                "label": "Area in uscita",
                "description": "Layer opzionale in uscita delle aree (un poligono di inviluppo convesso per incontro). Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "find_space_time_matches": {
            "name": "Trova corrispondenze spazio-temporali",
            "description": "Abbina le geometrie tra due layer puntuali con timestamp che ricadono entro una distanza di ricerca spaziale E una finestra temporale l'una dall'altra (prima/dopo/entrambe), emettendo le coppie abbinate con distanza e scostamento temporale, come ArcGIS Find Space Time Matches.",
            "params": {
              "primary": {
                "label": "Primario",
                "description": "Layer puntuale primario (ogni geometria viene confrontata con il layer secondario)."
              },
              "secondary": {
                "label": "Secondario",
                "description": "Layer puntuale secondario con cui effettuare il confronto."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo della marca temporale presente in ENTRAMBI i layer (numerico o ISO-8601)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer delle corrispondenze in uscita (una linea di collegamento per ciascuna coppia associata). Se omesso, il risultato è memorizzato in memoria."
              },
              "search_distance": {
                "label": "Distanza di ricerca",
                "description": "Distanza spaziale massima tra una geometria primaria e una secondaria (unità mappa)."
              },
              "time_window": {
                "label": "Finestra temporale",
                "description": "Separazione temporale massima: un numero di secondi o una durata come '2h', '30m', '7d'."
              },
              "temporal_relationship": {
                "label": "Relazione temporale",
                "description": "'either' (default), 'before' (secondaria precedente alla primaria) o 'after' (secondaria successiva alla primaria)."
              },
              "primary_id_field": {
                "label": "Campo ID primario",
                "description": "Campo che denomina ciascuna geometria primaria nell'uscita (default: indice della geometria)."
              },
              "secondary_id_field": {
                "label": "Campo ID secondario",
                "description": "Campo che denomina ciascuna geometria secondaria nell'uscita (default: indice della geometria)."
              }
            }
          },
          "fit_variogram": {
            "name": "Adatta il modello di variogramma",
            "description": "Adatta un modello teorico di variogramma (sferico, esponenziale, gaussiano) ai dati del semivariogramma empirico per l'uso nel kriging.",
            "params": {
              "lags_json": {
                "label": "JSON dei lag",
                "description": "Array JSON delle classi di lag prodotto da estimate_variogram"
              },
              "model_family": {
                "label": "Famiglia del modello",
                "description": "Modello: spherical, exponential o gaussian"
              }
            }
          },
          "flatten_interferogram": {
            "name": "Appiattisci l'interferogramma",
            "description": "Rimuove la componente di fase topografica da un interferogramma avvolto usando un DEM e la baseline interferometrica, lasciando il segnale di deformazione e atmosfera (la modalità di appiattimento TOPO di ArcGIS Generate Interferogram). sar_coherence emette già l'interferogramma stesso tramite output_phase, ma nulla in nessuno dei due registri può simulare e sottrarre la fase topografica — e su qualsiasi rilievo quella componente domina, quindi un interferogramma non appiattito è inutilizzabile per il lavoro sulla deformazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster della fase interferometrica avvolta in radianti (come quello prodotto da output_phase di sar_coherence), oppure un interferogramma I/Q a due bande."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster di quota co-registrato."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster della fase avvolta spianata, riavvolta in (-pi, pi]. Se omesso, il risultato è memorizzato in memoria."
              },
              "perpendicular_baseline": {
                "label": "Baseline perpendicolare",
                "description": "Baseline perpendicolare B_perp in metri. Obbligatoria: determina la sensibilità altezza-fase e non esiste un valore predefinito difendibile."
              },
              "wavelength": {
                "label": "Lunghezza d'onda",
                "description": "Lunghezza d'onda radar in metri (default 0.05546576, banda C di Sentinel-1)."
              },
              "incidence_angle": {
                "label": "Angolo di incidenza",
                "description": "Angolo di incidenza in gradi: una costante (default 39.0, valore tipico a metà swath per Sentinel-1 IW) oppure il percorso di un raster co-registrato."
              },
              "slant_range": {
                "label": "Distanza obliqua",
                "description": "Distanza slant range R dal sensore al suolo in metri (default 800000)."
              },
              "reference_elevation": {
                "label": "Elevazione di riferimento",
                "description": "Quota trattata come fase topografica nulla. Default: la media del DEM, così l'uscita non porta con sé alcuno scarto globale arbitrario."
              },
              "out_topographic_phase": {
                "label": "Fase topografica in uscita",
                "description": "Raster della fase topografica simulata, AVVOLTA in (-pi, pi] come l'uscita spianata — non la fase simulata assoluta. Prodotto sempre; ripiega su un handle in memoria quando non è indicato alcun percorso."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 che contiene la fase. Ometterla per un raster di fase a banda singola o per un interferogramma I/Q a due bande (che viene allora rilevato automaticamente); indicarla per leggere la fase reale da una banda specifica di una pila multibanda. Un raster con più di due bande RICHIEDE questo parametro, perché tre o più bande non costituiscono una coppia I/Q e tirare a indovinare restituirebbe una fase plausibile ma errata."
              }
            }
          },
          "flip_line": {
            "name": "Inverti la linea",
            "description": "Inverte l'ordine dei vertici (inizio↔fine) delle geometrie polilineari per capovolgere la loro direzione di digitalizzazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale lineare in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              }
            }
          },
          "focal_flow": {
            "name": "Flusso focale",
            "description": "Codifica quali degli otto vicini di una cella fluiscono in essa come una maschera a 8 bit (ArcGIS Focal Flow). A differenza degli strumenti di accumulo D8/D-infinito inclusi, che instradano ogni cella verso valle lungo una sola direzione, questo registra ogni vicino in afflusso — catturando la convergenza in pozzi, depressioni e selle. I pesi dei bit procedono in senso antiorario da est (1, 2, 4, 8, 16, 32, 64, 128); 0 è un massimo locale, 255 un pozzo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster di superficie in ingresso (quota o qualsiasi superficie continua)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Un vicino è considerato affluente solo se supera la cella centrale di più di questo valore (default 0)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da leggere, in base 1 (default 1)."
              }
            }
          },
          "focal_statistics": {
            "name": "Statistiche focali",
            "description": "Statistiche di intorno a finestra mobile (rettangolo/cerchio/anello/settore; numeriche e categoriche).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "statistics": {
                "label": "Statistiche",
                "description": "Statistica: mean, majority, maximum, median, minimum, minority, percentile, range, std, sum o variety (default mean)."
              },
              "neighborhood": {
                "label": "Intorno",
                "description": "Forma dell'intorno: rectangle, circle, annulus o wedge (default rectangle)."
              },
              "width": {
                "label": "Larghezza",
                "description": "Larghezza del rettangolo in celle (default 3)."
              },
              "height": {
                "label": "Altezza",
                "description": "Altezza del rettangolo in celle (default 3)."
              },
              "radius": {
                "label": "Raggio",
                "description": "Raggio in celle per circle / wedge, e raggio esterno per annulus (default 1)."
              },
              "inner_radius": {
                "label": "Raggio interno",
                "description": "Raggio interno in celle per l'intorno anulare (default 0)."
              },
              "start_angle": {
                "label": "Angolo iniziale",
                "description": "Angolo iniziale del settore in gradi (0 = est, in senso antiorario; default 0)."
              },
              "end_angle": {
                "label": "Angolo finale",
                "description": "Angolo finale del settore in gradi (0 = est, in senso antiorario; default 90)."
              },
              "percentile_value": {
                "label": "Valore del percentile",
                "description": "Percentile in [0, 100] per la statistica percentile (default 90)."
              },
              "ignore_nodata": {
                "label": "Ignora il nodata",
                "description": "Se true (default), effettua la riduzione solo sulle celle valide; se false, una qualsiasi cella no-data nella finestra produce no-data."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da elaborare, in base 1 (default 1)."
              }
            }
          },
          "forest_based_forecast": {
            "name": "Previsione basata su foreste",
            "description": "Prevede un valore in avanti in ogni posizione con una random forest addestrata su finestre di lag scorrevoli della storia della posizione stessa, come ArcGIS Forest-based Forecast.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie con marca temporale che contengono un ID di posizione, un campo temporale e un campo di valore."
              },
              "location_field": {
                "label": "Campo posizione",
                "description": "Campo che identifica la posizione a cui appartiene ciascuna osservazione."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo temporale numerico usato per ordinare la serie di ciascuna posizione."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo numerico da prevedere."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale della tabella delle previsioni in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "forecast_steps": {
                "label": "Passi di previsione",
                "description": "Numero di passi da prevedere in avanti (default 3)."
              },
              "time_window": {
                "label": "Finestra temporale",
                "description": "Numero di valori precedenti usati come predittori (default: un quarto della lunghezza della serie, con un minimo di 2)."
              },
              "validation_steps": {
                "label": "Passi di validazione",
                "description": "Passi finali esclusi per valutare l'RMSE (default 0, nessuna validazione)."
              },
              "n_trees": {
                "label": "Numero di alberi",
                "description": "Numero di alberi nella foresta (default 50, massimo 500)."
              },
              "min_leaf_size": {
                "label": "Dimensione minima delle foglie",
                "description": "Numero minimo di righe di addestramento in una foglia (default 2)."
              },
              "max_depth": {
                "label": "Profondità massima",
                "description": "Profondità massima dell'albero (default 8)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme del generatore di numeri casuali deterministico che governa il bootstrap e la selezione dei sottoinsiemi di caratteristiche (default 42)."
              }
            }
          },
          "frequency_comparison": {
            "name": "Confronto di frequenze",
            "description": "Conta, per cella, quanti raster di una pila sono uguali / maggiori / minori rispetto alla cella corrispondente di un raster di valori di riferimento (ArcGIS Equal To Frequency, Greater Than Frequency e Less Than Frequency, più gli operatori inclusivi e negati). Nessuno dei due registri può aggregare un confronto attraverso una pila: cell_statistics non ha un ingresso di riferimento, raster_calculator esprime un confronto ma non può contare attraverso una pila di lunghezza arbitraria e conditional_evaluation è un selettore a condizione singola.",
            "params": {
              "value_raster": {
                "label": "Raster dei valori",
                "description": "Raster di riferimento con cui viene confrontato ciascun layer della pila, co-registrato con gli ingressi. Un riferimento a banda singola viene applicato a ogni gruppo di bande; un riferimento multibanda deve avere una banda per gruppo e avanza con esso."
              },
              "inputs": {
                "label": "Ingressi",
                "description": "Un unico raster multibanda (ogni banda è un layer) oppure un elenco separato da virgole di raster co-registrati."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster del conteggio in uscita (0..n). Se omesso, il risultato è memorizzato in memoria."
              },
              "comparison": {
                "label": "Confronto",
                "description": "'equal' (default), 'greater', 'less', 'greater_equal', 'less_equal' o 'not_equal'."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Tolleranza assoluta per 'equal'/'not_equal' su dati in virgola mobile (default 0 = esatto)."
              },
              "ignore_nodata": {
                "label": "Ignora il nodata",
                "description": "Salta le osservazioni senza dati per ciascuna cella (default true). Se false, una qualsiasi osservazione senza dati rende la cella senza dati."
              },
              "process_as_multiband": {
                "label": "Elabora come multibanda",
                "description": "'single_band' (default): ogni banda di ogni ingresso è un layer di un'unica pila. 'multi_band': la banda i di ogni ingresso forma una pila a sé, dando un risultato multibanda."
              }
            }
          },
          "fuzzy_overlay": {
            "name": "Sovrapposizione fuzzy",
            "description": "Ridimensiona un raster in una superficie di appartenenza fuzzy 0..1 (linear/gaussian/small/large/ms_small/ms_large), oppure combina più raster di appartenenza con AND/OR/PRODUCT/SUM/GAMMA fuzzy, come ArcGIS Fuzzy Membership + Fuzzy Overlay.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Modalità di appartenenza: raster in ingresso da trasformare in una superficie 0..1."
              },
              "inputs": {
                "label": "Ingressi",
                "description": "Modalità di sovrapposizione: elenco separato da virgole di almeno 2 raster di appartenenza da combinare. Prevale su 'input'."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "function": {
                "label": "Funzione",
                "description": "Funzione di appartenenza: 'linear' (default), 'gaussian', 'small', 'large', 'ms_small', 'ms_large'."
              },
              "overlay": {
                "label": "Sovrapposizione",
                "description": "Operatore di sovrapposizione: 'and' (minimo, default), 'or' (massimo), 'product', 'sum', 'gamma'."
              },
              "midpoint": {
                "label": "Punto medio",
                "description": "linear: il valore mappato a 0.5 viene ignorato (usare min/max); gaussian/small/large: il punto medio della funzione; ms_small/ms_large: il moltiplicatore della media (default ricavato dalle statistiche della banda)."
              },
              "spread": {
                "label": "Dispersione",
                "description": "gaussian/small/large: dispersione (default 0.1 per gaussian, 5 per small/large); ms_small/ms_large: il moltiplicatore della deviazione standard (default 1)."
              },
              "min": {
                "label": "Minimo",
                "description": "linear: il valore mappato sull'appartenenza 0 (default: il minimo della banda). Se min>max la rampa è decrescente."
              },
              "max": {
                "label": "Massimo",
                "description": "linear: il valore mappato sull'appartenenza 1 (default: il massimo della banda)."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Esponente della sovrapposizione gamma in [0,1] (default 0.9)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 da trasformare in modalità di appartenenza (default 1)."
              }
            }
          },
          "gaussian_geostatistical_simulations": {
            "name": "Simulazioni geostatistiche gaussiane",
            "description": "Simulazione gaussiana sequenziale: N realizzazioni condizionali equiprobabili di un campo che rispettano i dati campione (come ArcGIS Gaussian Geostatistical Simulations) — l'uscita condizionale a realizzazioni multiple che empirical_bayesian_kriging / kriging ordinario a superficie singola e turning_bands_simulation non condizionale non forniscono. Con seme e deterministico.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale in ingresso con i valori di condizionamento (CRS proiettato)."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo numerico che contiene il valore da simulare."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster multibanda in uscita (una banda per realizzazione). Se omesso, il risultato è memorizzato in memoria."
              },
              "num_realizations": {
                "label": "Numero di realizzazioni",
                "description": "Numero di realizzazioni / bande in uscita (default 10)."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita nelle unità del CRS. Default: lato più lungo dell'estensione / 100."
              },
              "variogram_model": {
                "label": "Modello di variogramma",
                "description": "'exponential' (default), 'spherical' o 'gaussian'."
              },
              "nugget": {
                "label": "Nugget",
                "description": "Nugget manuale; omettere per adattarlo ai dati."
              },
              "sill": {
                "label": "Sill",
                "description": "Sill parziale manuale; omettere per adattarlo ai dati."
              },
              "range": {
                "label": "Intervallo",
                "description": "Range manuale; omettere per adattarlo ai dati."
              },
              "max_neighbors": {
                "label": "Vicini massimi",
                "description": "Numero massimo di punti noti usati per il kriging di ciascuna cella (default 16)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme per il generatore di numeri casuali deterministico (default 1)."
              },
              "output_mean": {
                "label": "Media in uscita",
                "description": "Percorso raster opzionale per la media dell'insieme."
              },
              "output_std": {
                "label": "Deviazione standard in uscita",
                "description": "Percorso raster opzionale per la deviazione standard dell'insieme."
              }
            }
          },
          "generalized_linear_regression": {
            "name": "Regressione lineare generalizzata",
            "description": "Regressione globale (gaussiana/OLS, di Poisson o logistica) di un campo dipendente su campi esplicativi tramite IRLS, con campi di uscita adattati + residui e diagnostica completa: coefficiente, errore standard, t/z, probabilità e VIF per termine, più AICc, R²/devianza e il test di eteroschedasticità di Koenker (Breusch–Pagan) studentizzato — come ArcGIS Generalized Linear Regression.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer di geometrie in ingresso (punti o altre geometrie — la geometria viene trasferita immutata)."
              },
              "dependent_field": {
                "label": "Campo dipendente",
                "description": "Campo numerico dipendente (di risposta). Per 'logistic' deve valere 0/1."
              },
              "explanatory_fields": {
                "label": "Campi esplicativi",
                "description": "Campi numerici esplicativi separati da virgole."
              },
              "family": {
                "label": "Famiglia",
                "description": "Famiglia del modello: 'gaussian' (OLS, default), 'poisson' (funzione di legame logaritmica, conteggi) o 'logistic' (funzione di legame logit, 0/1)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "report": {
                "label": "Rapporto",
                "description": "Percorso CSV opzionale per il rapporto dei coefficienti e delle diagnostiche del modello."
              }
            }
          },
          "generate_breach_lines": {
            "name": "Genera linee di sfondamento",
            "description": "Dati i poligoni delle depressioni e un DEM, emette la polilinea lungo la quale ogni depressione verrebbe sfondata per drenare, usando un criterio di costo minimo di sfondamento, percorso più breve o minima variazione di elevazione, con profondità di taglio e volume scavato per sfondamento. Come ArcGIS Generate Breach Lines.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Poligoni delle depressioni (ad esempio l'uscita di delineate_depressions)."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster di superficie attraverso cui viene scavato lo sfondamento."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso in uscita delle linee di sfondamento. Se omesso, il risultato è memorizzato in memoria."
              },
              "connection_points": {
                "label": "Punti di connessione",
                "description": "Geometrie puntuali opzionali che vincolano il punto in cui uno sfondamento può terminare."
              },
              "method": {
                "label": "Metodo",
                "description": "'minimum_breaching_cost' (default), 'shortest_path' o 'minimum_elevation_change'."
              },
              "max_length": {
                "label": "Lunghezza massima",
                "description": "Scarta gli sfondamenti più lunghi di questo valore (unità mappa); tali depressioni restano non sfondate."
              }
            }
          },
          "generate_near_table": {
            "name": "Genera tabella di prossimità",
            "description": "Per ogni geometria in ingresso, elenca le k geometrie più vicine (o tutte entro un raggio di ricerca) del layer di prossimità con distanza, rango, angolo di rilevamento opzionale e XY del punto più vicino — una tabella di prossimità multi-vicino, come ArcGIS Generate Near Table.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (punti, linee o poligoni) di cui viene misurata la prossimità."
              },
              "near_features": {
                "label": "Geometrie vicine",
                "description": "Layer vettoriale di prossimità in cui effettuare la ricerca (punti, linee o poligoni)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita (un Point per ciascuna corrispondenza di prossimità). Se omesso, il risultato è memorizzato in memoria."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Mantiene solo le geometrie di prossimità entro questa distanza (unità mappa). Obbligatorio quando closest_count = 0 (tutte quelle entro il raggio)."
              },
              "closest_count": {
                "label": "Numero dei più vicini",
                "description": "Numero di geometrie di prossimità più vicine per ciascuna geometria in ingresso (k, default 1). Usare 0 per restituire ogni geometria di prossimità entro search_radius."
              },
              "angle": {
                "label": "Angolo",
                "description": "Aggiunge NEAR_ANGLE (direzione aritmetica in gradi, est = 0, in senso antiorario). Default false."
              },
              "location": {
                "label": "Posizione",
                "description": "Aggiunge le colonne NEAR_X / NEAR_Y per la posizione di prossimità. Default false."
              }
            }
          },
          "generate_network_swm": {
            "name": "Genera SWM di rete",
            "description": "Costruisce una matrice di pesi spaziali in cui vicini e pesi derivano dalla distanza di viaggio lungo una rete lineare anziché dalla geometria in linea retta (ArcGIS Generate Network Spatial Weights). generate_spatial_weights_matrix offre solo concettualizzazioni euclidee e topologiche (knn, banda di distanza fissa, distanza inversa, contiguità, Delaunay), quindi per i fenomeni vincolati alla rete collega geometrie che non possono raggiungersi e distorce ogni statistica a valle. L'uscita usa lo stesso schema di tabella, quindi global_morans_i, local_morans_i_lisa, getis_ord_gi_star e compare_spatial_weights la consumano invariata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie puntuali da ponderare."
              },
              "network": {
                "label": "Rete",
                "description": "Rete lineare lungo cui vengono misurate le distanze di percorrenza."
              },
              "output": {
                "label": "Uscita",
                "description": "Tabella dei pesi (CSV in base all'estensione, o una tabella vettoriale senza geometria), con lo stesso schema origine/vicino/peso prodotto da generate_spatial_weights_matrix. Se omessa, il risultato è memorizzato in memoria."
              },
              "id_field": {
                "label": "Campo ID",
                "description": "Campo che contiene l'ID univoco di ciascuna geometria. Default: l'indice della geometria in base 0, come in generate_spatial_weights_matrix."
              },
              "impedance_field": {
                "label": "Campo impedenza",
                "description": "Campo di costo della rete. Default: la lunghezza geometrica di ciascun segmento."
              },
              "distance_cutoff": {
                "label": "Soglia di distanza",
                "description": "Impedenza di rete massima a cui può trovarsi un vicino. Default: illimitata."
              },
              "max_neighbors": {
                "label": "Vicini massimi",
                "description": "Limite massimo di vicini per origine, mantenendo i più vicini. Default: illimitato."
              },
              "conceptualization": {
                "label": "Concettualizzazione",
                "description": "'fixed' (default, peso binario 1 entro la soglia) o 'inverse' (peso = 1 / impedenza^esponente)."
              },
              "exponent": {
                "label": "Esponente",
                "description": "Esponente di decadimento per 'inverse' (default 1)."
              },
              "row_standardization": {
                "label": "Standardizzazione per righe",
                "description": "Divide i pesi di ciascuna origine per la somma della loro riga, in modo che ogni origine totalizzi 1. Default false, come in generate_spatial_weights_matrix."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Distanza entro la quale due vertici della rete vengono saldati in un unico nodo, nelle unità del CRS (default 1e-6). Una rete i cui segmenti quasi si toccano risulterebbe altrimenti disconnessa in modo silenzioso, e ogni origine interessata produrrebbe zero righe."
              },
              "search_tolerance": {
                "label": "Tolleranza di ricerca",
                "description": "Distanza massima di aggancio da un punto alla rete. I punti più distanti vengono segnalati come non agganciati anziché essere collegati in modo silenzioso a un nodo lontano."
              }
            }
          },
          "generate_od_links": {
            "name": "Genera collegamenti origine-destinazione",
            "description": "Disegna linee di desiderio rette dai punti di origine ai punti di destinazione — abbinati da un ID condiviso, entro una distanza e/o ai k più vicini — ciascuna con gli ID di origine/destinazione e la lunghezza, come ArcGIS Generate Origin-Destination Links.",
            "params": {
              "origins": {
                "label": "Origini",
                "description": "Layer puntuale delle origini (Point o MultiPoint)."
              },
              "destinations": {
                "label": "Destinazioni",
                "description": "Layer puntuale delle destinazioni (Point o MultiPoint)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "num_nearest": {
                "label": "Numero dei più vicini",
                "description": "Mantiene solo le k destinazioni più vicine per ciascuna origine (dopo l'eventuale filtro per ID/distanza)."
              },
              "search_distance": {
                "label": "Distanza di ricerca",
                "description": "Mantiene solo le destinazioni entro questa distanza dall'origine (unità mappa)."
              },
              "id_field": {
                "label": "Campo ID",
                "description": "Campo presente in ENTRAMBI i layer; collega solo le coppie i cui valori corrispondono. Viene scritto anche come 'link_id'."
              },
              "origin_id_field": {
                "label": "Campo ID origine",
                "description": "Campo delle origini da scrivere come 'origin_id' (default: l'indice della geometria)."
              },
              "dest_id_field": {
                "label": "Campo ID destinazione",
                "description": "Campo delle destinazioni da scrivere come 'dest_id' (default: l'indice della geometria)."
              }
            }
          },
          "generate_points_along_3d_lines": {
            "name": "Genera punti lungo linee 3D",
            "description": "Genera punti equidistanti lungo linee 3D misurati in vera distanza 3D (non la lunghezza planimetrica 2D usata da points_along_lines incluso), con Z interpolata, punti estremi opzionali e un campo di progressiva 3D cumulata. Come ArcGIS Generate Points Along 3D Lines.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie polilineari 3D in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso dei punti in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "'distance' (default), 'percentage' o 'distance_field'."
              },
              "distance": {
                "label": "Distanza",
                "description": "Spaziatura in unità mappa per il metodo 'distance'."
              },
              "percentage": {
                "label": "Percentuale",
                "description": "Spaziatura come percentuale (0-100) della lunghezza 3D di ciascuna linea per il metodo 'percentage'."
              },
              "distance_field": {
                "label": "Campo distanza",
                "description": "Campo che indica una spaziatura per ciascuna geometria per il metodo 'distance_field'."
              },
              "include_end_points": {
                "label": "Includi i punti estremi",
                "description": "Produce anche i vertici iniziale e finale di ciascuna linea (default false)."
              },
              "add_chainage": {
                "label": "Aggiungi la progressiva",
                "description": "Scrive un campo CHAINAGE che contiene la distanza 3D cumulata dall'inizio della linea (default false)."
              }
            }
          },
          "generate_spatial_weights_matrix": {
            "name": "Genera matrice dei pesi spaziali",
            "description": "Produce una tabella riutilizzabile in formato lungo di vicini/pesi (origin_id, neighbor_id, weight) da una concettualizzazione scelta — KNN, banda di distanza fissa, distanza inversa, contiguità (bordi / bordi+angoli) o Delaunay — con standardizzazione per righe opzionale, come ArcGIS Generate Spatial Weights Matrix.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (punti/linee/poligoni; la contiguità richiede poligoni)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso della tabella in uscita — un CSV (estensione .csv) o una tabella vettoriale senza geometria. Se omesso, il risultato è memorizzato in memoria."
              },
              "id_field": {
                "label": "Campo ID",
                "description": "Campo che contiene l'ID univoco di ciascuna geometria. Default: l'indice della geometria in base 0."
              },
              "method": {
                "label": "Metodo",
                "description": "Concettualizzazione delle relazioni spaziali: 'knn', 'fixed_distance_band', 'inverse_distance', 'contiguity_edges', 'contiguity_edges_corners' o 'delaunay'. Default 'knn'."
              },
              "number_of_neighbors": {
                "label": "Numero di vicini",
                "description": "Numero di vicini più prossimi k (method = knn). Default 8."
              },
              "threshold_distance": {
                "label": "Distanza di soglia",
                "description": "Soglia della banda di distanza in unità mappa. Obbligatoria per fixed_distance_band; soglia opzionale per inverse_distance (se non impostata = tutte le altre geometrie)."
              },
              "exponent": {
                "label": "Esponente",
                "description": "Esponente p di decadimento con la distanza per inverse_distance (peso = 1/d^p). Default 1."
              },
              "row_standardization": {
                "label": "Standardizzazione per righe",
                "description": "Divide i pesi di ciascuna origine per la somma della loro riga, in modo che i pesi di ogni origine totalizzino 1. Default false."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Quantizza i vertici su una griglia di questa dimensione (unità del CRS) prima di confrontare i bordi per la contiguità. Default 0 (coordinate esatte)."
              }
            }
          },
          "generate_subset_polygons": {
            "name": "Genera poligoni di sottoinsieme",
            "description": "Partiziona un layer puntuale denso in poligoni compatti e non sovrapposti che tassellano l'estensione dei punti, ciascuno contenente tra un numero minimo e massimo di punti (ArcGIS Generate Subset Polygons). Il passo standard di pre-elaborazione per interpolare insiemi di punti molto grandi. A differenza delle griglie fisse incluse si adatta alla densità (divisione k-d mediana), a differenza di voronoi_diagram raggruppa i punti anziché creare una cella ciascuno, e a differenza di group_by_proximity emette poligoni e rispetta i limiti di dimensione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale dei poligoni in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_points": {
                "label": "Punti in uscita",
                "description": "Percorso opzionale per i punti in ingresso contrassegnati con l'ID del rispettivo sottoinsieme. Se omesso, il risultato è memorizzato in memoria (viene comunque restituito)."
              },
              "min_points_per_subset": {
                "label": "Punti minimi per sottoinsieme",
                "description": "Limite inferiore dei punti per sottoinsieme (default 50)."
              },
              "max_points_per_subset": {
                "label": "Punti massimi per sottoinsieme",
                "description": "Limite superiore dei punti per sottoinsieme (default 200)."
              },
              "coincident_points": {
                "label": "Punti coincidenti",
                "description": "'single' (default; i punti esattamente coincidenti contano una sola volta nel dimensionamento) o 'all' (ciascuno conta singolarmente)."
              },
              "clip_to_hull": {
                "label": "Ritaglia all'involucro",
                "description": "Ritaglia i poligoni dei sottoinsiemi sull'inviluppo convesso dei punti, in modo che il risultato aderisca ai dati anziché al loro riquadro di delimitazione (default true)."
              }
            }
          },
          "generate_transects_along_lines": {
            "name": "Genera transetti lungo le linee",
            "description": "Percorre ogni linea a intervallo fisso ed emette linee di transetto perpendicolari di una data lunghezza (centrate o sfalsate), per il campionamento della variazione della linea di costa, ripariale e delle sezioni trasversali — come ArcGIS Generate Transects Along Lines.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale lineare in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "interval": {
                "label": "Intervallo",
                "description": "Spaziatura tra i transetti lungo ciascuna linea, nelle unità del CRS. Obbligatoria."
              },
              "length": {
                "label": "Lunghezza",
                "description": "Lunghezza totale del transetto, nelle unità del CRS. Obbligatoria."
              },
              "offset": {
                "label": "Offset",
                "description": "Scarto con segno del centro del transetto rispetto alla linea, nelle unità del CRS (0 = centrato; +/- lo sposta a sinistra/destra). Default 0."
              },
              "include_ends": {
                "label": "Includi le estremità",
                "description": "Colloca un transetto anche esattamente all'inizio e alla fine di ciascuna linea. Default false."
              }
            }
          },
          "generate_trend_raster": {
            "name": "Genera raster di tendenza",
            "description": "Adatta una tendenza temporale per pixel attraverso una serie temporale di raster co-registrati (come ArcGIS Generate Trend Raster): pendenza/intercetta/R² OLS o Mann-Kendall non parametrico + pendenza di Sen con un valore p — la tendenza temporale per pixel che trend_surface (spaziale) e change_vector_analysis (a due date) inclusi non possono produrre.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Elenco separato da virgole di percorsi di raster a banda singola co-registrati, in ordine temporale (>= 3)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster della pendenza in uscita (pendenza di Sen per mann_kendall). Se omesso, il risultato è memorizzato in memoria."
              },
              "times": {
                "label": "Tempi",
                "description": "Tempi numerici separati da virgole (ad esempio anni) corrispondenti a 'inputs'. Default 0,1,2,..."
              },
              "method": {
                "label": "Metodo",
                "description": "'linear' (OLS; default) o 'mann_kendall' (non parametrico + pendenza di Sen)."
              },
              "intercept_output": {
                "label": "Intercetta in uscita",
                "description": "Solo per linear: raster opzionale in uscita dell'intercetta OLS."
              },
              "significance_output": {
                "label": "Significatività in uscita",
                "description": "Raster opzionale in uscita: R² (linear) o il p-value bilaterale di Mann-Kendall (mann_kendall)."
              },
              "min_valid": {
                "label": "Minimo validi",
                "description": "Numero minimo di osservazioni non no-data per pixel (default 3)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 da leggere da ciascun ingresso (default 1)."
              }
            }
          },
          "geodetic_densify": {
            "name": "Densifica geodeticamente",
            "description": "Inserisce vertici lungo il vero percorso geodetico o lossodromico (rilevamento costante) tra i vertici esistenti di un layer lineare o poligonale geografico (lon/lat), come Geodetic Densify di ArcGIS — così i segmenti lunghi seguono la curvatura terrestre anziché una corda planare.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale lineare o poligonale in ingresso, presunto geografico (lon/lat, in stile EPSG:4326)."
              },
              "geodetic_type": {
                "label": "Tipo geodetico",
                "description": "Tipo di percorso tra i vertici: 'geodesic' (default; percorso più breve sull'ellissoide WGS84) o 'rhumb'/'loxodrome' (direzione vera costante)."
              },
              "max_segment_length": {
                "label": "Lunghezza massima del segmento",
                "description": "Spaziatura massima obiettivo, in metri, tra vertici consecutivi dopo l'infittimento. Deve essere indicato esattamente uno tra max_segment_length e vertices_per_segment."
              },
              "vertices_per_segment": {
                "label": "Vertici per segmento",
                "description": "Alternativa a max_segment_length: inserisce esattamente questo numero di vertici equispaziati in ogni segmento originale, indipendentemente dalla sua lunghezza. Deve essere indicato esattamente uno tra max_segment_length e vertices_per_segment."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale; se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "geotagged_photos_to_points": {
            "name": "Da foto geotaggate a punti",
            "description": "Legge una cartella di foto geotaggate e costruisce un layer puntuale WGS-84 con il percorso di ogni foto, data e ora di scatto, altitudine, rilevamento della fotocamera (direzione immagine GPS) e marca/modello — analizzati solo dai metadati EXIF (nessun pixel decodificato), come ArcGIS GeoTagged Photos To Points.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso della cartella che contiene le foto (JPEG/TIFF) da cui leggere i metadati GPS EXIF."
              },
              "output": {
                "label": "Uscita",
                "description": "Vettoriale puntuale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "recursive": {
                "label": "Ricorsivo",
                "description": "Scende nelle sottocartelle durante la ricerca delle foto. Default false."
              },
              "only_geotagged": {
                "label": "Solo con geotag",
                "description": "Salta le immagini prive di posizione GPS (default true). Se false, le immagini non geotaggate vengono prodotte con geometria nulla."
              }
            }
          },
          "getis_ord_general_g": {
            "name": "Clustering alto/basso (G generale di Getis-Ord)",
            "description": "Calcola la statistica G generale globale di Getis-Ord — un singolo z-score e valore p che indica se i valori ALTI o BASSI sono globalmente raggruppati, come ArcGIS High/Low Clustering (Getis-Ord General G).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso. I punti usano le proprie coordinate; le altre geometrie usano il punto rappresentativo dato dalla media dei vertici (i pesi di contiguità richiedono poligoni)."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numerico non negativo da testare per il raggruppamento di valori alti/bassi."
              },
              "weights": {
                "label": "Pesi",
                "description": "Schema dei pesi spaziali: 'distance_band' (default), 'k_nearest', 'queen' o 'rook'."
              },
              "distance_band": {
                "label": "Banda di distanza",
                "description": "Distanza di soglia (unità del CRS) per lo schema 'distance_band'. Default: la distanza massima dal vicino più prossimo (ogni geometria ha almeno 1 vicino)."
              },
              "k": {
                "label": "K",
                "description": "Numero di vicini per lo schema 'k_nearest' (default 8)."
              },
              "row_standardize": {
                "label": "Standardizzazione per righe",
                "description": "Standardizza per riga la matrice dei pesi in modo che ogni riga sommi a 1 (default false)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso CSV opzionale per il rapporto a riga singola. Restituito comunque sempre nel risultato."
              }
            }
          },
          "goldstein_phase_filter": {
            "name": "Filtro di fase di Goldstein",
            "description": "Filtraggio spettrale adattivo (Goldstein) della fase SAR interferometrica, il passo che rende praticabile lo srotolamento della fase (ArcGIS Apply Complex Data Filter). unwrap_phase del round 17 fallisce su un interferogramma grezzo perché i residui di rumore forzano i branch cut; l'intera famiglia di filtri lee/frost/kuan/wiener/gaussiani inclusa lavora su intensità a valori reali e non può essere usata qui, poiché mediare la fase avvolta attraverso la discontinuità +/-pi la distrugge. Filtra il segnale complesso patch per patch nel dominio della frequenza e riporta il conteggio dei residui prima e dopo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Interferogramma: un raster I/Q a due bande, oppure un raster a banda singola della fase avvolta in radianti (si assume ampiezza unitaria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster complesso filtrato a due bande (I, Q) in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_phase": {
                "label": "Fase in uscita",
                "description": "Fase avvolta filtrata a banda singola in uscita, in radianti, in (-pi, pi]. Prodotta sempre; memorizzata in memoria quando non è indicato alcun percorso."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Intensità del filtro in [0, 1] (default 0.5). 0 lascia la fase inalterata; 1 è massimamente aggressivo."
              },
              "outer_window_size": {
                "label": "Dimensione della finestra esterna",
                "description": "Dimensione della porzione FFT in celle (default 32). Arrotondata per eccesso a una potenza di due."
              },
              "inner_window_size": {
                "label": "Dimensione della finestra interna",
                "description": "Passo tra le porzioni in celle (default = outer/4). Un valore più piccolo comporta maggiore sovrapposizione e una fusione più morbida; non deve superare la finestra esterna."
              },
              "spectrum_smoothing": {
                "label": "Lisciatura dello spettro",
                "description": "Ampiezza in classi della media mobile applicata allo spettro della porzione prima dell'esponenziazione (default 3, deve essere dispari)."
              }
            }
          },
          "gpx_to_features": {
            "name": "Da GPX a elementi",
            "description": "Analizza un file GPX in punti waypoint e/o polilinee di tracce/percorsi, con ele/time/name.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso di un file .gpx (XML GPS Exchange Format)."
              },
              "points_output": {
                "label": "Punti in uscita",
                "description": "Percorso opzionale del vettoriale puntuale in uscita per i waypoint (driver dedotto dalla sua estensione). Se non è indicata nessuna delle due uscite, i waypoint sono memorizzati in memoria."
              },
              "lines_output": {
                "label": "Linee in uscita",
                "description": "Percorso opzionale del vettoriale lineare in uscita per le tracce e le rotte (driver dedotto dalla sua estensione)."
              }
            }
          },
          "graphic_buffer": {
            "name": "Buffer grafico",
            "description": "Crea buffer delle geometrie con una scelta di stili di estremità (round/square/butt) e di giunzione degli angoli (round/miter/bevel), con un limite dello smusso — la geometria di buffer squadrata/smussata che i buffer solo arrotondati non possono produrre.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "distance": {
                "label": "Distanza",
                "description": "Distanza del buffer nelle unità del CRS del layer. Deve essere positiva."
              },
              "cap": {
                "label": "Estremità",
                "description": "Stile delle estremità per le terminazioni di linee/punti: 'round' (default), 'square' o 'butt' (alias 'flat')."
              },
              "join": {
                "label": "Unione",
                "description": "Stile di giunzione degli angoli: 'round' (default), 'miter' o 'bevel'."
              },
              "miter_limit": {
                "label": "Limite dello smusso",
                "description": "Rapporto tra la lunghezza della punta e la distanza del buffer oltre il quale un angolo a punta viene smussato (default ArcGIS/JTS 10). Deve essere >= 1. Usato solo quando join='miter'."
              },
              "dissolve": {
                "label": "Dissolvi",
                "description": "Se true, unisce tutti i buffer in un'unica geometria (multi)poligonale dissolta. Default false (un buffer per ciascuna geometria in ingresso, con gli attributi preservati)."
              }
            }
          },
          "greater_than_or_equal_to": {
            "name": "MaggioreOUgualeA",
            "description": "Verifica se il primo raster è maggiore o uguale al secondo cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "grid_index_features": {
            "name": "Elementi di griglia indice",
            "description": "Costruisce una griglia indice di serie di mappe di rettangoli a dimensione di pagina con nomi di pagina (A1, B3, ... o sequenziali), dimensionamento derivato dalla scala e un filtro opzionale di intersezione con i dati — come ArcGIS Grid Index Features, più una modalità a striscia che segue un percorso con pagine ruotate come ArcGIS Strip Map Index Features.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso. Fornisce l'estensione quando non ne è indicata una esplicita, la rotta per la modalità a strisce e le geometrie verificate da intersect_only."
              },
              "output": {
                "label": "Uscita",
                "description": "Vettoriale poligonale in uscita delle pagine indice (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "mode": {
                "label": "Modalità",
                "description": "grid (default): suddivide in tessere un'estensione rettangolare. strip: segue una linea di rotta con pagine ruotate e sovrapposte."
              },
              "x_min": {
                "label": "X minimo",
                "description": "X minima dell'estensione esplicita (unità del CRS). Indicare tutti e quattro i valori x_min/y_min/x_max/y_max per sostituire l'estensione dell'ingresso."
              },
              "y_min": {
                "label": "Y minimo",
                "description": "Y minima dell'estensione esplicita (unità del CRS)."
              },
              "x_max": {
                "label": "X massimo",
                "description": "X massima dell'estensione esplicita (unità del CRS)."
              },
              "y_max": {
                "label": "Y massimo",
                "description": "Y massima dell'estensione esplicita (unità del CRS)."
              },
              "tile_width": {
                "label": "Larghezza della tessera",
                "description": "Larghezza della pagina nelle unità del CRS. Indicare sia tile_width sia tile_height, oppure usare page_size + map_scale."
              },
              "tile_height": {
                "label": "Altezza della tessera",
                "description": "Altezza della pagina nelle unità del CRS (lunghezza della pagina lungo la rotta in modalità a strisce)."
              },
              "page_size": {
                "label": "Dimensione della pagina",
                "description": "Preimpostazione del formato carta (a0..a4, letter, legal, tabloid) le cui dimensioni metriche vengono moltiplicate per map_scale per dimensionare ciascuna pagina. Richiede map_scale."
              },
              "map_scale": {
                "label": "Scala della mappa",
                "description": "Denominatore della scala della mappa (ad esempio 24000 per 1:24.000). Con page_size, la dimensione della tessera = metri di carta × map_scale (si assume un CRS metrico)."
              },
              "origin_x": {
                "label": "Origine X",
                "description": "X dell'origine della griglia a cui si allineano i bordi delle tessere. Default: X minima dell'estensione."
              },
              "origin_y": {
                "label": "Origine Y",
                "description": "Y dell'origine della griglia a cui si allineano i bordi delle tessere. Default: Y minima dell'estensione."
              },
              "naming": {
                "label": "Denominazione",
                "description": "Schema di denominazione delle pagine: alphanumeric (default; lettera di colonna + numero di riga, ad esempio A1) o sequential (numero nell'ordine di lettura)."
              },
              "intersect_only": {
                "label": "Solo intersezione",
                "description": "Se true, scarta le pagine che non intersecano alcuna geometria in ingresso. Richiede input. Default false."
              },
              "route": {
                "label": "Percorso",
                "description": "Modalità a strisce: layer vettoriale lineare da seguire. Per impostazione predefinita la prima geometria lineare di input."
              },
              "overlap": {
                "label": "Sovrapposizione",
                "description": "Modalità a strisce: frazione [0,1) di sovrapposizione tra pagine consecutive lungo la rotta. Default 0.05."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Codice EPSG in uscita quando l'estensione è indicata esplicitamente e non esiste un layer in ingresso da cui ereditare un CRS."
              }
            }
          },
          "group_by_proximity": {
            "name": "Raggruppa per prossimità",
            "description": "Etichetta le geometrie con un GROUP_ID per componenti connesse spaziali a collegamento singolo — geometrie entro una distanza ('near') o che si toccano ('intersects'), opzionalmente condividendo un valore di attributo — come ArcGIS Group By Proximity.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (qualsiasi tipo di geometria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "relationship": {
                "label": "Relazione",
                "description": "'near' (entro 'spatial_near_distance', default) o 'intersects' (a contatto, distanza 0)."
              },
              "spatial_near_distance": {
                "label": "Distanza di prossimità spaziale",
                "description": "Distanza di ricerca in unità mappa per 'near' (default 0)."
              },
              "attribute_field": {
                "label": "Campo attributo",
                "description": "Campo opzionale; le geometrie vengono raggruppate solo se condividono il valore di questo attributo."
              },
              "group_field": {
                "label": "Campo di raggruppamento",
                "description": "Nome del campo dell'ID di gruppo in uscita (default 'GROUP_ID')."
              }
            }
          },
          "gtfs_to_features": {
            "name": "Da GTFS a elementi",
            "description": "Analizza un feed di trasporto GTFS in punti di fermata e linee di percorso, opzionalmente con conteggi di frequenza del servizio per fermata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso di una directory di un feed GTFS estratto (cartella di file *.txt: stops.txt, shapes.txt, trips.txt, ...)."
              },
              "stops_output": {
                "label": "Fermate in uscita",
                "description": "Percorso opzionale del vettoriale puntuale in uscita per le fermate (driver dedotto dalla sua estensione). Se non è indicata nessuna delle due uscite, le fermate sono memorizzate in memoria."
              },
              "shapes_output": {
                "label": "Tracciati in uscita",
                "description": "Percorso opzionale del vettoriale lineare in uscita per i tracciati delle linee (driver dedotto dalla sua estensione)."
              },
              "frequency": {
                "label": "Frequenza",
                "description": "Se true, conteggia in un campo n_departures le partenze programmate di ciascuna fermata da stop_times.txt. Default false."
              },
              "start_time": {
                "label": "Orario di inizio",
                "description": "Limite inferiore opzionale HH:MM:SS per la finestra di frequenza (gli orari GTFS possono superare le 24:00:00)."
              },
              "end_time": {
                "label": "Ora finale",
                "description": "Limite superiore opzionale HH:MM:SS per la finestra di frequenza."
              }
            }
          },
          "h3_polyfill": {
            "name": "Riempimento di poligoni H3",
            "description": "Copre i poligoni in ingresso con celle della griglia globale discreta H3 a una risoluzione scelta.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale poligonale in ingresso (deve essere in lon/lat geografiche, EPSG:4326) oppure handle in memoria."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita; il driver è dedotto dalla sua estensione (.geojson, .fgb, .parquet, ...). Se omesso, il layer è memorizzato in memoria."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Risoluzione H3 da 0 (la più grossolana) a 15 (la più fine); default 8 (celle di ~0,7 km²)."
              }
            }
          },
          "h3_to_vector": {
            "name": "Da celle H3 a poligoni",
            "description": "Trasforma una colonna di ID di celle H3 in poligoni di confine delle celle, copiando gli altri attributi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale in ingresso (o handle in memoria) con un campo di ID di celle H3."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita; il driver è dedotto dalla sua estensione (.geojson, .fgb, .parquet, ...). Se omesso, il layer è memorizzato in memoria."
              },
              "field": {
                "label": "Campo",
                "description": "Nome del campo di testo che contiene l'ID della cella H3; default 'h3'."
              }
            }
          },
          "hdbscan": {
            "name": "Clustering HDBSCAN",
            "description": "Clustering gerarchico basato sulla densità (HDBSCAN*): MST di raggiungibilità mutua, albero condensato dei cluster e selezione per eccesso di massa, con probabilità di appartenenza e punteggio di anomalia per punto — gestisce densità variabili senza epsilon, come l'opzione HDBSCAN di ArcGIS Density-based Clustering.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso (CRS proiettato; distanze nelle sue unità)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (una copia dell'ingresso con i campi dei cluster). Se omesso, il risultato è memorizzato in memoria."
              },
              "min_cluster_size": {
                "label": "Dimensione minima del cluster",
                "description": "Raggruppamento più piccolo considerato un cluster (>= 2). Default 5."
              },
              "min_samples": {
                "label": "Campioni minimi",
                "description": "Dimensione dell'intorno per la stima della densità tramite distanza di nucleo (valori più alti = più punti classificati come rumore). Default: min_cluster_size."
              }
            }
          },
          "hot_spot_analysis_comparison": {
            "name": "Confronto di analisi degli hotspot",
            "description": "Confronta due layer di risultati di hotspot Getis-Ord: abbina le loro posizioni, classifica ogni transizione (hot_to_hot, hot_to_cold, none_to_hot, ...) ed esegue un test di permutazione con seme sulla concordanza complessiva — come ArcGIS Hot Spot Analysis Comparison.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo layer dei risultati degli hot spot (punti o poligoni)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo layer dei risultati degli hot spot."
              },
              "bin_field": {
                "label": "Campo classe",
                "description": "Campo di significatività presente su entrambi gli ingressi (positivo = caldo, negativo = freddo)."
              },
              "significance": {
                "label": "Significatività",
                "description": "Soglia in valore assoluto al di sotto della quale una posizione è 'none' (default 0)."
              },
              "match_field": {
                "label": "Campo di corrispondenza",
                "description": "Campo ID opzionale presente su entrambi gli ingressi, usato per associare le posizioni; altrimenti si usa il centroide più vicino."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Distanza massima tra centroidi per l'associazione alla posizione più vicina (unità mappa). Illimitata se omessa."
              },
              "permutations": {
                "label": "Permutazioni",
                "description": "Numero di permutazioni per il test di concordanza globale (default 499)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme del generatore di numeri casuali deterministico per le permutazioni (default 1)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "identify_narrow_polygons": {
            "name": "Identifica i poligoni stretti",
            "description": "Segnala i poligoni che in qualche punto sono più stretti di una tolleranza di larghezza (sliver e colli sottili), annotando ciascuno con un flag is_narrow e una larghezza minima stimata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale poligonale in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "width_tolerance": {
                "label": "Tolleranza di larghezza",
                "description": "Soglia di larghezza nelle unità del CRS. Un poligono è stretto dove è più sottile di questo valore. Obbligatoria."
              },
              "min_narrow_area": {
                "label": "Area minima delle strettoie",
                "description": "Area minima della porzione stretta (unità del CRS al quadrato) necessaria per contrassegnare un poligono; le aree strette più piccole sono ignorate come rumore. Default: width_tolerance al quadrato, che assorbe anche il lieve arrotondamento degli angoli prodotto dall'apertura."
              },
              "narrow_only": {
                "label": "Solo strettoie",
                "description": "Se true, scarta le geometrie non strette e produce solo i poligoni stretti contrassegnati. Default false (annota e mantiene tutte le geometrie)."
              }
            }
          },
          "idw_3d": {
            "name": "IDW 3D",
            "description": "Interpolazione volumetrica a distanza inversa di osservazioni puntuali 3D in una pila di livelli di elevazione (una banda raster per livello), con un fattore di gonfiaggio dell'elevazione che gestisce l'anisotropia verticale-orizzontale e punti opzionali di validazione incrociata leave-one-out. Come ArcGIS IDW3D.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie puntuali 3D in ingresso."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo numerico che contiene il valore da interpolare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster multibanda in uscita (una banda per livello di quota). Se omesso, il risultato è memorizzato in memoria."
              },
              "z_field": {
                "label": "Campo Z",
                "description": "Campo che fornisce la quota; per impostazione predefinita la Z della geometria."
              },
              "power": {
                "label": "Potenza",
                "description": "Esponente a distanza inversa (default 2)."
              },
              "elev_inflation_factor": {
                "label": "Fattore di gonfiaggio dell'elevazione",
                "description": "Moltiplicatore applicato alla separazione verticale prima del calcolo della distanza 3D (default 1). Valori > 1 fanno pesare di più la distanza verticale, in linea con la scala di correlazione verticale più corta della maggior parte dei dati volumetrici."
              },
              "x_spacing": {
                "label": "Spaziatura X",
                "description": "Dimensione della cella in uscita lungo X (default: estensione / 100)."
              },
              "y_spacing": {
                "label": "Spaziatura Y",
                "description": "Dimensione della cella in uscita lungo Y (default: uguale a x_spacing)."
              },
              "z_spacing": {
                "label": "Spaziatura Z",
                "description": "Spaziatura verticale tra i livelli in uscita (default: intervallo z / 10)."
              },
              "z_min": {
                "label": "Z minimo",
                "description": "Livello di uscita più basso (default: il minimo dei dati)."
              },
              "z_max": {
                "label": "Z massimo",
                "description": "Livello di uscita più alto (default: il massimo dei dati)."
              },
              "neighbors": {
                "label": "Vicini",
                "description": "Numero massimo di campioni per predizione (default 12)."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Distanza di ricerca 3D (dilatata) massima opzionale; i campioni oltre tale distanza vengono ignorati."
              },
              "output_cv_features": {
                "label": "Geometrie di validazione incrociata in uscita",
                "description": "Percorso opzionale per i punti di convalida incrociata leave-one-out con i valori osservato, previsto e residuo."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Codice EPSG impresso sul raster in uscita (default: il CRS del layer in ingresso)."
              }
            }
          },
          "incremental_spatial_autocorrelation": {
            "name": "Autocorrelazione spaziale incrementale",
            "description": "Calcola l'I di Moran globale su una serie di bande di distanza crescenti e riporta la curva degli z-score con il suo primo picco e il picco massimo — il modo difendibile di scegliere una distanza di clustering, come ArcGIS Incremental Spatial Autocorrelation.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso (le altre geometrie usano il punto rappresentativo dato dalla media dei vertici). Usare un CRS proiettato."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numerico da testare per l'autocorrelazione spaziale."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso CSV opzionale per la tabella per banda. Restituito comunque sempre nel risultato."
              },
              "begin_distance": {
                "label": "Distanza iniziale",
                "description": "Distanza della prima banda, nelle unità del CRS. Default: la distanza massima dal vicino più prossimo (ogni geometria ha almeno 1 vicino)."
              },
              "increment": {
                "label": "Incremento",
                "description": "Distanza aggiunta a ciascuna banda, nelle unità del CRS. Default: la distanza iniziale."
              },
              "num_bands": {
                "label": "Numero di bande",
                "description": "Numero di bande di distanza da valutare (default 10)."
              }
            }
          },
          "inside_3d": {
            "name": "Interno in 3D",
            "description": "Determina quali geometrie 3D (punti, polilinee o solidi) ricadono all'interno di contenitori volumetrici chiusi, riportando opzionalmente la lunghezza contenuta o la frazione di vertici (ArcGIS Inside 3D). Ogni predicato di contenimento in entrambi i registri proietta sul piano XY, quindi un sensore sopra un'impronta o una tubazione sotto una particella risultano attualmente al suo interno. I contenitori seguono la convenzione di mesh triangolare di buffer_3d e minimum_bounding_volume inclusi.",
            "params": {
              "target": {
                "label": "Obiettivo",
                "description": "Geometrie 3D da verificare: punti, polilinee o solidi a maglia triangolare."
              },
              "container": {
                "label": "Contenitore",
                "description": "Geometrie 3D chiuse (solidi a maglia triangolare) che fungono da contenitori."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale della tabella in uscita delle coppie destinazione/contenitore. Se omesso, il risultato è memorizzato in memoria."
              },
              "mode": {
                "label": "Modalità",
                "description": "'simple' (default) indica se la destinazione è all'interno; 'complex' aggiunge la lunghezza contenuta e la frazione interna."
              },
              "output_features": {
                "label": "Geometrie in uscita",
                "description": "Percorso opzionale per le porzioni interne ritagliate delle destinazioni lineari (modalità complex). Se omesso, il risultato è memorizzato in memoria (viene comunque restituito)."
              }
            }
          },
          "integrate": {
            "name": "Integra",
            "description": "Aggancia tutti i vertici di tutte le geometrie entro una tolleranza di cluster a una posizione condivisa, così i confini condivisi quasi coincidenti diventano esattamente coincidenti, inserendo opzionalmente vertici di giunzione a T sui bordi vicini — come ArcGIS Integrate.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (qualsiasi tipo di geometria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Distanza di raggruppamento nelle unità del CRS: i vertici entro questa distanza vengono agganciati a una posizione condivisa. Obbligatoria."
              },
              "snap_to_edges": {
                "label": "Aggancia ai bordi",
                "description": "Inserisce un vertice anche dove il vertice di una geometria ricade entro la tolleranza dal segmento di un'altra geometria (giunzioni a T). Default true."
              }
            }
          },
          "interpolate_from_spatiotemporal_points": {
            "name": "Interpola da punti spazio-temporali",
            "description": "Raggruppa osservazioni puntuali con timestamp in fette temporali regolari e interpola ciascuna su un'unica griglia condivisa, producendo un raster multidimensionale co-registrato, come ArcGIS Interpolate From Spatiotemporal Points.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie puntuali con marca temporale."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo numerico da interpolare."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo della marca temporale: secondi numerici dall'epoch, oppure testo ISO-8601."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita per la prima fetta. Le fette successive vengono scritte accanto con un suffisso _t<index>. Se omesso, tutte le fette sono memorizzate in memoria."
              },
              "time_step": {
                "label": "Passo temporale",
                "description": "daily | weekly | monthly (default) | quarterly | yearly."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita in unità mappa. Per impostazione predefinita 1/50 della dimensione maggiore dell'estensione."
              },
              "method": {
                "label": "Metodo",
                "description": "idw (default) | nearest | mean | median."
              },
              "power": {
                "label": "Potenza",
                "description": "Esponente di distanza dell'IDW (default 2)."
              },
              "neighbors": {
                "label": "Vicini",
                "description": "Numero di osservazioni più vicine usate per ciascuna cella (default 8)."
              },
              "min_points": {
                "label": "Punti minimi",
                "description": "Numero minimo di osservazioni necessarie perché una fetta venga interpolata; le fette più rade producono tutto nodata anziché una superficie fuorviante (default 3)."
              }
            }
          },
          "interpolate_shape": {
            "name": "Interpola la forma",
            "description": "Drappeggia punti/linee/poligoni su un raster di superficie: densifica, campiona la Z per vertice (bilineare o più vicino), scrive la geometria 3D e aggiunge metriche di superficie (z_min/z_max/z_mean, lunghezza 3D della superficie, pendenza media), come ArcGIS Interpolate Shape / Add Surface Information.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (punti, linee o poligoni) con lo stesso CRS della superficie."
              },
              "surface": {
                "label": "Superficie",
                "description": "Raster di quota/superficie da campionare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "sample_distance": {
                "label": "Distanza di campionamento",
                "description": "Intervallo di infittimento nelle unità del CRS; i segmenti lunghi vengono suddivisi in modo da seguire la superficie. Default: la dimensione della cella del raster."
              },
              "method": {
                "label": "Metodo",
                "description": "Campionamento della superficie: 'bilinear' (default) o 'nearest'."
              },
              "attributes": {
                "label": "Attributi",
                "description": "Elenco separato da virgole delle colonne metriche da aggiungere: z_min,z_max,z_mean,surf_len,avg_slope. Default: tutte."
              },
              "band": {
                "label": "Banda",
                "description": "Banda della superficie da campionare, in base 1 (default 1)."
              }
            }
          },
          "interpolate_with_barriers": {
            "name": "Interpola con barriere",
            "description": "Interpola misurazioni puntuali in un raster rispettando le barriere assolute (linee di costa, crinali, faglie, muri): l'influenza viaggia attorno alle barriere tramite distanza di costo/geodetica, non attraverso di esse — IDW o un kernel polinomiale locale di primo ordine, come ArcGIS Kernel Interpolation With Barriers / Spline With Barriers. Gli strumenti idw/kriging/natural-neighbour/spline inclusi sono tutti ciechi alle barriere.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso delle misure."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numerico dei punti che contiene il valore da interpolare."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster interpolato in uscita (GeoTIFF). Se omesso, il risultato è memorizzato in memoria."
              },
              "barriers": {
                "label": "Barriere",
                "description": "Layer vettoriale opzionale di barriere (polilinee o poligoni). Rasterizzato come celle impraticabili, così l'influenza deve aggirarle. Omettere per un confronto privo di barriere."
              },
              "method": {
                "label": "Metodo",
                "description": "'idw' (default) o 'local_polynomial' (adattamento planare ponderato del primo ordine con un kernel gaussiano su distanza geodetica)."
              },
              "power": {
                "label": "Potenza",
                "description": "Esponente di decadimento con la distanza dell'IDW (default 2)."
              },
              "bandwidth": {
                "label": "Larghezza di banda",
                "description": "Ampiezza di banda del kernel gaussiano per local_polynomial (unità di distanza). Default: il raggio di ricerca, altrimenti l'estensione della griglia."
              },
              "radius": {
                "label": "Raggio",
                "description": "Raggio di ricerca come distanza geodetica (di costo): i campioni oltre tale distanza non influenzano una cella, e le celle irraggiungibili entro di essa diventano no-data. Metri per un CRS geografico, unità del CRS altrimenti. Default: illimitato."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita nelle unità del CRS (gradi per un CRS geografico). Default: dimensionata in modo che l'asse più lungo copra circa 256 celle."
              }
            }
          },
          "intersect_3d": {
            "name": "Interseca in 3D",
            "description": "Calcola il volume condiviso da solidi 3D chiusi sovrapposti, coppia per coppia, con un solido di delimitazione opzionale per ogni intersezione (ArcGIS Intersect 3D). union_3d è l'unica sovrapposizione 3D in entrambi i registri e risponde solo alla domanda sul volume combinato; inside_3d è un predicato di contenimento per punti e linee, e polygon_volume / surface_volume misurano rispetto a un piano di riferimento. I volumi per solido sono esatti; l'intersezione è stimata per occupazione di voxel a una risoluzione riportata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie solide 3D chiuse (MultiPolygon a maglia triangolare con Z, come quelli prodotti da buffer_3d e minimum_bounding_volume)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo layer di solidi opzionale. Se omesso, viene intersecata ogni coppia all'interno di 'input' (la modalità a ingresso singolo di ArcGIS)."
              },
              "output": {
                "label": "Uscita",
                "description": "Tabella in uscita delle coppie che si intersecano, una riga per ciascuna intersezione non vuota. Se omessa, il risultato è memorizzato in memoria."
              },
              "mode": {
                "label": "Modalità",
                "description": "'table' (default): solo attributi. 'solid': produce anche il solido di ingombro di ciascuna intersezione come geometria. Il volume misurato è comunque sempre un attributo — non si pretende di produrre una maglia unita esatta."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Celle voxel lungo l'asse più lungo del riquadro di delimitazione condiviso da ciascuna coppia (default 64). Valori più alti sono più accurati e più lenti."
              }
            }
          },
          "intersect_3d_line_with_surface": {
            "name": "Interseca linea 3D con superficie",
            "description": "Divide le linee 3D in ogni punto in cui attraversano una superficie di elevazione o un multipatch, etichettando ogni pezzo come sopra o sotto ed emettendo i punti di attraversamento (ArcGIS Intersect 3D Line With Surface / Intersect 3D Line With Multi Patch). intersect_3d del round 17 accetta solidi chiusi anziché linee, inside_3d è un predicato di contenimento che né taglia la geometria né individua gli attraversamenti, e interpolate_shape drappeggia una linea su una superficie, scartando la z della linea da cui dipende il confronto.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer lineare 3D, con vertici dotati di z."
              },
              "surface": {
                "label": "Superficie",
                "description": "Raster di quota su cui effettuare il taglio. Obbligatorio a meno che non sia indicato 'multipatch'."
              },
              "multipatch": {
                "label": "Multipatch",
                "description": "Layer multipatch (multipoligoni triangolari) su cui effettuare il taglio, al posto di una superficie raster."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer lineare in uscita suddiviso a ogni attraversamento. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_points": {
                "label": "Punti in uscita",
                "description": "Layer puntuale in uscita degli attraversamenti stessi. Prodotto sempre; memorizzato in memoria quando non è indicato alcun percorso."
              },
              "spacing": {
                "label": "Spaziatura",
                "description": "Passo di infittimento in pianta in unità mappa (default: una cella della superficie). Valori più piccoli risolvono gli attraversamenti in modo più fine a un costo maggiore."
              },
              "keep_above": {
                "label": "Mantieni sopra",
                "description": "Mantiene i pezzi al di sopra della superficie (default true)."
              },
              "keep_below": {
                "label": "Mantieni sotto",
                "description": "Mantiene i pezzi al di sotto della superficie (default true)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 del raster di superficie (default 1)."
              }
            }
          },
          "intersecting_layers_masks": {
            "name": "Maschere dei layer intersecanti",
            "description": "Genera poligoni di maschera cartografica a un margine attorno alle geometrie di un layer mascherato, ma solo dove intersecano un secondo layer di maschera (contorno esatto, involucro convesso o riquadro di delimitazione).",
            "params": {
              "masked_layer": {
                "label": "Layer mascherato",
                "description": "Layer vettoriale mascherato (qualsiasi geometria): ogni geometria che interseca il layer di mascheratura riceve una maschera. Formato rilevato automaticamente (o handle in memoria)."
              },
              "masking_layer": {
                "label": "Layer di maschera",
                "description": "Layer vettoriale di mascheratura (qualsiasi geometria): una geometria mascherata viene mascherata solo dove interseca una geometria di questo layer."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "margin": {
                "label": "Margine",
                "description": "Distanza del margine della maschera. Metri per un CRS geografico (EPSG:4326 o sconosciuto, convertiti in gradi), altrimenti nelle unità del CRS del layer. Deve essere positiva."
              },
              "mask_kind": {
                "label": "Tipo di maschera",
                "description": "Forma della maschera: 'exact' (default, contorno della geometria bufferizzato), 'convex_hull' (inviluppo convesso dilatato) o 'box' (rettangolo di ingombro + margine)."
              },
              "id_field": {
                "label": "Campo ID",
                "description": "Campo opzionale del layer mascherato il cui valore viene copiato su ciascuna maschera come 'source_id'. Per impostazione predefinita l'indice della geometria di origine."
              }
            }
          },
          "intervisibility": {
            "name": "Intervisibilità",
            "description": "Verifica ogni linea di vista rispetto a ostruzioni vettoriali 3D e la segnala come visibile o bloccata, riportando quale ostruzione l'ha bloccata e dove (ArcGIS Intervisibility). line_of_sight, visibility_index, viewshed e skyline_analysis lavorano tutti rispetto a un raster di superficie; nessuno può verificare rispetto a ostruzioni multipatch 3D come gli edifici, i cui aggetti e portici vengono persi quando incisi in un DEM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Linee di vista: polilinee 3D il cui primo vertice è l'osservatore e l'ultimo la destinazione."
              },
              "obstructions": {
                "label": "Ostruzioni",
                "description": "Uno o più layer di ostruzioni 3D separati da virgole (MultiPolygon a maglia triangolare con Z)."
              },
              "output": {
                "label": "Uscita",
                "description": "Linee di vista in uscita con i campi di visibilità aggiunti. Se omesso, il risultato è memorizzato in memoria."
              },
              "visible_field": {
                "label": "Campo visibile",
                "description": "Nome del campo booleano di visibilità (default 'VISIBLE'), corrispondente al parametro di ArcGIS."
              },
              "observer_offset": {
                "label": "Offset dell'osservatore",
                "description": "Altezza aggiunta all'estremo dell'osservatore prima della verifica, nelle unità del CRS (default 0). Modella l'altezza dell'occhio o dello strumento."
              },
              "target_offset": {
                "label": "Offset dell'obiettivo",
                "description": "Altezza aggiunta all'estremo della destinazione prima della verifica, nelle unità del CRS (default 0)."
              },
              "visible_only": {
                "label": "Solo visibili",
                "description": "Produce solo le linee di vista non ostruite (default false)."
              }
            }
          },
          "is_closed_3d": {
            "name": "È chiuso in 3D",
            "description": "Segnala quali geometrie multipatch 3D sono solidi chiusi e stagni e quali sono superfici aperte, con conteggi diagnostici di bordi di confine non accoppiati, bordi non-manifold e coerenza dell'orientamento (ArcGIS Is Closed 3D). Ogni strumento volumetrico del catalogo — union_3d, inside_3d, minimum_bounding_volume, buffer_3d — assume ingressi chiusi e restituisce un numero privo di significato per una mesh aperta, e nulla permette di verificare prima quella precondizione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie 3D (MultiPolygon a maglia triangolare con Z, come quelli prodotti da buffer_3d, minimum_bounding_volume e voxel_isosurface)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita: le geometrie in ingresso con i campi di diagnostica aggiunti. Se omesso, il risultato è memorizzato in memoria."
              },
              "closed_only": {
                "label": "Solo chiusi",
                "description": "Produce solo le geometrie che sono solidi chiusi (default false: ogni geometria viene prodotta con il proprio esito)."
              }
            }
          },
          "kernel_density_ratio": {
            "name": "Rapporto di densità kernel",
            "description": "Rapporto di rischio relativo di due superfici di densità kernel: valuta un layer puntuale numeratore (casi) e un layer puntuale denominatore (popolazione a rischio) con lo stesso kernel quartico e larghezza di banda condivisa, quindi divide cella per cella — come ArcGIS Calculate Kernel Density Ratio. Un valore minimo del denominatore scrive nodata dove la popolazione è troppo rada (nessuna fuga di inf/NaN), e una trasformazione opzionale in logaritmo naturale rende simmetriche la sovra- e sotto-rappresentazione. Il rapporto di densità che heat_map a layer singolo non può esprimere.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale del numeratore (ad esempio casi / incidenti)."
              },
              "denominator": {
                "label": "Denominatore",
                "description": "Layer puntuale del denominatore (ad esempio popolazione / esposizione a rischio)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster del rapporto in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "weight_field": {
                "label": "Campo peso",
                "description": "Campo numerico che pondera i punti del numeratore (default: ogni punto vale 1)."
              },
              "denominator_weight_field": {
                "label": "Campo peso del denominatore",
                "description": "Campo numerico che pondera i punti del denominatore (default: ogni punto vale 1)."
              },
              "bandwidth": {
                "label": "Larghezza di banda",
                "description": "Ampiezza di banda del kernel / raggio di ricerca comune (metri per un CRS geografico, unità del CRS altrimenti). Default: regola di Silverman calcolata sulla dispersione complessiva dei punti."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita nelle unità del CRS (default: lato maggiore dell'estensione / 200)."
              },
              "log_ratio": {
                "label": "Rapporto logaritmico",
                "description": "Se true, produce il logaritmo naturale del rapporto (simmetrico attorno a 0). Default false."
              },
              "denominator_floor": {
                "label": "Valore minimo del denominatore",
                "description": "Le celle la cui densità al denominatore è inferiore a questo valore (o nulla) diventano no-data, evitando divergenze nella divisione. Default 0 (viene mascherato solo il denominatore esattamente nullo)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG da assegnare all'uscita (default: quello del layer del numeratore)."
              }
            }
          },
          "kernel_interpolation_with_barriers": {
            "name": "Interpolazione kernel con barriere",
            "description": "Interpola osservazioni puntuali con un adattamento polinomiale ponderato da kernel a finestra mobile in cui la distanza è misurata come il percorso più breve ATTORNO alle barriere assolute anziché dritto attraverso di esse (ArcGIS Kernel Interpolation With Barriers). Completa diffusion_interpolation_with_barriers incluso, che risolve un'equazione del calore invece di applicare un kernel esplicito. Ogni altro interpolatore in entrambi i registri usa la distanza euclidea, quindi tutti interpolano dritto attraverso promontori e faglie.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale in ingresso che contiene le osservazioni."
              },
              "z_field": {
                "label": "Campo Z",
                "description": "Campo numerico da interpolare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita per i valori previsti. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_error": {
                "label": "Errore in uscita",
                "description": "Percorso opzionale per il raster dell'RMS locale ponderato dei residui — la dispersione ponderata dei residui dei vicini attorno all'adattamento locale. È una misura di bontà dell'adattamento, NON un errore standard di predizione in stile ArcGIS (non tiene conto né dei gradi di libertà effettivi né del leverage). Se omesso, il risultato è memorizzato in memoria (viene comunque restituito)."
              },
              "barriers": {
                "label": "Barriere",
                "description": "Layer polilineare opzionale di barriere assolute. Se non ne viene fornita alcuna, lo strumento degenera in una semplice interpolazione kernel."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita nelle unità del CRS. Per impostazione predefinita circa 1/100 del lato maggiore dell'estensione."
              },
              "kernel": {
                "label": "Kernel",
                "description": "exponential, gaussian, quartic, epanechnikov, polynomial5 (default) o constant."
              },
              "bandwidth": {
                "label": "Larghezza di banda",
                "description": "Ampiezza di banda del kernel nelle unità del CRS. Per impostazione predefinita un valore ricavato dai dati a partire dalla spaziatura media dal vicino più prossimo."
              },
              "power": {
                "label": "Potenza",
                "description": "Ordine del polinomio locale: 0 (media ponderata) o 1 (default, adattamento planare)."
              },
              "ridge": {
                "label": "Crinale",
                "description": "Parametro di ridge che stabilizza l'adattamento locale ai minimi quadrati dove un intorno è degenere (default 1e-6)."
              },
              "max_neighbors": {
                "label": "Vicini massimi",
                "description": "Limite massimo al numero di osservazioni che contribuiscono a ciascun adattamento locale (default 32)."
              }
            }
          },
          "kml_to_features": {
            "name": "Da KML a elementi",
            "description": "Legge i Placemark di file .kml/.kmz in layer puntuali, lineari e poligonali con attributi nome/descrizione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso di un file .kml o di un archivio .kmz (un KML compresso)."
              },
              "points_output": {
                "label": "Punti in uscita",
                "description": "Percorso opzionale del vettoriale puntuale in uscita (driver dedotto dalla sua estensione). Scritto solo se il KML contiene segnaposto puntuali."
              },
              "lines_output": {
                "label": "Linee in uscita",
                "description": "Percorso opzionale del vettoriale lineare in uscita (driver dedotto dalla sua estensione). Scritto solo se il KML contiene segnaposto lineari."
              },
              "polygons_output": {
                "label": "Poligoni in uscita",
                "description": "Percorso opzionale del vettoriale poligonale in uscita (driver dedotto dalla sua estensione). Scritto solo se il KML contiene segnaposto poligonali."
              }
            }
          },
          "landtrendr": {
            "name": "LandTrendr",
            "description": "Segmentazione temporale LandTrendr di una serie annuale di immagini (come ArcGIS Analyze Changes Using LandTrendr): rimozione dei picchi, adattamento lineare a tratti greedy basato sui vertici ed estrazione del disturbo maggiore (anno, magnitudine, durata) per pixel. La segmentazione della storia dei cambiamenti per pixel che change_vector_analysis a due date e generate_trend_raster a tendenza singola non possono fare.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Percorsi dei raster annuali separati da virgole in ordine temporale (ad esempio le uscite NBR di spectral_index; >= 4)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster in uscita: anno del disturbo maggiore per ciascun pixel. Se omesso, il risultato è memorizzato in memoria."
              },
              "years": {
                "label": "Anni",
                "description": "Anni separati da virgole corrispondenti a 'inputs' (default 0,1,2,...)."
              },
              "magnitude_output": {
                "label": "Uscita della magnitudine",
                "description": "Raster opzionale della magnitudine del disturbo (variazione dell'indice)."
              },
              "duration_output": {
                "label": "Durata in uscita",
                "description": "Raster opzionale della durata del disturbo (in anni)."
              },
              "direction": {
                "label": "Direzione",
                "description": "Direzione del disturbo nell'indice: 'loss' (una diminuzione; default) o 'gain' (un aumento)."
              },
              "max_segments": {
                "label": "Segmenti massimi",
                "description": "Numero massimo di segmenti (default 6)."
              },
              "spike_threshold": {
                "label": "Soglia dei picchi",
                "description": "Intensità di rimozione dei picchi 0..1 (frazione dell'intervallo della serie; default 0.75; 1 la disattiva)."
              },
              "min_valid": {
                "label": "Minimo validi",
                "description": "Numero minimo di osservazioni valide per pixel (default 4)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 da leggere da ciascun ingresso (default 1)."
              }
            }
          },
          "las_height_metrics": {
            "name": "Metriche di altezza LAS",
            "description": "Rasterizza metriche di altezza della chioma per cella dalle altezze lidar (come ArcGIS LAS Height Metrics): media, deviazione standard, asimmetria, curtosi, MAD e percentili di altezza come griglia multibanda — la suite forestale di momenti/percentili che height_above_ground e lidar_point_stats inclusi non emettono in un solo passaggio.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Nuvola di punti LAS/LAZ in ingresso di altezze sul suolo (normalizzare prima con height_above_ground)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster multibanda in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "metrics": {
                "label": "Metriche",
                "description": "Sottoinsieme separato da virgole di mean,std,skewness,kurtosis,mad (default 'mean,std,skewness,kurtosis,mad')."
              },
              "height_percentiles": {
                "label": "Percentili di altezza",
                "description": "Percentili separati da virgole in [0,100], ad esempio '50,95,99' (default '50,95,99'; vuoto per nessuno)."
              },
              "min_height": {
                "label": "Altezza minima",
                "description": "Esclude i punti con altezza inferiore a questo valore (soglia di taglio del suolo/rumore). Default 0."
              },
              "min_points": {
                "label": "Punti minimi",
                "description": "Le celle con meno punti validi diventano no-data. Default 4."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita nelle unità del CRS. Default 10."
              }
            }
          },
          "less_than_or_equal_to": {
            "name": "MinoreOUgualeA",
            "description": "Verifica se il primo raster è minore o uguale al secondo cella per cella.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo raster in ingresso (stringa di percorso o oggetto raster tipizzato)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del file raster in uscita. Se omesso, l'uscita resta in memoria ed è restituita come handle raster memory://."
              }
            }
          },
          "line_density": {
            "name": "Densità di linee",
            "description": "Densità delle geometrie lineari (lunghezza per unità di area) in un intorno circolare attorno a ogni cella raster — densità di strade, corsi d'acqua o faglie — ritagliando ogni segmento lineare al cerchio del raggio di ricerca (forma chiusa) e dividendo la lunghezza ponderata sommata per pi*r^2. Come ArcGIS Line Density; la controparte per linee vettoriali che mancano a heat_map incluso, solo puntuale, e a edge_density categorico.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale polilineare in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster di densità in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "weight_field": {
                "label": "Campo peso",
                "description": "Campo numerico che pondera ciascuna linea (ad esempio corsie, traffico, popolazione). Default: ogni linea ha peso 1."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno (metri per un CRS geografico, unità del CRS altrimenti). Default: lato minore dell'estensione / 25."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita (stesse unità di search_radius). Default: search_radius / 10."
              },
              "area_units": {
                "label": "Unità di area",
                "description": "Unità di area dei valori di densità: 'square_map_units' (default), 'square_meters', 'square_kilometers', 'square_miles' o 'square_feet'."
              }
            }
          },
          "line_of_sight": {
            "name": "Linea di vista",
            "description": "Visibilità punto-punto su un DEM: per ogni coppia osservatore-obiettivo emette la linea di vista divisa in segmenti visibili e ostruiti più un flag di obiettivo visibile, come ArcGIS Line Of Sight.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster di quota in ingresso (CRS proiettato; distanze/altezze nelle sue unità)."
              },
              "observers": {
                "label": "Osservatori",
                "description": "Layer vettoriale puntuale degli osservatori."
              },
              "targets": {
                "label": "Obiettivi",
                "description": "Layer vettoriale puntuale delle destinazioni."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "observer_offset": {
                "label": "Offset dell'osservatore",
                "description": "Altezza dell'osservatore sul suolo, nelle unità del DEM (default 1.75)."
              },
              "target_offset": {
                "label": "Offset dell'obiettivo",
                "description": "Altezza della destinazione sul suolo, nelle unità del DEM (default 0)."
              },
              "pair_field": {
                "label": "Campo coppia",
                "description": "Campo opzionale presente su entrambi i layer; osservatori e destinazioni vengono accoppiati dove questo campo coincide (anziché tutti con tutti)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda del DEM da campionare (default 1)."
              }
            }
          },
          "line_statistics": {
            "name": "Statistiche delle linee",
            "description": "Rasterizza una statistica di intorno di un attributo lineare (media, maggioranza, mediana, minimo/massimo, intervallo, varietà o lunghezza totale) ritagliando ogni segmento al cerchio del raggio di ricerca e ponderando i valori per lunghezza — come ArcGIS Line Statistics; il complemento a superficie di attributi di line_density che manca alla suite inclusa.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale polilineare in ingresso."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numerico da riepilogare. Obbligatorio per ogni statistica tranne 'length'."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "statistic": {
                "label": "Statistica",
                "description": "'mean' (default), 'majority', 'maximum', 'median', 'minimum', 'minority', 'range', 'variety' o 'length'."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Raggio dell'intorno nelle unità del CRS. Default: lato minore dell'estensione / 25."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita nelle unità del CRS. Default: search_radius / 10."
              }
            }
          },
          "local_bivariate_relationships": {
            "name": "Relazioni bivariate locali",
            "description": "Per ogni geometria, classifica come due variabili si relazionano nel suo intorno locale (non significativo, lineare positivo/negativo, concavo, convesso, indefinito) da adattamenti locali lineari e quadratici, una statistica di dipendenza a riduzione di entropia e un valore p da test di permutazione con seme — come ArcGIS Local Bivariate Relationships.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso che contiene i due campi delle variabili."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (una copia dell'ingresso con i campi della relazione). Se omesso, il risultato è memorizzato in memoria."
              },
              "field1": {
                "label": "Campo 1",
                "description": "Nome del campo della prima variabile (esplicativa)."
              },
              "field2": {
                "label": "Campo 2",
                "description": "Nome del campo della seconda variabile (dipendente)."
              },
              "neighbors": {
                "label": "Vicini",
                "description": "Numero di vicini più prossimi k che definisce ciascun campione locale (default 12; deve essere >= 5)."
              },
              "permutations": {
                "label": "Permutazioni",
                "description": "Numero di permutazioni per il test di significatività (default 199; 0 lo disattiva)."
              },
              "significance": {
                "label": "Significatività",
                "description": "Soglia dello pseudo p-value per dichiarare significativa una relazione (default 0.05)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme del generatore di numeri casuali per le permutazioni (default 1), per risultati riproducibili."
              }
            }
          },
          "local_outlier_analysis": {
            "name": "Analisi locale dei valori anomali",
            "description": "Analisi spazio-temporale dei valori anomali locali (I di Moran locale di Anselin su un cubo spazio-temporale H3): classifica ogni cella x intervallo temporale come cluster Alto-Alto/Basso-Basso o valore anomalo Alto-Basso/Basso-Alto con un valore p di permutazione con seme, quindi riassume per cella nel tempo — come ArcGIS Local Outlier Analysis. L'estensione spazio-temporale di local_morans_i_lisa incluso, solo spaziale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale in ingresso di eventi con marca temporale (lon/lat)."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo che contiene l'istante di ciascun punto: un numero o una marca temporale ISO-8601."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer di riepilogo poligonale H3 in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo numerico da aggregare per gruppo (default: conteggio dei punti)."
              },
              "time_step": {
                "label": "Passo temporale",
                "description": "Ampiezza di un passo temporale nelle unità di time_field (default 1)."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Risoluzione H3 da 0 a 15 (default 7)."
              },
              "kring": {
                "label": "Kring",
                "description": "Raggio dell'intorno spaziale in k-ring (default 1)."
              },
              "time_window": {
                "label": "Finestra temporale",
                "description": "Semiampiezza dell'intorno temporale in passi (default 1)."
              },
              "permutations": {
                "label": "Permutazioni",
                "description": "Permutazioni per il test di significatività (default 99; 0 lo disattiva)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme del generatore di numeri casuali per le permutazioni (default 1)."
              }
            }
          },
          "local_polynomial_interpolation": {
            "name": "Interpolazione polinomiale locale",
            "description": "Adatta un polinomio di ordine 1/2/3 all'interno di un intorno mobile ponderato da kernel in ogni cella, producendo una superficie di predizione, una superficie di errore standard della predizione o una superficie del numero di condizionamento. A differenza di trend_surface globale incluso, il polinomio viene riadattato localmente. Come ArcGIS Local Polynomial Interpolation.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie puntuali in ingresso che contengono il valore da interpolare."
              },
              "z_field": {
                "label": "Campo Z",
                "description": "Campo numerico che contiene il valore da interpolare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita in unità mappa (default: estensione dell'ingresso / 200)."
              },
              "order": {
                "label": "Ordine",
                "description": "Ordine polinomiale: 1 (default), 2 o 3."
              },
              "kernel": {
                "label": "Kernel",
                "description": "'exponential' (default), 'gaussian', 'quartic', 'epanechnikov', 'fifth_order' o 'constant'."
              },
              "bandwidth": {
                "label": "Larghezza di banda",
                "description": "Ampiezza di banda fissa del kernel in unità mappa. Se omessa, viene usata un'ampiezza di banda adattiva: la distanza dal campione più vicino di ordine 'neighbors'."
              },
              "neighbors": {
                "label": "Vicini",
                "description": "Campioni per adattamento locale con l'ampiezza di banda adattiva (default: 3 volte il numero di termini polinomiali)."
              },
              "weight_field": {
                "label": "Campo peso",
                "description": "Campo opzionale del peso di misura per ciascuna osservazione."
              },
              "condition_number": {
                "label": "Numero di condizionamento",
                "description": "Rifiuta di effettuare una predizione dove il numero di condizionamento della matrice di disegno locale supera questa soglia (default: nessun limite)."
              },
              "output_type": {
                "label": "Tipo di uscita",
                "description": "'prediction' (default), 'standard_error' o 'condition_number'."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Codice EPSG impresso sul raster in uscita (default: il CRS del layer in ingresso)."
              }
            }
          },
          "locate_lines_along_routes": {
            "name": "Localizza linee lungo le rotte",
            "description": "Sovrappone geometrie lineari o poligonali su percorsi misurati per produrre eventi lineari con misura iniziale/finale (RID, FMEAS, TMEAS), come ArcGIS Locate Features Along Routes (eventi lineari/poligonali).",
            "params": {
              "input_features": {
                "label": "Geometrie in ingresso",
                "description": "Layer vettoriale lineare o poligonale in ingresso da posizionare lungo le rotte."
              },
              "routes": {
                "label": "Percorsi",
                "description": "Layer vettoriale delle rotte (linee) che fornisce le misure del riferimento lineare."
              },
              "route_id_field": {
                "label": "Campo ID percorso",
                "description": "Campo del layer delle rotte che contiene l'identificativo di ciascuna rotta (RID). Se omesso, viene usato l'indice della geometria della rotta in base 0."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Raggio di ricerca nelle unità del CRS. Un vertice di una geometria entro questa distanza da una rotta è considerato coincidente. Obbligatorio (> 0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale degli eventi lineari in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "locate_regions": {
            "name": "Localizza regioni",
            "description": "Trova le migliori regioni contigue di un'area obiettivo da un raster di idoneità (come ArcGIS Locate Regions): crescita di regioni best-first dai picchi di idoneità con un controllo di forma/compattezza e spaziatura tra regioni — il passo di localizzazione che trasforma una superficie di fuzzy_overlay/weighted_overlay in regioni reali, cosa che clump e la soglia non possono fare.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster di idoneità (valori più alti = più idoneo)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster in uscita degli ID di regione in base 1 (no-data altrove). Se omesso, il risultato è memorizzato in memoria."
              },
              "total_area": {
                "label": "Area totale",
                "description": "Area totale obiettivo su tutte le regioni, nelle unità di area del CRS (default: il 5% dell'area valida)."
              },
              "num_regions": {
                "label": "Numero di regioni",
                "description": "Numero di regioni da individuare (default 1). Ciascuna mira a total_area / num_regions."
              },
              "shape": {
                "label": "Forma",
                "description": "Peso della compattezza 0..1: 0 = pura idoneità, 1 = favorisce fortemente le regioni tondeggianti (default 0.3)."
              },
              "min_distance": {
                "label": "Distanza minima",
                "description": "Distanza minima tra le regioni, nelle unità del CRS (default 0)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da leggere, in base 1 (default 1)."
              }
            }
          },
          "matched_filter_target_detection": {
            "name": "Rilevamento di bersagli con filtro adattato (CEM/ACE)",
            "description": "Assegna a ogni pixel di un'immagine multibanda un punteggio rispetto a uno spettro obiettivo noto usando le statistiche della scena per sopprimere lo sfondo — Constrained Energy Minimization (CEM) o Adaptive Coherence Estimator (ACE) — con una maschera opzionale a soglia di percentile, come ArcGIS Detect Target Using Spectra.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster multibanda in ingresso (2 o più bande)."
              },
              "target_spectrum": {
                "label": "Spettro obiettivo",
                "description": "Spettro di destinazione: un valore per banda, come array JSON o come elenco separato da virgole o spazi (la lunghezza deve essere pari al numero di bande)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster in uscita del punteggio di rilevamento (F32). Se omesso, il risultato è memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "'cem' (Constrained Energy Minimization, default) o 'ace' (Adaptive Coherence Estimator, punteggi in 0..1)."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Percentile opzionale (0-100) della distribuzione dei punteggi al di sopra del quale viene scritta una maschera binaria dei rilevamenti."
              },
              "mask_output": {
                "label": "Maschera in uscita",
                "description": "Percorso di uscita per la maschera binaria dei rilevamenti (richiede 'threshold'). Se omesso in presenza di una soglia, il risultato è memorizzato in memoria."
              }
            }
          },
          "maximum_likelihood_classification": {
            "name": "Classificazione a massima verosimiglianza",
            "description": "Classificatore supervisionato gaussiano di massima verosimiglianza: modella ogni classe di addestramento come una normale multivariata (media + covarianza per classe), classifica ogni pixel di un'immagine multibanda in base alla massima log-verosimiglianza gaussiana con pesi a priori opzionali uguali/campionari, e può emettere un raster di probabilità/confidenza per pixel e rifiutare le celle meno confidenti, come ArcGIS Maximum Likelihood Classification.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster multibanda in ingresso da classificare (1 o più bande; ogni banda è una caratteristica)."
              },
              "training": {
                "label": "Addestramento",
                "description": "Raster di addestramento etichettato con interi sulla stessa griglia di 'input': ogni intero positivo distinto è una classe; le celle no-data / non positive / non finite sono prive di etichetta."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster classificato in uscita che contiene gli ID delle classi di addestramento. Se omesso, il risultato è memorizzato in memoria."
              },
              "prob_output": {
                "label": "Probabilità in uscita",
                "description": "Raster F32 opzionale in uscita della probabilità a posteriori (confidenza) della classe vincente in [0,1]."
              },
              "a_priori": {
                "label": "A priori",
                "description": "Pesi a priori delle classi: 'equal' (default, 1/K) o 'sample' (proporzionali al numero di pixel di addestramento di ciascuna classe)."
              },
              "reject_fraction": {
                "label": "Frazione di rifiuto",
                "description": "Frazione in [0,1) delle celle classificate con minore confidenza da lasciare non classificate (no-data). Default 0."
              }
            }
          },
          "median_center": {
            "name": "Centro mediano",
            "description": "La mediana geometrica (punto di Weiszfeld che minimizza la distanza euclidea sommata, opzionalmente ponderata, da tutti i punti in ingresso) — un punto centrale robusto per gruppo di casi, con attributi mediani opzionali per campo (ArcGIS Median Center).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "weight_field": {
                "label": "Campo peso",
                "description": "Campo numerico opzionale che pondera l'attrazione di ciascun punto sulla mediana."
              },
              "case_field": {
                "label": "Campo caso",
                "description": "Campo opzionale per cui raggruppare i punti; una mediana per ogni valore distinto."
              },
              "attribute_fields": {
                "label": "Campi attributo",
                "description": "Campi numerici opzionali separati da virgole; la mediana per gruppo di ciascuno viene aggiunta come '<field>_med'."
              }
            }
          },
          "merge_divided_roads": {
            "name": "Unisci le carreggiate separate",
            "description": "Sostituisce le coppie abbinate di corsie stradali divise con singole linee centrali preservando la connettività delle intersezioni, accoppiando solo le corsie che condividono un campo di fusione e corrono anti-parallele entro una distanza di separazione, ed emettendo poligoni di spostamento per propagate_displacement. Come ArcGIS Merge Divided Roads.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie delle linee centrali delle strade."
              },
              "merge_field": {
                "label": "Campo di fusione",
                "description": "Campo i cui valori coincidenti rendono due linee una coppia candidata di carreggiate (ad esempio nome o classe della strada)."
              },
              "merge_distance": {
                "label": "Distanza di fusione",
                "description": "Separazione massima tra le carreggiate accoppiate, in unità mappa."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso in uscita delle linee centrali unite. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_displacement_features": {
                "label": "Geometrie di spostamento in uscita",
                "description": "Poligoni opzionali che mostrano dove la geometria si è spostata, per propagate_displacement."
              },
              "character_field": {
                "label": "Campo carattere",
                "description": "Campo opzionale; le geometrie con un valore diverso da zero / non vuoto sono escluse dalla fusione."
              },
              "output_table": {
                "label": "Tabella in uscita",
                "description": "Tabella di lignaggio opzionale che riconduce le geometrie in uscita alle rispettive geometrie di origine."
              }
            }
          },
          "merge_lines_by_pseudo_node": {
            "name": "Unisci le linee sui pseudo-nodi",
            "description": "Dissolve le catene di segmenti lineari che si incontrano in pseudo-nodi di grado 2 in singole polilinee, preservando le intersezioni vere e (opzionalmente) le interruzioni di attributo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale lineare in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "dissolve_fields": {
                "label": "Campi di dissolvenza",
                "description": "Nomi dei campi attributo separati da virgole; due segmenti vengono fusi solo se coincidono su tutti. Se omesso, i segmenti vengono fusi attraverso ogni nodo di grado 2 indipendentemente dagli attributi."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Gli estremi entro questa distanza (unità del CRS) sono considerati lo stesso nodo. Default 1e-6."
              }
            }
          },
          "merge_multidimensional_rasters": {
            "name": "Unisci raster multidimensionali",
            "description": "Unisce più cubi raster co-registrati in uno, ordinati per coordinata della dimensione, risolvendo le coordinate duplicate per cella (ArcGIS Merge Multidimensional Rasters). aggregate_multidimensional_raster riduce un cubo e composite_bands impila raster a banda singola in bande, ma nulla univa i cubi lungo la loro dimensione condivisa.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Percorsi dei cubi (raster multibanda) separati da virgole o punti e virgola. Almeno due."
              },
              "dimension_values": {
                "label": "Valori della dimensione",
                "description": "Coordinate opzionali per fetta che coprono ogni fetta di ogni ingresso, nell'ordine degli ingressi. Non devono essere ordinate né univoche — è proprio ciò che questo strumento risolve. Senza di esse gli ingressi vengono concatenati nell'ordine indicato."
              },
              "dimension": {
                "label": "Dimensione",
                "description": "Nome della dimensione, usato solo nella reportistica (default 'slice')."
              },
              "resolve_overlap": {
                "label": "Risolvi le sovrapposizioni",
                "description": "Regola per le coordinate duplicate: 'first' (default), 'last', 'mean', 'min', 'max' o 'error'."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Tolleranza relativa per considerare uguali due coordinate (default 1e-9)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster del cubo in uscita, una banda per fetta unita, nell'ordine della dimensione. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "mgwr": {
            "name": "Regressione geograficamente pesata multiscala",
            "description": "GWR in cui ogni termine esplicativo ottiene la propria larghezza di banda tramite back-fitting AICc (MGWR): coefficienti per geometria, R² locale, residui, numero di condizionamento, più la larghezza di banda ottimale di ogni termine con un'interpretazione locale/regionale/globale e diagnostiche globali AICc / R².",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer delle geometrie in ingresso (punti, o altre geometrie tramite il loro punto rappresentativo)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "dependent_field": {
                "label": "Campo dipendente",
                "description": "Campo numerico dipendente (risposta)."
              },
              "explanatory_fields": {
                "label": "Campi esplicativi",
                "description": "Campo o campi numerici esplicativi separati da virgole, ciascuno adattato con la propria ampiezza di banda."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Kernel di decadimento con la distanza: 'gaussian' (default) o 'bisquare'."
              },
              "bandwidth_type": {
                "label": "Tipo di larghezza di banda",
                "description": "'adaptive' (default; ampiezza di banda = k vicini più prossimi) o 'fixed' (ampiezza di banda = una distanza). Si applica alla ricerca dell'ampiezza di banda propria di ciascun termine."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Tolleranza di convergenza del back-fitting: si arresta quando la variazione relativa della RSS tra due passate scende al di sotto di questo valore (default 0.001)."
              },
              "max_iterations": {
                "label": "Iterazioni massime",
                "description": "Numero massimo di passate di back-fitting su tutti i termini (default 30)."
              }
            }
          },
          "minimum_bounding_volume": {
            "name": "Volume minimo circoscritto",
            "description": "Calcola il volume minimo di inviluppo (involucro convesso, sfera o involucro) attorno a geometrie 3D, per geometria, per gruppo o sull'intero ingresso, emettendo il solido come facce triangolari con valore Z e attributi di volume e area della superficie. Come ArcGIS Minimum Bounding Volume.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie 3D in ingresso di tipo punto, multipunto o linea."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso in uscita per le facce del volume. Se omesso, il risultato è memorizzato in memoria."
              },
              "z_value": {
                "label": "Valore Z",
                "description": "'geometry' (default) per prendere Z dalla geometria, oppure il nome di un campo numerico che fornisce Z."
              },
              "geometry_type": {
                "label": "Tipo di geometria",
                "description": "'convex_hull' (default), 'sphere' o 'envelope'. ('concave_hull' non è implementato in questa versione.)"
              },
              "group_option": {
                "label": "Opzione di raggruppamento",
                "description": "'none' (un volume per geometria, default), 'all' (un unico volume su tutto l'ingresso) o 'list' (uno per ciascun valore di 'group_field')."
              },
              "group_field": {
                "label": "Campo di raggruppamento",
                "description": "Campo che definisce i gruppi quando 'group_option' è 'list'."
              },
              "mbv_fields": {
                "label": "Campi MBV",
                "description": "Aggiunge i campi MBV_VOLUME e MBV_AREA (default false)."
              }
            }
          },
          "multicriteria_overlay": {
            "name": "Sovrapposizione multicriterio",
            "description": "Combina una pila di raster di criterio in un'unica superficie di idoneità con MCDA basato sui ranghi: weighted_sum, weighted_geometric_mean, OWA (media ponderata ordinata) o TOPSIS (vicinanza al punto ideale), con pesi per raster e ridimensionamento from_scale/to_scale, come ArcGIS Multicriteria Overlay.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Elenco separato da virgole di almeno 2 raster di criterio co-registrati (valore più alto = più idoneo; ciascuno viene riscalato min-max in 0..1 prima della combinazione)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di combinazione: 'weighted_sum' (default), 'weighted_geometric_mean', 'owa', 'topsis'."
              },
              "weights": {
                "label": "Pesi",
                "description": "Pesi di importanza per raster separati da virgole, uno per ciascun ingresso (default: uguali). Normalizzati in modo da sommare a 1."
              },
              "order_weights": {
                "label": "Pesi dell'ordine",
                "description": "Solo per OWA: pesi d'ordine separati da virgole, uno per ciascun ingresso, applicati ai criteri ordinati dal più alto al più basso per ciascuna cella (default: uguali, il che rende OWA equivalente alla media ponderata). Normalizzati in modo da sommare a 1."
              },
              "from_scale": {
                "label": "Scala di origine",
                "description": "Limite inferiore della scala di valutazione in uscita (default 0)."
              },
              "to_scale": {
                "label": "Scala di destinazione",
                "description": "Limite superiore della scala di valutazione in uscita (default 1)."
              }
            }
          },
          "multidimensional_anomaly": {
            "name": "Genera anomalia multidimensionale",
            "description": "Cubo di anomalie temporali per fetta da una pila temporale raster (come ArcGIS Generate Multidimensional Anomaly): per ogni pixel calcola una linea di base temporale (media/deviazione standard o mediana lungo la dimensione delle fette) e riscrive ogni fetta temporale come la sua deviazione da quella linea di base — differenza dalla media, percentuale della media, z-score o differenza dalla mediana — emettendo una pila di anomalie con una fetta per ogni fetta in ingresso.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Un unico raster multibanda (ogni banda è una fetta temporale) oppure un elenco separato da virgole di raster co-registrati, in ordine temporale."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster multibanda delle anomalie in uscita (una banda per fetta in ingresso). Se omesso, il risultato è memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "Calcolo dell'anomalia: 'difference_from_mean' (default), 'percent_of_mean', 'z_score' o 'difference_from_median'."
              },
              "reference_range": {
                "label": "Intervallo di riferimento",
                "description": "Intervallo di fette opzionale 'start-end' in base 1 ed estremi inclusi, usato per calcolare la linea di base per pixel (default: tutte le fette)."
              },
              "min_valid": {
                "label": "Minimo validi",
                "description": "Numero minimo di osservazioni non no-data per pixel all'interno dell'intervallo di riferimento (default 1); al di sotto di questo valore il pixel è no-data."
              }
            }
          },
          "multidimensional_principal_components": {
            "name": "Componenti principali multidimensionali",
            "description": "Decompone un cubo raster nei pochi modi reali che sottendono una lunga serie temporale, emettendo raster delle componenti, loading e autovalori, in forma di riduzione dimensionale o di riduzione spaziale (ArcGIS Multidimensional Principal Components). principal_component_analysis incluso decompone lo spazio delle bande all'interno di una scena, quindi le sue componenti mescolano bande spettrali anziché il tempo; dimension_reduction lavora su tabelle di attributi vettoriali. Entrambe le riduzioni derivano da un'unica covarianza nello spazio delle fette, poiché l'equivalente nello spazio dei pixel sarebbe una matrice quadrata di milioni di righe.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Un unico raster multibanda (ogni banda è una fetta) oppure un elenco separato da virgole di raster co-registrati."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster multibanda in uscita: punteggi delle componenti per 'dimension_reduction', loading delle componenti per 'spatial_reduction'. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_loadings": {
                "label": "Loading in uscita",
                "description": "Tabella in uscita dei loading per fetta (o delle serie delle componenti per fetta con 'spatial_reduction'). Prodotta sempre; memorizzata in memoria quando non è indicato alcun percorso."
              },
              "output_eigenvalues": {
                "label": "Autovalori in uscita",
                "description": "Tabella in uscita degli autovalori e della varianza spiegata da ciascuno. Prodotta sempre; memorizzata in memoria quando non è indicato alcun percorso."
              },
              "mode": {
                "label": "Modalità",
                "description": "'dimension_reduction' (default; le componenti sono pattern spaziali) o 'spatial_reduction' (le componenti sono serie lungo la dimensione)."
              },
              "dimension": {
                "label": "Dimensione",
                "description": "Nome della dimensione, usato solo nel rapporto (default 'slice')."
              },
              "dimension_values": {
                "label": "Valori della dimensione",
                "description": "Coordinata di ciascuna fetta separata da virgole, strettamente crescente. Per impostazione predefinita l'indice della fetta in base 1."
              },
              "number_of_pc": {
                "label": "Numero di componenti principali",
                "description": "Quante componenti mantenere (default: tutte le fette)."
              },
              "correlation": {
                "label": "Correlazione",
                "description": "Decompone la matrice di correlazione anziché quella di covarianza (default false). Da usare quando le fette sono su scale diverse."
              }
            }
          },
          "multidimensional_raster_correlation": {
            "name": "Correlazione tra raster multidimensionali",
            "description": "Correla due cubi raster cella per cella lungo la loro dimensione condivisa, producendo una mappa di coefficienti di Pearson, Spearman o Kendall e — in modalità correlazione incrociata — il lag al quale l'associazione di ogni cella raggiunge il picco (ArcGIS Multidimensional Raster Correlation). Nulla in nessuno dei due registri lo mappa: image_correlation riduce una coppia di immagini a un solo scalare, time_series_cross_correlation del round 17 è solo vettoriale, attribute_correlation è un'operazione su tabella e bivariate_spatial_association confronta due raster a banda singola senza asse temporale.",
            "params": {
              "input1": {
                "label": "Ingresso 1",
                "description": "Primo cubo: un unico raster multibanda (ogni banda è una fetta) oppure un elenco separato da virgole di raster co-registrati."
              },
              "input2": {
                "label": "Ingresso 2",
                "description": "Secondo cubo, co-registrato con il primo e con lo stesso numero di fette."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster di correlazione in uscita in [-1, 1]. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_lag": {
                "label": "Lag in uscita",
                "description": "Raster in uscita del lag migliore per ciascuna cella (modalità di correlazione incrociata); altrimenti il lag fisso ovunque. Prodotto sempre; memorizzato in memoria quando non è indicato alcun percorso."
              },
              "output_count": {
                "label": "Conteggio in uscita",
                "description": "Raster in uscita del numero di campioni appaiati alla base di ciascun coefficiente. Prodotto sempre; memorizzato in memoria quando non è indicato alcun percorso."
              },
              "method": {
                "label": "Metodo",
                "description": "'pearson' (default), 'spearman' o 'kendall'."
              },
              "lag": {
                "label": "Lag",
                "description": "Numero fisso di fette di cui traslare in avanti il secondo cubo prima dell'appaiamento (default 0). Ignorato in modalità di correlazione incrociata."
              },
              "cross_correlation": {
                "label": "Correlazione incrociata",
                "description": "Cerca ogni lag in -max_lag..=max_lag e mantiene il coefficiente più forte (default false)."
              },
              "max_lag": {
                "label": "Lag massimo",
                "description": "Semiampiezza della ricerca dei lag in fette (default 3). Solo per la modalità di correlazione incrociata."
              },
              "use_absolute": {
                "label": "Usa il valore assoluto",
                "description": "In modalità di correlazione incrociata, ordina i lag per correlazione assoluta, così da far prevalere una forte associazione negativa (default true)."
              },
              "min_valid": {
                "label": "Minimo validi",
                "description": "Numero minimo di campioni appaiati prima che venga scritto un coefficiente (default 3)."
              }
            }
          },
          "multilook": {
            "name": "Multilook",
            "description": "Riduce lo speckle SAR mediando in modo incoerente i look adiacenti in range e azimut, producendo immagini di intensità a pixel quadrati (ArcGIS Multilook). Nessuno dei due registri include alcuno strumento SAR; la famiglia lee_filter inclusa opera su intensità già rilevata, quindi questo fornisce il passo a monte che trasforma i dati complessi a singolo look nelle immagini rilevate che quei filtri si aspettano. L'ingresso complesso è letto come una coppia I/Q a due bande; il rilevamento avviene prima della media, e il numero equivalente di look è riportato per il filtraggio speckle a valle.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster SAR in ingresso: una coppia I/Q a due bande per dati complessi (SLC), oppure una singola banda di dati già rilevati (vedere 'input_domain')."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "input_domain": {
                "label": "Dominio in ingresso",
                "description": "Per un ingresso non complesso, cosa contiene già la banda 1: 'intensity' (default) o 'amplitude'. L'ampiezza viene elevata al quadrato per ottenere l'intensità prima della media, poiché la media incoerente è corretta solo nel dominio dell'intensità."
              },
              "complex": {
                "label": "Complesso",
                "description": "Tratta l'ingresso come una coppia I/Q complessa (default: true quando il raster ha 2 o più bande, false altrimenti)."
              },
              "range_looks": {
                "label": "Look in range",
                "description": "Numero di look in range (x). Default 1, oppure derivato quando è impostato auto_looks."
              },
              "azimuth_looks": {
                "label": "Look in azimut",
                "description": "Numero di look in azimut (y). Default 1, oppure derivato quando è impostato auto_looks."
              },
              "auto_looks": {
                "label": "Look automatici",
                "description": "Se true (default) e i look non sono indicati esplicitamente, li deriva dal rapporto tra le spaziature dei pixel in modo che i pixel al suolo in uscita siano approssimativamente quadrati."
              },
              "output_units": {
                "label": "Unità di uscita",
                "description": "amplitude, intensity (default) o db."
              },
              "statistic": {
                "label": "Statistica",
                "description": "mean (default) o median; la mediana è più robusta dove i diffusori forti dominano una finestra di look."
              }
            }
          },
          "multipatch_footprint": {
            "name": "Ingombro del multipatch",
            "description": "Proietta le geometrie multipatch 3D sul piano XY e le dissolve in poligoni di impronta 2D, uno per geometria o per campo di raggruppamento (ArcGIS Multipatch Footprint). layer_footprint_vector restituisce un unico rettangolo di estensione per l'intero layer, non contorni per geometria, quindi al momento non c'è modo di alimentare buffer_3d / voxel_isosurface / solidi di edifici importati nella pipeline regularize_building_footprints.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie multipatch 3D (MultiPolygon a maglia triangolare con Z)."
              },
              "output": {
                "label": "Uscita",
                "description": "Impronte poligonali 2D in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "group_field": {
                "label": "Campo di raggruppamento",
                "description": "Campo opzionale i cui valori dissolvono insieme le impronte (un poligono in uscita per ogni valore distinto). Default: un'uscita per ciascuna geometria in ingresso."
              },
              "simplify_tolerance": {
                "label": "Tolleranza di semplificazione",
                "description": "Tolleranza di Douglas-Peucker opzionale (unità del CRS) applicata all'impronta dissolta. Omessa per impostazione predefinita, così il contorno grezzo viene preservato per regularize_building_footprints."
              }
            }
          },
          "multipatch_to_mesh": {
            "name": "Da multipatch a mesh",
            "description": "Esporta geometrie multipatch e solidi 3D in OBJ o glTF 2.0 / GLB per qualsiasi visualizzatore 3D o web (ArcGIS Multipatch To Collada). La suite union_3d / difference_3d / enclose_multipatch / voxel_isosurface non aveva alcun percorso di esportazione — nessun formato mesh esisteva nel registro — quindi i risultati 3D potevano essere riletti solo da questo catalogo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer multipatch / poligonale 3D."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del file .glb, .gltf o .obj in uscita. L'estensione seleziona il formato a meno che non sia indicato 'format'."
              },
              "format": {
                "label": "Formato",
                "description": "'glb' (default per .glb), 'gltf' (JSON con un buffer base64 incorporato) o 'obj'. Dedotto dall'estensione dell'uscita."
              },
              "origin": {
                "label": "Origine",
                "description": "Traslazione dell'origine locale: 'centroid' (default), 'min_corner' o 'none'. Necessaria per la precisione — le posizioni glTF sono numeri in virgola mobile a 32 bit."
              },
              "y_up": {
                "label": "Y verso l'alto",
                "description": "Passa alla convenzione Y verso l'alto di glTF partendo da quella geospaziale Z verso l'alto (default true per glTF/GLB, false per OBJ)."
              },
              "name_field": {
                "label": "Campo nome",
                "description": "Attributo che denomina la maglia di ciascuna geometria nell'uscita."
              }
            }
          },
          "multiple_ring_buffer": {
            "name": "Buffer ad anelli multipli",
            "description": "Crea buffer delle geometrie a un elenco di distanze in fasce concentriche — dischi annidati o anelli non sovrapposti — opzionalmente dissolti per distanza, con la distanza della fascia memorizzata come attributo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (punti, linee o poligoni), formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "distances": {
                "label": "Distanze",
                "description": "Elenco separato da virgole delle distanze di buffer nelle unità del CRS, ad esempio \"100,250,500\". Ordinato in modo crescente; i duplicati e i valori non positivi vengono scartati."
              },
              "ring_type": {
                "label": "Tipo di anello",
                "description": "'rings' (default) per bande a ciambella non sovrapposte, oppure 'disks' per buffer cumulativi annidati."
              },
              "dissolve": {
                "label": "Dissolvi",
                "description": "'none' (default) mantiene una banda per ciascuna geometria di origine; 'per_ring' unisce in un unico poligono le bande di tutte le geometrie a ciascuna distanza."
              },
              "distance_field": {
                "label": "Campo distanza",
                "description": "Nome dell'attributo in uscita che contiene la distanza di ciascuna banda. Default 'distance'."
              }
            }
          },
          "multitemporal_coherence": {
            "name": "Coerenza multitemporale",
            "description": "Calcola la coerenza interferometrica attraverso una pila di acquisizioni SAR co-registrate e la riduce a media/minimo/massimo/deviazione standard e pendenza di decorrelazione temporale, emettendo opzionalmente il cubo di coerenza per coppia (ArcGIS Generate Multitemporal Coherence). sar_coherence gestisce esattamente due scene, quindi la selezione di scatteratori persistenti e la temporizzazione dei cambiamenti di coerenza erano fuori portata.",
            "params": {
              "inputs": {
                "label": "Ingressi",
                "description": "Raster SLC complessi co-registrati separati da virgole o punti e virgola (due bande ciascuno: prima I, poi Q). Almeno due."
              },
              "dates": {
                "label": "Date",
                "description": "Tempi di acquisizione opzionali, uno per ciascun ingresso, come numeri in unità coerenti (ad esempio giorni). Richiesti dalla statistica 'decorrelation_slope'."
              },
              "pairs": {
                "label": "Coppie",
                "description": "'consecutive' (default, i con i+1), 'all' (ogni coppia non ordinata) o 'reference' (ogni scena rispetto a reference_index)."
              },
              "reference_index": {
                "label": "Indice di riferimento",
                "description": "Indice in base 0 della scena di riferimento per pairs='reference' (default 0)."
              },
              "window_size": {
                "label": "Dimensione della finestra",
                "description": "Finestra di stima in celle; un singolo valore oppure 'range,azimuth' (default 5). I valori pari vengono arrotondati per eccesso al dispari."
              },
              "bias_correction": {
                "label": "Correzione del bias",
                "description": "Applica la correzione della distorsione di coerenza per piccoli campioni (default true)."
              },
              "statistics": {
                "label": "Statistiche",
                "description": "Separate da virgole: 'mean' (default), 'min', 'max', 'std', 'decorrelation_slope'. Una banda in uscita per ciascuna statistica, in questo ordine."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster in uscita, una banda per ciascuna statistica richiesta. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_pairs": {
                "label": "Coppie in uscita",
                "description": "Raster opzionale che riceve il cubo di coerenza per coppia, una banda per coppia."
              }
            }
          },
          "multivariate_clustering": {
            "name": "Clustering multivariato",
            "description": "Raggruppa le geometrie vettoriali per similarità dei loro valori di attributo standardizzati (k-means o k-medoids con seme), scegliendo automaticamente il numero di cluster tramite lo pseudo-F di Calinski-Harabasz quando non indicato, come ArcGIS Multivariate Clustering.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "fields": {
                "label": "Campi",
                "description": "Campi numerici di analisi separati da virgole (lo spazio degli attributi su cui effettuare il clustering)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (una copia dell'ingresso con cluster_id/silhouette). Se omesso, il risultato è memorizzato in memoria."
              },
              "num_clusters": {
                "label": "Numero di cluster",
                "description": "Numero di cluster k. Omettere o passare 0 per valutare automaticamente k = 2..15 con la pseudo-F di Calinski-Harabasz."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di clustering: 'kmeans' (default) o 'kmedoids' (PAM; adatto a un numero minore di geometrie)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme casuale per l'inizializzazione deterministica k-means++ / dei medoidi (default 1)."
              }
            }
          },
          "near_3d": {
            "name": "Prossimità 3D",
            "description": "Trova la geometria più vicina in vera distanza 3D, riportando distanza, posizione più vicina, angoli e delta per asse, come ArcGIS Near 3D.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer di geometrie in ingresso (vertici 3D; una Z mancante è trattata come 0)."
              },
              "near_features": {
                "label": "Geometrie vicine",
                "description": "Elenco separato da virgole dei layer in cui effettuare la ricerca. Omettere per effettuare un self-join sul layer in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Considera solo le geometrie di prossimità entro questa distanza 3D (unità mappa). Illimitata se omessa."
              },
              "location": {
                "label": "Posizione",
                "description": "Aggiunge le coordinate del punto più vicino come near_x / near_y / near_z (default false)."
              },
              "angle": {
                "label": "Angolo",
                "description": "Aggiunge la direzione orizzontale (near_bearing, gradi da nord) e l'angolo verticale (near_vert_angle, gradi rispetto all'orizzontale) verso il punto più vicino (default false)."
              },
              "delta": {
                "label": "Delta",
                "description": "Aggiunge gli scarti per asse near_dx / near_dy / near_dz (default false)."
              }
            }
          },
          "neighborhood_summary_statistics": {
            "name": "Statistiche riassuntive di vicinato",
            "description": "Per ogni geometria, riassume i campi numerici scelti sui suoi vicini (k più vicini, entro una distanza o contiguità per bordo condiviso), aggiungendo <field>_nbr_mean/median/std/min/max/sum e un conteggio dei vicini, come ArcGIS Neighborhood Summary Statistics.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (punti, linee o poligoni)."
              },
              "fields": {
                "label": "Campi",
                "description": "Campi numerici separati da virgole da riepilogare sui vicini."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (copia dell'ingresso + colonne delle statistiche dei vicini). Se omesso, il risultato è memorizzato in memoria."
              },
              "neighborhood": {
                "label": "Intorno",
                "description": "'knn' (default), 'distance_band' o 'contiguity' (poligoni che condividono un lato)."
              },
              "neighbors": {
                "label": "Vicini",
                "description": "k per knn (default 8)."
              },
              "distance": {
                "label": "Distanza",
                "description": "Distanza della banda per distance_band (unità mappa)."
              },
              "weights": {
                "label": "Pesi",
                "description": "'uniform' (default) o 'inverse_distance' (pondera la media e la deviazione standard)."
              }
            }
          },
          "non_maximum_suppression": {
            "name": "Soppressione dei non massimi",
            "description": "Mantiene il rilevamento a confidenza più alta in ogni cluster di sovrapposizione e scarta i poligoni con punteggio inferiore la cui intersezione-su-unione supera una soglia (come ArcGIS Non Maximum Suppression) — il deduplicatore basato sul punteggio per le uscite di rilevamento di oggetti/OBIA che count_overlapping_features (conta, mantiene tutto), resolve_building_conflicts (sposta) e find_identical (solo esatti) non forniscono.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Rilevamenti poligonali in ingresso (possono sovrapporsi)."
              },
              "confidence_score_field": {
                "label": "Campo punteggio di confidenza",
                "description": "Campo numerico che contiene la confidenza/il punteggio di ciascun rilevamento; prevale il valore più alto."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso dei poligoni in uscita con i rilevamenti sopravvissuti. Se omesso, il risultato è memorizzato in memoria."
              },
              "max_overlap_ratio": {
                "label": "Rapporto massimo di sovrapposizione",
                "description": "IoU al di sopra del quale un rilevamento con punteggio inferiore viene soppresso (0-1, default 0.5)."
              },
              "class_value_field": {
                "label": "Campo valore della classe",
                "description": "Campo opzionale; solo i rilevamenti della stessa classe si sopprimono a vicenda."
              }
            }
          },
          "observer_points": {
            "name": "Punti di osservazione",
            "description": "Identifica quali tra un massimo di 32 osservatori possono vedere ogni cella, come maschera di bit per osservatore, e scrive il raster di altezza sopra il suolo che indica di quanto un obiettivo dovrebbe essere innalzato per diventare visibile (ArcGIS Observer Points / Viewshed 2 in modalità OBSERVERS). viewshed incluso restituisce solo un conteggio di stazioni visibili, da cui nessuna delle due risposte può essere ricavata: un conteggio di 1 non dice quale torre copre una particella, e un conteggio di 0 non distingue due metri di scarto da dietro una montagna.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster di quota in ingresso (DEM o DSM)."
              },
              "observers": {
                "label": "Osservatori",
                "description": "Layer puntuale delle posizioni degli osservatori, al massimo 32."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster di visibilità in uscita: una maschera di bit degli osservatori, oppure un conteggio con analysis_type 'frequency'. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_agl": {
                "label": "AGL in uscita",
                "description": "Raster in uscita dell'altezza sul livello del suolo: l'altezza a cui va sollevata una destinazione perché diventi visibile. Prodotto sempre; memorizzato in memoria quando non è indicato alcun percorso."
              },
              "output_table": {
                "label": "Tabella in uscita",
                "description": "Tabella in uscita con una riga per ciascun osservatore e le celle e l'area che esso vede. Prodotta sempre; memorizzata in memoria quando non è indicato alcun percorso."
              },
              "analysis_type": {
                "label": "Tipo di analisi",
                "description": "'observers' (default; una maschera di bit) o 'frequency' (un conteggio, come nel viewshed incluso)."
              },
              "observer_offset": {
                "label": "Offset dell'osservatore",
                "description": "Altezza di ciascun osservatore sopra la superficie, nelle unità z (default 2.0)."
              },
              "observer_offset_field": {
                "label": "Campo offset dell'osservatore",
                "description": "Attributo che contiene un'altezza per ciascun osservatore, che prevale su 'observer_offset'."
              },
              "target_offset": {
                "label": "Offset dell'obiettivo",
                "description": "Altezza della destinazione sopra la superficie, nelle unità z (default 0.0)."
              },
              "max_distance": {
                "label": "Distanza massima",
                "description": "Ignora le celle più distanti di questo valore da un osservatore, in unità mappa. Illimitata per impostazione predefinita."
              },
              "curvature": {
                "label": "Curvatura",
                "description": "Applica la correzione per la curvatura terrestre e la rifrazione (default false, ovvero terra piatta)."
              },
              "refractivity_coefficient": {
                "label": "Coefficiente di rifrazione",
                "description": "Coefficiente di rifrazione atmosferica usato con 'curvature' (default 0.13)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 del raster di quota (default 1)."
              }
            }
          },
          "optics_clustering": {
            "name": "Clustering OPTICS",
            "description": "Clustering multiscala basato sulla densità tramite OPTICS (come l'opzione OPTICS di ArcGIS Density-based Clustering): costruisce un ordinamento di raggiungibilità ed estrae cluster di densità variabile con il metodo ξ-steep — il membro multiscala del trio DBSCAN/HDBSCAN/OPTICS che dbscan e hdbscan non coprono.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso (CRS proiettato; distanze nelle sue unità)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (una copia dell'ingresso con i campi dei cluster). Se omesso, il risultato è memorizzato in memoria."
              },
              "min_features_cluster": {
                "label": "Geometrie minime per cluster",
                "description": "Numero minimo di punti per la stima della densità tramite distanza di nucleo e per il cluster più piccolo (>= 2). Default 5."
              },
              "search_distance": {
                "label": "Distanza di ricerca",
                "description": "Distanza di raggiungibilità massima opzionale (epsilon massimo). Default: illimitata (tutte le scale)."
              },
              "cluster_sensitivity": {
                "label": "Sensibilità del clustering",
                "description": "0-100; valori più alti rilevano cluster più numerosi/più compatti. Corrisponde a xi = 1 - sensitivity/100. Default 95 (xi = 0.05)."
              }
            }
          },
          "optimal_corridor_connections": {
            "name": "Connessioni ottimali di corridoio",
            "description": "Calcola la rete di poligoni di corridoio a costo minimo e larghezza fissa che connette in modo ottimale ogni regione in ingresso attraverso una superficie di costo, più le linee centrali dei corridoi. A differenza di cost_connectivity (linee a larghezza zero) o corridor (superficie di costo per una singola coppia), questo emette poligoni di corridoio pronti all'uso per l'intera rete di regioni. Come ArcGIS Optimal Corridor Connections.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie poligonali delle regioni da collegare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso dei poligoni del corridoio in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "cost_raster": {
                "label": "Raster dei costi",
                "description": "Superficie di costo opzionale. In sua assenza, il costo è uniforme (euclideo)."
              },
              "barriers": {
                "label": "Barriere",
                "description": "Geometrie poligonali opzionali considerate impraticabili."
              },
              "corridor_width": {
                "label": "Larghezza del corridoio",
                "description": "Larghezza del corridoio in unità mappa (default: 10 celle)."
              },
              "output_lines": {
                "label": "Linee in uscita",
                "description": "Percorso opzionale per le linee centrali del corridoio."
              },
              "neighbor_option": {
                "label": "Opzione di vicinato",
                "description": "'spanning_tree' (default) mantiene solo i corridoi necessari a collegare tutte le regioni; 'all_pairs' produce un corridoio per ogni coppia di regioni."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di analisi quando non è fornito alcun raster di costo (default: estensione delle regioni / 200)."
              }
            }
          },
          "optimal_interpolation": {
            "name": "Interpolazione ottimale",
            "description": "Corregge un campo raster di sfondo con osservazioni puntuali tramite il passo di analisi dell'interpolazione ottimale / assimilazione dei dati x_a = x_b + B Hᵀ (H B Hᵀ + R)⁻¹ (y − H x_b), usando una correlazione spaziale gaussiana della lunghezza di correlazione data e varianze dell'errore per osservazione/sfondo (come Optimal Interpolation di ArcGIS). A differenza di IDW/kriging/EBK, che interpolano solo dai punti, questo fonde un campo a griglia a priori con le osservazioni e può emettere un raster di varianza dell'errore di analisi.",
            "params": {
              "background": {
                "label": "Sfondo",
                "description": "Campo raster di sfondo (a priori) da correggere."
              },
              "observations": {
                "label": "Osservazioni",
                "description": "Layer puntuale delle osservazioni."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numerico del layer delle osservazioni che contiene il valore osservato."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster corretto (di analisi) in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "correlation_length": {
                "label": "Lunghezza di correlazione",
                "description": "Lunghezza di correlazione spaziale L nelle unità del CRS (gaussiana). Default: il 5% del lato maggiore dello sfondo."
              },
              "background_error_variance": {
                "label": "Varianza dell'errore di sfondo",
                "description": "Varianza dell'errore di sfondo σ_b² (default 1.0). Valori maggiori => maggiore fiducia nelle osservazioni."
              },
              "obs_error_variance": {
                "label": "Varianza dell'errore delle osservazioni",
                "description": "Varianza dell'errore di osservazione σ_o² (default 1.0), usata quando non è indicato alcun campo di errore per punto. Valori maggiori => maggiore fiducia nello sfondo."
              },
              "error_field": {
                "label": "Campo errore",
                "description": "Campo opzionale del layer delle osservazioni che indica la varianza dell'errore di ciascun punto (prevale su obs_error_variance dove presente e > 0)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 dello sfondo da correggere (default 1)."
              },
              "max_obs": {
                "label": "Osservazioni massime",
                "description": "Numero massimo di osservazioni più vicine usate nella risoluzione locale di ciascuna cella (default 50, intervallo 1..=200)."
              },
              "analysis_error": {
                "label": "Errore di analisi",
                "description": "Raster opzionale in uscita della varianza dell'errore di analisi σ_a² (≤ σ_b²)."
              }
            }
          },
          "optimal_path_as_line": {
            "name": "Percorso ottimale come linea",
            "description": "Traccia un raster di collegamento a ritroso dei costi da ogni destinazione alla sua sorgente ed emette i percorsi a costo minimo come polilinee (ArcGIS Optimal Path As Line / Cost Path As Polyline). cost_pathway marca il percorso solo come celle raster e cost_connectivity copre solo il caso della rete a N siti, quindi il normale percorso da sorgente a destinazione non aveva forma vettoriale.",
            "params": {
              "destination": {
                "label": "Destinazione",
                "description": "Destinazioni da cui tracciare: un raster (qualsiasi cella diversa da zero e non no-data) o un layer vettoriale puntuale/multipunto."
              },
              "backlink": {
                "label": "Collegamento a ritroso",
                "description": "Raster delle direzioni di backlink prodotto da cost_back_link (0 = sorgente, 1-8 = direzione verso la sorgente, 1 = est in senso antiorario)."
              },
              "accumulation": {
                "label": "Accumulo",
                "description": "Raster opzionale del costo accumulato (out_distance di cost_back_link). Fornisce il costo totale di ciascun percorso ed è richiesto da path_type 'each_zone' e 'best_single'."
              },
              "path_type": {
                "label": "Tipo di percorso",
                "description": "Uno tra 'each_cell' (default, un percorso per ciascuna cella di destinazione), 'each_zone' (un percorso per ciascuna zona di destinazione, a partire dalla sua cella più economica), 'best_single' (l'unico percorso più economico)."
              },
              "zone_field": {
                "label": "Campo zona",
                "description": "Attributo che contiene l'ID di zona per una destinazione vettoriale con path_type 'each_zone'. Le destinazioni raster usano il valore della cella come zona."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer polilineare in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "optimized_hot_spot_analysis": {
            "name": "Analisi ottimizzata degli hotspot",
            "description": "Aggrega automaticamente gli incidenti, seleziona automaticamente la banda di distanza di analisi, esegue Getis-Ord Gi* e riporta una classe di hotspot/coldspot corretta FDR (come ArcGIS Optimized Hot Spot Analysis) — il wrapper di flusso di lavoro che manca a getis_ord_gi_star incluso, grezzo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer di geometrie in ingresso (punti di incidente, o geometrie con un campo di analisi)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer puntuale in uscita con i risultati Gi*. Se omesso, il risultato è memorizzato in memoria."
              },
              "analysis_field": {
                "label": "Campo di analisi",
                "description": "Campo numerico da analizzare (ponderato, senza aggregazione). Omettere per contare gli incidenti."
              },
              "aggregation": {
                "label": "Aggregazione",
                "description": "Aggregazione degli incidenti quando manca analysis_field: 'fishnet' (conteggio su griglia; default) o 'snap' (unisce i coincidenti)."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di aggregazione/di aggancio nelle unità del CRS. Default: lato maggiore dell'estensione / 30."
              },
              "distance_band": {
                "label": "Banda di distanza",
                "description": "Banda di distanza di analisi nelle unità del CRS. Default: selezionata automaticamente in base al picco di intensità del raggruppamento."
              }
            }
          },
          "optimized_outlier_analysis": {
            "name": "Analisi ottimizzata dei valori anomali",
            "description": "Aggrega automaticamente gli incidenti, seleziona automaticamente la banda di distanza di analisi, esegue l'I di Moran locale di Anselin e riporta i tipi di cluster/valore anomalo corretti FDR (HH/LL/HL/LH) — come ArcGIS Optimized Outlier Analysis; il wrapper non temporale dell'I di Moran locale che local_morans_i_lisa incluso, grezzo, e local_outlier_analysis spazio-temporale non forniscono.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer di geometrie in ingresso (punti di incidente, o geometrie con un campo di analisi)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer puntuale in uscita con i risultati dell'I di Moran locale. Se omesso, il risultato è memorizzato in memoria."
              },
              "analysis_field": {
                "label": "Campo di analisi",
                "description": "Campo numerico da analizzare (ponderato, senza aggregazione). Omettere per contare gli incidenti."
              },
              "aggregation": {
                "label": "Aggregazione",
                "description": "Aggregazione degli incidenti quando manca analysis_field: 'fishnet' (conteggio su griglia; default) o 'snap' (unisce i coincidenti)."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella di aggregazione/di aggancio nelle unità del CRS. Default: lato maggiore dell'estensione / 30."
              },
              "distance_band": {
                "label": "Banda di distanza",
                "description": "Banda di distanza di analisi nelle unità del CRS. Default: selezionata automaticamente in base al picco di intensità del raggruppamento."
              },
              "fdr_alpha": {
                "label": "Alpha FDR",
                "description": "Livello del False Discovery Rate per la significatività del COType (default 0.05)."
              }
            }
          },
          "ordinary_cokriging": {
            "name": "Interpolazione con cokriging ordinario",
            "description": "Esegue un'interpolazione spaziale multivariata usando variabili ausiliarie per migliorare le predizioni della variabile primaria. Ideale quando i dati primari sono scarsi ma i dati secondari correlati sono abbondanti.",
            "params": {
              "primary_points": {
                "label": "Punti primari",
                "description": "Layer vettoriale con i punti di addestramento della variabile primaria"
              },
              "primary_field": {
                "label": "Campo primario",
                "description": "Campo che contiene i valori della variabile primaria"
              },
              "auxiliary_inputs": {
                "label": "Ingressi ausiliari",
                "description": "Elenco separato da virgole dei percorsi dei file delle variabili ausiliarie"
              },
              "auxiliary_fields": {
                "label": "Campi ausiliari",
                "description": "Nomi dei campi separati da virgole per le variabili ausiliarie (vuoto per i raster)"
              },
              "template_raster": {
                "label": "Raster modello",
                "description": "Modello raster che definisce la griglia e il CRS in uscita"
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster kriged in uscita"
              },
              "output_variance": {
                "label": "Varianza in uscita",
                "description": "Percorso opzionale del raster della varianza di kriging in uscita"
              },
              "neighborhood_size": {
                "label": "Dimensione dell'intorno",
                "description": "Numero di vicini più prossimi per il cokriging locale (default: tutti)"
              }
            }
          },
          "pairwise_comparison_weights": {
            "name": "Pesi da confronto a coppie",
            "description": "Deriva i pesi dei criteri da una matrice di confronto a coppie AHP (scala di Saaty 1-9) come autovettore principale normalizzato, con una verifica di coerenza (lambda_max, indice di coerenza, rapporto di coerenza) — come ArcGIS Assign Weights By Pairwise Comparison.",
            "params": {
              "matrix": {
                "label": "Matrice",
                "description": "La matrice di confronto reciproca n x n come array JSON bidimensionale, ad esempio [[1,3,5],[0.333,1,2],[0.2,0.5,1]]. Fornire questo oppure `input`."
              },
              "input": {
                "label": "Ingresso",
                "description": "File CSV che contiene la matrice di confronto (righe puramente numeriche, oppure etichettate con una riga di intestazione e una colonna iniziale di nomi). Fornire questo oppure `matrix`."
              },
              "criteria": {
                "label": "Criteri",
                "description": "Nomi dei criteri separati da virgole (devono corrispondere all'ordine della matrice). Prevalgono sulle etichette del CSV; per impostazione predefinita C1..Cn."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso della tabella in uscita — un CSV (estensione .csv) o una tabella vettoriale senza geometria (criterio, peso, rango). Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "path_distance": {
            "name": "Distanza di percorso",
            "description": "Distanza di costo minimo accumulata in cui ogni passo paga la vera distanza 3D sulla superficie (da un DEM) per un fattore verticale dipendente dalla pendenza (escursionismo di Tobler, lineare, binario) per l'attrito, come ArcGIS Path Distance.",
            "params": {
              "source": {
                "label": "Sorgente",
                "description": "Raster delle sorgenti; le celle con valori positivi e non nodata sono origini (costo accumulato 0)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster del costo accumulato in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "cost": {
                "label": "Costo",
                "description": "Raster opzionale di attrito/costo di attraversamento (default: uniforme pari a 1)."
              },
              "surface": {
                "label": "Superficie",
                "description": "Raster di quota (DEM) opzionale; abilita la distanza 3D sulla superficie e i fattori verticali basati sulla pendenza."
              },
              "vertical_factor": {
                "label": "Fattore verticale",
                "description": "'tobler' (default), 'linear', 'sym_linear', 'inverse_linear' o 'binary'."
              },
              "slope_factor": {
                "label": "Fattore di pendenza",
                "description": "Coefficiente di penalità della pendenza per i fattori lineari (default 1)."
              },
              "zero_factor": {
                "label": "Fattore zero",
                "description": "Valore minimo del fattore verticale (in discesa) per linear/inverse_linear (default 0.1)."
              },
              "max_slope": {
                "label": "Pendenza massima",
                "description": "Per 'binary': le pendenze più ripide di questo numero di gradi sono impraticabili (default 30)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 per tutti i raster (default 1)."
              }
            }
          },
          "percentile_contours": {
            "name": "Isoipse per percentili",
            "description": "Emette poligoni annidati che racchiudono le celle più estreme di una superficie, con soglia per percentile di valore o per percentile di massa cumulata (volume).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster di superficie continua in ingresso (densità, idoneità, quota)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale poligonale in uscita (driver dedotto dalla sua estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "percentiles": {
                "label": "Percentili",
                "description": "Percentili separati da virgole in [0,100] (ad esempio \"50,90,95\"). Default \"90\"."
              },
              "mode": {
                "label": "Modalità",
                "description": "'value' (default): le celle con valore pari o superiore al p-esimo percentile. 'volume': le celle più alte che portano il (100-p)% superiore del valore cumulato."
              },
              "ignore_negative": {
                "label": "Ignora i negativi",
                "description": "Esclude i valori negativi delle celle dall'ordinamento e dall'uscita. Default false."
              },
              "smooth": {
                "label": "Liscia",
                "description": "Semplifica i poligoni sui bordi delle celle con Douglas-Peucker (tolleranza di circa 1,5 celle) per attenuare l'effetto a scalini. Default false."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da leggere, in base 1 (default 1)."
              }
            }
          },
          "pivot_table": {
            "name": "Tabella pivot",
            "description": "Rimodella una tabella degli attributi in formato lungo in formato largo: una riga di uscita per ogni combinazione unica dei campi identità e una colonna per ogni valore distinto del campo pivot, riempita dal campo valore. Come ArcGIS Pivot Table.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale o tabella degli attributi in ingresso in forma lunga."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso della tabella in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "fields": {
                "label": "Campi",
                "description": "Nome o nomi dei campi separati da virgole o punti e virgola che identificano una riga in uscita; vengono trasferiti immutati."
              },
              "pivot_field": {
                "label": "Campo pivot",
                "description": "Campo i cui valori distinti diventano nuove colonne."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo che fornisce i valori delle celle."
              },
              "aggregate": {
                "label": "Aggrega",
                "description": "Applicato quando una cella riga/colonna ha più record di origine: 'first' (default), 'sum', 'mean', 'min', 'max', 'count'."
              }
            }
          },
          "pmtiles_extract": {
            "name": "Estrai PMTiles",
            "description": "Estrae un sottoinsieme per riquadro di delimitazione/zoom di un archivio PMTiles in un nuovo archivio (ad es. una mappa di base offline da una build planetaria Protomaps).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file .pmtiles in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del file .pmtiles in uscita."
              },
              "bbox": {
                "label": "Riquadro di delimitazione",
                "description": "Riquadro di delimitazione WGS84 nella forma 'min_lon,min_lat,max_lon,max_lat'."
              },
              "min_zoom": {
                "label": "Zoom minimo",
                "description": "Livello di zoom più basso da includere (default 0, così la mappa resta utilizzabile a scale ridotte)."
              },
              "max_zoom": {
                "label": "Zoom massimo",
                "description": "Livello di zoom più alto da includere (default: lo zoom massimo dell'archivio di origine)."
              },
              "max_tiles": {
                "label": "Tessere massime",
                "description": "Interrompe se la selezione riguarda più tessere di questo valore (default 2000000)."
              },
              "url": {
                "label": "URL",
                "description": "URL PMTiles HTTP(S). Fornire url oppure input; le sorgenti HTTP usano richieste di intervalli di byte (l'host deve consentire le letture Range cross-origin)."
              },
              "bbox_crs": {
                "label": "CRS del riquadro di delimitazione",
                "description": "Codice EPSG delle coordinate del riquadro di delimitazione. Per impostazione predefinita 4326 (lon/lat WGS84); gli altri CRS vengono riproiettati in 4326."
              }
            }
          },
          "point_statistics": {
            "name": "Statistiche dei punti",
            "description": "Rasterizza una statistica a finestra mobile di un attributo di geometrie puntuali: per ogni cella in uscita, un intorno (cerchio o rettangolo) raccoglie i valori del campo numerico scelto dai punti al suo interno e li riduce a media/maggioranza/massimo/mediana/minimo/minoranza/intervallo/deviazione standard/somma/varietà. Come ArcGIS Point Statistics; completa line_density/heat_map, solo di densità, e neighborhood_summary_statistics, solo vettoriale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso (Point / MultiPoint)."
              },
              "field": {
                "label": "Campo",
                "description": "Campo attributo numerico da riepilogare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "statistic": {
                "label": "Statistica",
                "description": "Statistica per intorno: mean (default), majority, maximum, median, minimum, minority, range, std, sum o variety."
              },
              "neighborhood": {
                "label": "Intorno",
                "description": "Forma dell'intorno: 'circle' (default, usa 'radius') o 'rectangle' (un quadrato di lato 2*radius)."
              },
              "radius": {
                "label": "Raggio",
                "description": "Raggio dell'intorno / semilato del rettangolo (metri per un CRS geografico, unità del CRS altrimenti). Default: lato minore dell'estensione / 20."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita (stesse unità di radius). Default: radius / 5."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Sostituisce il codice EPSG del CRS in ingresso (ad esempio quando il layer non è etichettato). Il valore 4326 attiva la proiezione in metri."
              }
            }
          },
          "points_to_line": {
            "name": "Da punti a linea",
            "description": "Costruisce geometrie polilineari dai punti: una linea per ogni valore distinto di line_field, vertici ordinati per sort_field, con un flag opzionale di chiusura della linea.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale puntuale in ingresso (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale lineare in uscita (driver dedotto dalla sua estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "line_field": {
                "label": "Campo linea",
                "description": "Attributo i cui valori distinti suddividono i punti in linee separate (una polilinea per valore). Se omesso, tutti i punti formano un'unica linea."
              },
              "sort_field": {
                "label": "Campo di ordinamento",
                "description": "Attributo che stabilisce l'ordine dei vertici all'interno di ciascuna linea. I valori numerici vengono ordinati numericamente, quelli testuali lessicograficamente. Se omesso, viene usato l'ordine delle geometrie in ingresso."
              },
              "close_line": {
                "label": "Chiudi la linea",
                "description": "Aggiunge il primo vertice alla fine di ciascuna linea, chiudendola in un anello. Default false."
              }
            }
          },
          "points_to_path": {
            "name": "Da punti a tracciato",
            "description": "Collega i punti in geometrie polilineari, ordinate per un campo e (opzionalmente) raggruppate in un percorso per valore, con ordinamento naturale e chiusura del percorso opzionali.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale puntuale in ingresso (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale lineare in uscita (driver dedotto dalla sua estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "order_field": {
                "label": "Campo ordine",
                "description": "Attributo che stabilisce l'ordine di connessione dei punti all'interno di ciascun percorso. I valori numerici vengono ordinati numericamente, quelli testuali lessicograficamente. Se omesso, viene usato l'ordine delle geometrie in ingresso."
              },
              "group_field": {
                "label": "Campo di raggruppamento",
                "description": "Attributo che suddivide i punti in percorsi separati (una linea per ogni valore distinto). Se omesso, tutti i punti formano un unico percorso."
              },
              "natural_sort": {
                "label": "Ordinamento naturale",
                "description": "Ordina i valori testuali in modo naturale, così che 'a9' venga prima di 'a10'. Default false."
              },
              "close_path": {
                "label": "Chiudi il percorso",
                "description": "Aggiunge il primo vertice alla fine di ciascun percorso, chiudendolo in un anello. Default false."
              }
            }
          },
          "polygon_neighbors": {
            "name": "Vicini di poligono",
            "description": "Costruisce una tabella di adiacenza (contiguità) dei poligoni: coppie vicine con la lunghezza del confine condiviso e un conteggio dei contatti puntuali, come ArcGIS Polygon Neighbors.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso della tabella in uscita — un CSV (estensione .csv) o una tabella vettoriale senza geometria. Se omesso, il risultato è memorizzato in memoria."
              },
              "id_field": {
                "label": "Campo ID",
                "description": "Campo che identifica ciascun poligono nella tabella. Default: l'indice della geometria."
              },
              "both_sides": {
                "label": "Entrambi i lati",
                "description": "Produce ogni coppia di vicini due volte (src→nbr e nbr→src). Default false (una sola volta per coppia)."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Quantizza i vertici su una griglia di questa dimensione (unità del CRS) prima di confrontare i bordi. Default 0 (coordinate esatte)."
              }
            }
          },
          "polygon_volume": {
            "name": "Volume del poligono",
            "description": "Volume e area 3D della superficie per poligono di un raster di superficie sopra/sotto l'altezza del piano di riferimento di ogni geometria, come ArcGIS Polygon Volume — la controparte zonale di surface_volume.",
            "params": {
              "surface": {
                "label": "Superficie",
                "description": "Raster della superficie di quota in ingresso."
              },
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale (zone)."
              },
              "height_field": {
                "label": "Campo altezza",
                "description": "Campo attributo che indica la quota del piano di riferimento di ciascun poligono."
              },
              "direction": {
                "label": "Direzione",
                "description": "Quale lato di ciascun piano integrare: 'above' (default), 'below' o 'both'."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 da leggere dalla superficie (default 1)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "porous_puff": {
            "name": "Pennacchio poroso",
            "description": "Avvezione-dispersione analitica di un rilascio istantaneo di contaminante attraverso le acque sotterranee (come ArcGIS Porous Puff): avanza il centro della nube da un punto di rilascio lungo un campo di velocità di Darcy (magnitudine+direzione, come prodotto da darcy_flow), quindi valuta la concentrazione gaussiana 2D in forma chiusa della nube in coordinate allineate al percorso, scalata per porosità, spessore, ritardo e decadimento del primo ordine.",
            "params": {
              "magnitude": {
                "label": "Magnitudine",
                "description": "Raster della magnitudine della velocità di Darcy, come prodotto dall'uscita 'output' di darcy_flow. La dimensione della cella e l'estensione sono ricavate da questo raster."
              },
              "direction": {
                "label": "Direzione",
                "description": "Raster della direzione di flusso di Darcy (azimut in gradi da nord, in senso orario, verso il gradiente discendente), come prodotto dall'uscita 'direction' di darcy_flow. Deve essere co-registrato con 'magnitude'."
              },
              "x": {
                "label": "X",
                "description": "Coordinata X del punto di rilascio (unità mappa, stesso CRS dei raster di velocità)."
              },
              "y": {
                "label": "Y",
                "description": "Coordinata Y del punto di rilascio (unità mappa)."
              },
              "mass": {
                "label": "Massa",
                "description": "Massa di contaminante rilasciata (deve essere positiva)."
              },
              "porosity": {
                "label": "Porosità",
                "description": "Porosità efficace: una costante numerica in (0, 1] oppure il percorso di un raster co-registrato con 'magnitude'."
              },
              "thickness": {
                "label": "Spessore",
                "description": "Spessore dell'acquifero: una costante numerica positiva oppure il percorso di un raster co-registrato con 'magnitude'."
              },
              "dispersivity_long": {
                "label": "Dispersività longitudinale",
                "description": "Dispersività longitudinale (unità di lunghezza; deve essere positiva)."
              },
              "dispersivity_trans": {
                "label": "Dispersività trasversale",
                "description": "Dispersività trasversale (unità di lunghezza; deve essere positiva)."
              },
              "retardation": {
                "label": "Ritardo",
                "description": "Fattore di ritardo (default 1, deve essere >= 1)."
              },
              "decay": {
                "label": "Decadimento",
                "description": "Costante di decadimento del primo ordine (default 0, deve essere >= 0; stesse unità di tempo di 'time')."
              },
              "time": {
                "label": "Ora",
                "description": "Elenco separato da virgole di uno o più tempi trascorsi positivi. L'ultimo tempo viene scritto in 'output'; tutti i tempi (compreso l'ultimo) sono riportati nell'uscita 'time_series'."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster delle concentrazioni in uscita per l'ultimo tempo indicato in 'time'. Se omesso, il risultato è memorizzato in memoria."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 da leggere dai raster di magnitudine/direzione (default 1)."
              },
              "step": {
                "label": "Passo",
                "description": "Lunghezza del passo di avanzamento del centro della nube nelle unità del CRS (default: la dimensione della cella del raster della magnitudine)."
              },
              "max_steps": {
                "label": "Passi massimi",
                "description": "Numero massimo di passi di avanzamento per ciascun tempo richiesto (default 1000)."
              }
            }
          },
          "predict_using_trend_raster": {
            "name": "Predici con raster di tendenza",
            "description": "Valuta i raster di pendenza/intercetta adattati da generate_trend_raster in uno o più istanti, producendo superfici predette, come ArcGIS Predict Using Trend Raster.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster della pendenza (trend) scritto da generate_trend_raster."
              },
              "intercept": {
                "label": "Intercetta",
                "description": "Raster dell'intercetta scritto da generate_trend_raster (la sua uscita 'intercept_output'), co-registrato con il raster della pendenza."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster in uscita per il primo tempo previsto. Se omesso, i risultati sono memorizzati in memoria."
              },
              "times": {
                "label": "Tempi",
                "description": "Tempi separati da virgole per cui effettuare la predizione, sulla stessa scala usata per l'adattamento (ad esempio '12,18,24'). Prevalgono su start/end/interval."
              },
              "start": {
                "label": "Inizio",
                "description": "Primo tempo di un intervallo generato (usato quando 'times' è assente)."
              },
              "end": {
                "label": "Fine",
                "description": "Ultimo tempo di un intervallo generato (incluso; usato quando 'times' è assente)."
              },
              "interval": {
                "label": "Intervallo",
                "description": "Passo tra i tempi generati (default 1; usato quando 'times' è assente)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 da leggere da ciascun raster di coefficienti (default 1)."
              }
            }
          },
          "presence_only_prediction": {
            "name": "Previsione con sole presenze",
            "description": "Modellazione dell'idoneità di specie/habitat in stile MaxEnt: adatta un modello logistico regolarizzato L1 che contrappone i punti di presenza a un campione di sfondo con seme di raster esplicativi (espansione di base lineare/quadratica/a cerniera), quindi predice una superficie di probabilità di presenza più un rapporto di importanza delle variabili — come ArcGIS Presence-only Prediction (MaxEnt).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale delle presenze in ingresso (occorrenze osservate)."
              },
              "explanatory": {
                "label": "Esplicative",
                "description": "Elenco separato da virgole dei percorsi dei raster esplicativi (la pila delle covariate). Campionati in corrispondenza delle presenze e delle posizioni di sfondo; il primo raster definisce la griglia in uscita."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster della probabilità di presenza in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "report": {
                "label": "Rapporto",
                "description": "Percorso di uscita opzionale per una tabella CSV dei coefficienti / dell'importanza delle variabili."
              },
              "features": {
                "label": "Caratteristiche",
                "description": "Classi di caratteristiche di espansione di base separate da virgole: una qualsiasi tra 'linear', 'quadratic', 'hinge'. Default 'linear,quadratic'."
              },
              "background": {
                "label": "Sfondo",
                "description": "Numero di campioni di sfondo estratti dalla pila raster. Default 1000 (limitato al numero di celle valide)."
              },
              "regularization": {
                "label": "Regolarizzazione",
                "description": "Intensità della regolarizzazione L1 (lasso) sulle caratteristiche standardizzate. Valori più alti = modello più semplice. Default 0.01."
              },
              "hinge_knots": {
                "label": "Nodi della cerniera",
                "description": "Numero di nodi interni per covariata per le caratteristiche hinge (usato solo quando 'hinge' è attivo). Default 10."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme casuale per il campione di sfondo deterministico (default 1)."
              }
            }
          },
          "propagate_displacement": {
            "name": "Propaga lo spostamento",
            "description": "Propaga lo spostamento introdotto da resolve_road_conflicts (o da qualsiasi layer di collegamenti di spostamento a due punti) sulle geometrie vicine interpolando i collegamenti sparsi in un campo IDW liscio: le geometrie rigide (edifici, particelle) ricevono una singola traslazione media, le linee flessibili una piegatura per vertice lisciata lungo l'arco, come ArcGIS Propagate Displacement.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso da correggere (qualsiasi tipo di geometria)."
              },
              "links": {
                "label": "Collegamenti",
                "description": "Collegamenti di spostamento: un layer lineare con 2 vertici per ciascun collegamento, primo vertice = posizione originale, ultimo vertice = posizione spostata (lo schema usato sia dall'uscita 'links' di resolve_road_conflicts sia dall'ingresso 'links' di rubbersheet_features)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "adjustment_style": {
                "label": "Stile di aggiustamento",
                "description": "'auto' (default: traslazione rigida per punti/poligoni, deformazione per vertice per le linee), 'preserve_orientation' (traslazione rigida secondo il campo mediato sull'impronta) o 'solid' (traslazione rigida secondo il campo campionato una sola volta nel punto rappresentativo della geometria)."
              },
              "search_distance": {
                "label": "Distanza di ricerca",
                "description": "Distanza massima (unità del CRS) entro cui un collegamento può influenzare un punto campione; i collegamenti più lontani vengono ignorati. Default: illimitata (ogni collegamento contribuisce ovunque)."
              }
            }
          },
          "pycnophylactic_interpolation": {
            "name": "Interpolazione picnofilattica",
            "description": "Interpolazione areale di Tobler con conservazione della massa: trasforma i conteggi aggregati per zona in una superficie di densità liscia le cui somme per zona corrispondono esattamente all'ingresso (come ArcGIS Areal Interpolation) — l'alternativa liscia all'assunzione di densità uniforme di apportion_polygon.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer poligonale in ingresso con un campo di conteggio (variabile estensiva)."
              },
              "count_field": {
                "label": "Campo conteggio",
                "description": "Campo che contiene il conteggio totale di ciascuna zona (popolazione, ecc.)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster di densità in uscita (valore per cella; le somme per zona coincidono con l'ingresso). Se omesso, il risultato è memorizzato in memoria."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita nelle unità del CRS (default: estensione / 200)."
              },
              "iterations": {
                "label": "Iterazioni",
                "description": "Numero massimo di iterazioni di lisciamento (default 100)."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Si arresta quando la variazione massima per cella scende al di sotto di questa frazione della densità media (default 0.001)."
              },
              "non_negative": {
                "label": "Non negativo",
                "description": "Porta a 0 i valori negativi e li ridistribuisce per preservare la massa (default true)."
              }
            }
          },
          "radiometric_terrain_flattening": {
            "name": "Appiattimento radiometrico del terreno",
            "description": "Rimuove il segnale di luminosità topografica dalla retrodiffusione SAR calibrata sostituendo l'area di riferimento a terra piatta con l'area illuminata locale derivata dal DEM, e segnala layover e ombra radar (ArcGIS Apply Radiometric Terrain Flattening). apply_radiometric_calibration del round 17 normalizza con l'angolo di incidenza ellissoidico, quindi su terreno in pendenza i suoi sigma0/gamma0 seguono la topografia anziché la copertura del suolo — abitualmente di oltre 6 dB, che supera la differenza foresta/suolo nudo che dovrebbe misurare.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster del backscatter SAR calibrato (beta nought per impostazione predefinita; vedere 'input_calibration')."
              },
              "dem": {
                "label": "DEM",
                "description": "Modello digitale di elevazione, co-registrato con il raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster del backscatter spianato sul terreno in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_scattering_area": {
                "label": "Area di diffusione in uscita",
                "description": "Rapporto in uscita tra l'area illuminata reale e l'area a terra piatta. Prodotto sempre; memorizzato in memoria quando non è indicato alcun percorso."
              },
              "output_geometry_mask": {
                "label": "Maschera geometrica in uscita",
                "description": "Maschera in uscita: 0 normale, 1 layover, 2 ombra radar. Prodotta sempre; memorizzata in memoria quando non è indicato alcun percorso."
              },
              "incidence_angle": {
                "label": "Angolo di incidenza",
                "description": "Angolo di incidenza sull'ellissoide in gradi: una costante oppure il percorso di un raster per cella. Obbligatorio."
              },
              "look_azimuth": {
                "label": "Azimut di osservazione",
                "description": "Azimut bussola in gradi dal bersaglio verso il sensore (default 270, ovvero un passaggio ascendente con vista a destra). Un passaggio Sentinel-1 discendente con vista a destra è di circa 283."
              },
              "input_calibration": {
                "label": "Calibrazione in ingresso",
                "description": "Cosa rappresenta già l'ingresso: 'beta0' (default), 'sigma0_ellipsoid' o 'gamma0_ellipsoid'. Questi ultimi due vengono riconvertiti in beta nought usando l'angolo sull'ellissoide prima dello spianamento."
              },
              "calibration_type": {
                "label": "Tipo di calibrazione",
                "description": "Convenzione in uscita: 'gamma0' (default) o 'sigma0'."
              },
              "input_units": {
                "label": "Unità di ingresso",
                "description": "'intensity' (default), 'dn', 'amplitude' o 'db'."
              },
              "output_units": {
                "label": "Unità di uscita",
                "description": "'linear' (default) o 'db'."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Moltiplicatore che converte le unità z del DEM nelle unità XY del raster (default 1.0)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 del raster in ingresso da spianare (default 1)."
              }
            }
          },
          "raster_domain": {
            "name": "Dominio del raster",
            "description": "Traccia il confine della regione di dati validi di un raster come poligoni (o polilinee chiuse), preservando i buchi interni di nodata (ArcGIS Raster Domain). layer_footprint_raster incluso restituisce l'intera estensione rettangolare, che per una scena ruotata, un bacino ritagliato o una tessera di mosaico irregolare può essere diverse volte la copertura effettiva; polygonize potrebbe farlo ma solo da una maschera di validità 0/1 che il chiamante deve costruire prima, il che è l'intero compito.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso di cui si desidera l'ingombro dei dati validi."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer poligonale o lineare in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "geometry_type": {
                "label": "Tipo di geometria",
                "description": "'polygon' (default) oppure 'line' per il contorno come polilinee chiuse."
              },
              "ignore_value": {
                "label": "Valore da ignorare",
                "description": "Considera non valido anche questo valore, oltre al no-data proprio del raster (comunemente 0 per le immagini con bordo nero)."
              },
              "min_value": {
                "label": "Valore minimo",
                "description": "Considera non validi i valori inferiori a questo."
              },
              "max_value": {
                "label": "Valore massimo",
                "description": "Considera non validi i valori superiori a questo."
              },
              "min_area": {
                "label": "Area minima",
                "description": "Scarta le parti dell'ingombro più piccole di questa area in unità mappa al quadrato, eliminando lo speckle lungo un margine frastagliato."
              },
              "fill_holes": {
                "label": "Riempi i buchi",
                "description": "Elimina i buchi interni e restituisce l'ingombro pieno (default false)."
              },
              "all_bands": {
                "label": "Tutte le bande",
                "description": "Richiede che una cella sia valida in tutte le bande e non solo in quella selezionata (default false)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da verificare, in base 1 (default 1). Ignorata quando è impostato 'all_bands'."
              }
            }
          },
          "raster_normalize": {
            "name": "Normalizza raster",
            "description": "Normalizza min-max una banda raster nell'intervallo [0, 1].",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da normalizzare, in base 1 (default 1)."
              }
            }
          },
          "raster_to_h3": {
            "name": "Da raster a celle H3",
            "description": "Aggrega i valori delle bande raster in celle della griglia globale discreta H3 (media, somma, minimo, massimo, conteggio, mediana).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso (deve essere in lon/lat geografiche, EPSG:4326)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita; il driver è dedotto dalla sua estensione (.geojson, .fgb, .parquet, ...). Se omesso, il layer è memorizzato in memoria."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Risoluzione H3 da 0 (la più grossolana) a 15 (la più fine); default 8 (celle di ~0,7 km²)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda raster in base 1 da aggregare (default 1)."
              },
              "aggregate": {
                "label": "Aggrega",
                "description": "Modalità di combinazione dei valori dei pixel per cella: mean, sum, min, max, count o median (default mean)."
              }
            }
          },
          "raster_to_tiles": {
            "name": "Da raster a tessere XYZ",
            "description": "Suddivide un raster in una piramide di tessere PNG XYZ in Web Mercator (EPSG:3857) per mappe web.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso. Deve avere un CRS sorgente (EPSG o WKT)."
              },
              "output_dir": {
                "label": "Cartella di uscita",
                "description": "Directory di uscita per l'albero di tessere {z}/{x}/{y}.png (ad esempio /work/tiles)."
              },
              "min_zoom": {
                "label": "Zoom minimo",
                "description": "Livello di zoom minimo (default: un unico zoom nativo corrispondente alla risoluzione del raster)."
              },
              "max_zoom": {
                "label": "Zoom massimo",
                "description": "Livello di zoom massimo (default: uguale a min_zoom)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da renderizzare, in base 1 (default 1)."
              },
              "colormap": {
                "label": "Mappa dei colori",
                "description": "Mappa di colori: viridis (default), magma, turbo, terrain o grayscale."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di ricampionamento per la riproiezione e il campionamento: bilinear (default), nearest, cubic."
              },
              "min": {
                "label": "Minimo",
                "description": "Valore mappato sull'estremo inferiore della mappa di colori (default: il minimo della banda)."
              },
              "max": {
                "label": "Massimo",
                "description": "Valore mappato sull'estremo superiore della mappa di colori (default: il massimo della banda)."
              }
            }
          },
          "raster_to_weighted_points": {
            "name": "Da raster a punti pesati",
            "description": "Distribuisce un numero fisso di punti su un raster così che la loro densità sia proporzionale al valore della cella, posizionandoli su un reticolo di Fibonacci deterministico, una spirale, uno schema circolare o a centroide (ArcGIS Raster To Weighted Points). Nulla in nessuno dei due registri pondera per una superficie: random_sample e random_points_in_polygon sono uniformi, create_spatially_balanced_points distribuisce deliberatamente i punti in modo uniforme, e raster_to_vector_points ne emette uno per cella senza sfoltimento o ponderazione. L'allocazione usa il metodo del resto più grande e non necessita di generatore casuale, quindi i risultati sono riproducibili in WASM.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster di superficie in ingresso; i valori delle celle sono i pesi."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer puntuale in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "max_number_of_points": {
                "label": "Numero massimo di punti",
                "description": "Numero totale di punti da distribuire (default 1000)."
              },
              "method": {
                "label": "Metodo",
                "description": "Collocazione all'interno della cella: 'fibonacci_lattice' (default), 'fibonacci_spiral', 'circular' o 'centroid'."
              },
              "min_value": {
                "label": "Valore minimo",
                "description": "Le celle con peso pari o inferiore a questo valore non ricevono punti (default 0). I pesi negativi sono sempre esclusi."
              },
              "max_points_per_cell": {
                "label": "Punti massimi per cella",
                "description": "Limita il numero di punti che una singola cella può ricevere, così che una cella molto alta non assorba l'intero budget."
              },
              "include_weight": {
                "label": "Includi il peso",
                "description": "Scrive il valore della cella di origine su ciascun punto (default true)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 che fornisce i pesi (default 1)."
              }
            }
          },
          "read_geoparquet": {
            "name": "Leggi GeoParquet",
            "description": "Legge un file GeoParquet e lo converte in un altro formato vettoriale (o lo memorizza in memoria).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file GeoParquet in ingresso (ad esempio /work/data.parquet)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale in uscita; il formato è dedotto dalla sua estensione (.geojson, .fgb, .shp, .gpkg, ...). Se omesso, il layer è memorizzato in memoria."
              }
            }
          },
          "reclassify_field": {
            "name": "Riclassifica campo",
            "description": "Classifica un attributo vettoriale numerico in classi (come ArcGIS Reclassify Field): equal_interval, defined_interval, quantile, natural_breaks (Jenks), std_dev o geometric_interval, scrivendo un campo classe intero più un campo opzionale di valore di interruzione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale (o tabella) in ingresso con il campo numerico da classificare."
              },
              "field": {
                "label": "Campo",
                "description": "Nome del campo numerico da classificare."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer vettoriale in uscita con il campo di classe aggiunto. Se omesso, il risultato è memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di classificazione: equal_interval, defined_interval, quantile, natural_breaks, std_dev o geometric_interval (default natural_breaks)."
              },
              "classes": {
                "label": "Classi",
                "description": "Numero di classi per equal_interval/quantile/natural_breaks/geometric_interval (default 5). Ignorato da defined_interval e std_dev, il cui numero di classi dipende dai dati."
              },
              "interval": {
                "label": "Intervallo",
                "description": "Ampiezza fissa delle classi per defined_interval (obbligatoria per tale metodo)."
              },
              "std_dev_interval": {
                "label": "Intervallo di deviazione standard",
                "description": "Ampiezza dell'intervallo per std_dev, in unità di deviazione standard (default 1.0; ad esempio 0.5 per bande di mezzo sigma)."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Nome del campo intero di classe da aggiungere (default 'class')."
              },
              "break_field": {
                "label": "Campo di interruzione",
                "description": "Se indicato, aggiunge anche un campo in virgola mobile con il limite superiore della classe in cui ricade ciascuna geometria."
              }
            }
          },
          "reconstruct_tracks": {
            "name": "Ricostruisci le tracce",
            "description": "Trasforma i punti con timestamp in polilinee di tracce di movimento (raggruppate per ID, ordinate per tempo, divise sui vuoti di tempo/distanza) con statistiche per traccia, e opzionalmente trova le posizioni di sosta dove il soggetto in movimento si è fermato — come ArcGIS Reconstruct Tracks / Find Dwell Locations.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso di osservazioni con marca temporale."
              },
              "track_field": {
                "label": "Campo traccia",
                "description": "Campo che identifica ciascuna traccia/oggetto in movimento (ad esempio l'ID di un veicolo o di un animale)."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo che contiene l'istante di ciascun punto: secondi numerici o una marca temporale ISO-8601."
              },
              "output": {
                "label": "Uscita",
                "description": "Vettoriale lineare delle tracce in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "time_gap": {
                "label": "Intervallo temporale",
                "description": "Inizia un nuovo segmento di traccia quando l'intervallo di tempo tra i punti supera questo numero di secondi. Default: nessuna suddivisione temporale."
              },
              "distance_gap": {
                "label": "Intervallo di distanza",
                "description": "Inizia un nuovo segmento di traccia quando la distanza tra i punti supera questo valore (metri per un CRS geografico, unità del CRS altrimenti). Default: nessuna suddivisione per distanza."
              },
              "dwells": {
                "label": "Soste",
                "description": "Percorso opzionale dei punti in uscita per le posizioni di sosta (dove l'oggetto in movimento si è fermato)."
              },
              "dwell_distance": {
                "label": "Distanza di sosta",
                "description": "Raggio massimo di una sosta, nelle unità di distanza indicate sopra. Default 50."
              },
              "dwell_min_duration": {
                "label": "Durata minima della sosta",
                "description": "Tempo minimo (in secondi) per cui un oggetto in movimento deve restare entro dwell_distance perché sia considerata una sosta. Default 300."
              }
            }
          },
          "reduce_point_density": {
            "name": "Riduci la densità dei punti",
            "description": "Sfoltisce un layer puntuale vettoriale così che due punti mantenuti non siano mai più vicini di una spaziatura minima, oppure mantiene un punto per cella della griglia (ArcGIS Reduce Point Density). lidar_thin è solo per LAS e find_identical cattura solo i duplicati esatti, quindi i layer densi di scandagli, GPS e sensori non potevano essere decimati prima dell'interpolazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale (o multipunto) in ingresso."
              },
              "method": {
                "label": "Metodo",
                "description": "'spacing' (default): diradamento greedy a separazione minima. 'bin': mantiene un punto per cella della griglia."
              },
              "min_distance": {
                "label": "Distanza minima",
                "description": "Separazione minima tra i punti mantenuti, nelle unità del layer. Obbligatoria per il metodo 'spacing'."
              },
              "bin_size": {
                "label": "Dimensione delle celle",
                "description": "Dimensione della cella della griglia nelle unità del layer. Obbligatoria per il metodo 'bin'."
              },
              "sort_field": {
                "label": "Campo di ordinamento",
                "description": "Attributo numerico che decide quale punto prevale in caso di conflitto. In sua assenza decide l'ordine in ingresso."
              },
              "sort_order": {
                "label": "Ordine di ordinamento",
                "description": "'descending' (default, prevale il sort_field più alto) o 'ascending'."
              },
              "keep_field": {
                "label": "Campo da mantenere",
                "description": "Attributo che contrassegna i punti che devono essere sempre mantenuti (diverso da zero / true / non vuoto). Da usare per i pericoli come gli scandagli sui bassifondi."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer dei punti mantenuti in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_removed": {
                "label": "Rimossi in uscita",
                "description": "Layer opzionale che riceve i punti scartati, per il riesame."
              }
            }
          },
          "regression_kriging": {
            "name": "Kriging di regressione",
            "description": "Kriging con deriva esterna: regredisce i valori campione su raster di covariate esaustivi, adatta un variogramma ai residui e riaggiunge il campo dei residui krigato alla superficie di regressione (ArcGIS EBK Regression Prediction). Ogni variante di kriging inclusa modella la tendenza nelle coordinate o necessita di campioni puntuali secondari; nessuna accetta raster di covariate, che è ciò di cui la maggior parte della geostatistica applicata ha effettivamente bisogno.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer dei punti di campionamento."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Attributo numerico da prevedere."
              },
              "covariates": {
                "label": "Covariate",
                "description": "Percorsi dei raster delle covariate separati da virgole o punti e virgola, esaustivi su tutta la griglia di predizione. Il primo definisce la griglia in uscita."
              },
              "variogram_model": {
                "label": "Modello di variogramma",
                "description": "Modello di variogramma dei residui: 'spherical' (default), 'exponential' o 'gaussian'."
              },
              "lag_count": {
                "label": "Numero di lag",
                "description": "Numero di classi di lag usate per adattare il variogramma dei residui (default 12)."
              },
              "max_neighbors": {
                "label": "Vicini massimi",
                "description": "Numero di campioni più vicini usati nel sistema di kriging di ciascuna cella (default 16)."
              },
              "bilinear": {
                "label": "Bilineare",
                "description": "Campiona le covariate in modo bilineare nelle posizioni dei punti anziché sulla cella più vicina (default false)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster delle predizioni in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_error": {
                "label": "Errore in uscita",
                "description": "Raster dell'errore standard di predizione (errore standard di kriging del campo dei residui). Prodotto sempre."
              }
            }
          },
          "regularize_adjacent_building_footprint": {
            "name": "Regolarizza le sagome degli edifici adiacenti",
            "description": "Regolarizza un gruppo di impronte di edifici adiacenti a un unico orientamento condiviso così che i muri condivisi restino paralleli e collineari (come ArcGIS Regularize Adjacent Building Footprint) — la controparte coerente per gruppo di regularize_building_footprints per singolo edificio, che lascia che le impronte vicine si disallineino.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer poligonale in ingresso delle impronte degli edifici."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso dei poligoni in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "group": {
                "label": "Gruppo",
                "description": "Campo opzionale che raggruppa le impronte da regolarizzare insieme. In sua assenza, i gruppi sono formati per adiacenza dei contorni."
              },
              "method": {
                "label": "Metodo",
                "description": "'right_angles' (default) o 'right_angles_and_diagonals'."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Lunghezza minima delle pareti; i lati più corti vengono eliminati come rumore (unità del CRS). Default 1.0."
              },
              "precision": {
                "label": "Precisione",
                "description": "Passo della griglia per agganciare gli scarti delle pareti in modo che pareti parallele vicine diventino collineari (unità del CRS). Default: tolerance."
              },
              "adjacency_distance": {
                "label": "Distanza di adiacenza",
                "description": "Quando non è indicato alcun campo 'group', le impronte i cui vertici si trovano entro questa distanza costituiscono un unico gruppo (unità del CRS). Default: 2 x tolerance."
              }
            }
          },
          "regularize_building_footprints": {
            "name": "Regolarizza le sagome degli edifici",
            "description": "Normalizza poligoni di impronte di edifici rumorosi in forme regolari (muri ad angolo retto, diagonali, a qualsiasi angolo o circolari).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale poligonale in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di regolarizzazione: 'right_angles' (default), 'right_angles_and_diagonals', 'any_angle' o 'circle'."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Distanza massima (in unità del CRS) di cui l'impronta regolarizzata può discostarsi dal contorno originale. Default 1.0."
              },
              "diagonal_penalty": {
                "label": "Penalità diagonale",
                "description": "Per 'right_angles_and_diagonals': quanto fortemente gli angoli retti sono preferiti alle pareti a 45 gradi (una parete diventa diagonale solo quando la sua deviazione angolare da una diagonale, moltiplicata per questo fattore, è minore della sua deviazione da un asse). Default 1.5; valori più alti producono meno diagonali."
              },
              "min_radius": {
                "label": "Raggio minimo",
                "description": "Per 'circle': raggio adattato minimo consentito; gli adattamenti più piccoli mantengono l'impronta originale. Default 0.1."
              },
              "max_radius": {
                "label": "Raggio massimo",
                "description": "Per 'circle': raggio adattato massimo consentito; gli adattamenti più grandi mantengono l'impronta originale. Illimitato se omesso."
              }
            }
          },
          "remove_overlap_multiple": {
            "name": "Rimuovi sovrapposizione (multipla)",
            "description": "Riassegna ogni sovrapposizione tra un insieme di poligoni a esattamente una geometria, producendo una partizione della loro unione senza vuoti né sovrapposizioni (divisione per linea centrale o di Thiessen), come ArcGIS Remove Overlap (Multiple).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso (le geometrie possono sovrapporsi)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "'center_line' (assegna ogni punto di sovrapposizione alla geometria al cui interno si trova più in profondità, default) o 'thiessen' (centroide generatore più vicino)."
              },
              "grid_resolution": {
                "label": "Risoluzione della griglia",
                "description": "Celle lungo il lato maggiore di ciascuna regione di sovrapposizione durante la suddivisione (default 40; valori più alti = linee di suddivisione più morbide, più lente)."
              }
            }
          },
          "remove_thermal_noise": {
            "name": "Rimuovi il rumore termico",
            "description": "Sottrae il rumore termico additivo di fondo del ricevitore dalla retrodiffusione SAR, rimuovendo la bandatura trasversale alla fascia che domina le superfici scure come acqua calma, terreno allagato e ombra radar (ArcGIS Remove Thermal Noise). Nulla in nessuno dei due registri lo fa: i filtri lee/frost/kuan/refined-lee inclusi sopprimono lo speckle moltiplicativo, una quantità diversa. Senza di esso una soglia di Otsu per l'acqua si aggancia a un confine di sotto-fascia anziché a una linea di costa, e i rapporti di polarizzazione incrociata vengono calcolati da un numeratore che è in gran parte rumore.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster del backscatter SAR calibrato."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster denoisizzato in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_snr": {
                "label": "SNR in uscita",
                "description": "Rapporto segnale/rumore in uscita in dB. Prodotto sempre; memorizzato in memoria quando non è indicato alcun percorso."
              },
              "noise_raster": {
                "label": "Raster del rumore",
                "description": "Raster della potenza del rumore per cella, co-registrato con l'ingresso. Prevale sulle altre due forme."
              },
              "noise_profile": {
                "label": "Profilo del rumore",
                "description": "Potenze del rumore lungo il range separate da virgole, interpolate linearmente sulle colonne del raster. Almeno due valori."
              },
              "noise_constant": {
                "label": "Costante del rumore",
                "description": "Singolo valore di sigma nought equivalente al rumore applicato a ogni cella."
              },
              "noise_units": {
                "label": "Unità del rumore",
                "description": "Unità in cui sono espressi i valori di rumore: 'intensity' (default), 'dn', 'amplitude' o 'db'."
              },
              "input_units": {
                "label": "Unità di ingresso",
                "description": "'intensity' (default), 'dn', 'amplitude' o 'db'."
              },
              "output_units": {
                "label": "Unità di uscita",
                "description": "'linear' (default) o 'db'."
              },
              "floor_fraction": {
                "label": "Frazione del pavimento",
                "description": "Le celle portate a zero o al di sotto vengono riportate a questa frazione della potenza del rumore locale (default 0.01). Mantiene finita la conversione in dB."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da denoisizzare, in base 1 (default 1)."
              }
            }
          },
          "render_raster_png": {
            "name": "Rendi il raster in PNG",
            "description": "Renderizza una singola banda raster in un'immagine PNG tramite una mappa dei colori (il nodata diventa trasparente).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del file PNG in uscita (ad esempio /work/preview.png)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da renderizzare, in base 1 (default 1)."
              },
              "colormap": {
                "label": "Mappa dei colori",
                "description": "Mappa di colori: viridis (default), magma, turbo, terrain o grayscale."
              },
              "min": {
                "label": "Minimo",
                "description": "Valore mappato sull'estremo inferiore della mappa di colori (default: il minimo della banda)."
              },
              "max": {
                "label": "Massimo",
                "description": "Valore mappato sull'estremo superiore della mappa di colori (default: il massimo della banda)."
              }
            }
          },
          "render_vector_png": {
            "name": "Rendi il vettoriale in PNG",
            "description": "Disegna un layer vettoriale (punti/linee/poligoni) in un'immagine di mappa PNG.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale in ingresso o handle in memoria."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del file PNG in uscita (ad esempio /work/map.png)."
              },
              "width": {
                "label": "Larghezza",
                "description": "Larghezza dell'immagine in pixel (default 800)."
              },
              "height": {
                "label": "Altezza",
                "description": "Altezza dell'immagine in pixel (default: ricavata dal rapporto d'aspetto dei dati)."
              },
              "fill": {
                "label": "Riempi",
                "description": "Colore di riempimento dei poligoni/punti come #rrggbb o #rrggbbaa (default: blu semitrasparente)."
              },
              "stroke": {
                "label": "Tratto",
                "description": "Colore del contorno/delle linee come #rrggbb o #rrggbbaa (default: blu scuro)."
              },
              "stroke_width": {
                "label": "Larghezza del tratto",
                "description": "Larghezza del contorno/delle linee in pixel (default 1)."
              },
              "background": {
                "label": "Sfondo",
                "description": "Colore di sfondo come #rrggbb[aa] o 'transparent' (default: transparent)."
              }
            }
          },
          "repair_geometry": {
            "name": "Ripara la geometria",
            "description": "Rileva e corregge geometrie poligonali non valide — auto-intersezioni (tramite auto-unione), orientamento degli anelli, vertici duplicati e parti nulle/vuote — oppure, con check_only, riporta un codice di problema per geometria. Come ArcGIS Repair Geometry / Check Geometry.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale poligonale in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "check_only": {
                "label": "Solo verifica",
                "description": "Se true, non modifica la geometria: produce l'ingresso con le colonne 'problem_code'/'problem_desc' (come ArcGIS Check Geometry). Default false."
              }
            }
          },
          "rescale_by_function": {
            "name": "Riscala per funzione",
            "description": "Ridimensiona un raster continuo su una scala di idoneità comune tramite una funzione di trasferimento (linear, inverse_linear, power, exponential, logarithmic, logistic, gaussian, near, small, large, symmetric_linear), come ArcGIS Rescale By Function.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster continuo in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "function": {
                "label": "Funzione",
                "description": "Funzione di trasferimento: linear (default), inverse_linear, power, exponential, logarithmic, logistic, gaussian, near, small, large, symmetric_linear."
              },
              "from_scale": {
                "label": "Scala di origine",
                "description": "Estremo inferiore della scala in uscita (default 0)."
              },
              "to_scale": {
                "label": "Scala di destinazione",
                "description": "Estremo superiore della scala in uscita (default 1)."
              },
              "param1": {
                "label": "Parametro 1",
                "description": "Primo parametro di forma (esponente per power; ripidità per exponential/logarithmic/logistic/small/large; centro per gaussian/near). Il valore predefinito dipende dalla funzione."
              },
              "param2": {
                "label": "Parametro 2",
                "description": "Secondo parametro di forma (dispersione per gaussian/near). Il valore predefinito dipende dalla funzione."
              },
              "low_threshold": {
                "label": "Soglia bassa",
                "description": "Soglia inferiore opzionale: i valori al di sotto vengono mappati su 'value_below'."
              },
              "high_threshold": {
                "label": "Soglia alta",
                "description": "Soglia superiore opzionale: i valori al di sopra vengono mappati su 'value_above'."
              },
              "value_below": {
                "label": "Valore sotto",
                "description": "Valore in uscita per le celle al di sotto di 'low_threshold' (default = from_scale)."
              },
              "value_above": {
                "label": "Valore sopra",
                "description": "Valore in uscita per le celle al di sopra di 'high_threshold' (default = to_scale)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da riscalare, in base 1 (default 1)."
              }
            }
          },
          "resolve_building_conflicts": {
            "name": "Risolvi i conflitti tra edifici",
            "description": "Sposta, contrae o nasconde le impronte di edifici che sono in conflitto grafico con le barriere stradali simbolizzate (e tra loro) per la cartografia a piccola scala, etichettando ciascuna con uno stato, come ArcGIS Resolve Building Conflicts.",
            "params": {
              "buildings": {
                "label": "Edifici",
                "description": "Layer poligonale in ingresso degli edifici."
              },
              "barriers": {
                "label": "Barriere",
                "description": "Layer lineare delle barriere (ad esempio le strade) da cui gli edifici devono mantenersi liberi."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer degli edifici in uscita con un campo 'status'. Se omesso, il risultato è memorizzato in memoria."
              },
              "barrier_width": {
                "label": "Larghezza della barriera",
                "description": "Larghezza simbolizzata della barriera in unità mappa (bufferizzata di metà di questo valore per lato). Default 0."
              },
              "gap": {
                "label": "Vuoto",
                "description": "Distanza minima da mantenere tra un edificio e una barriera (unità mappa). Default 0."
              },
              "min_size": {
                "label": "Dimensione minima",
                "description": "Area minima dell'edificio (unità mappa²) al di sotto della quale un edificio in conflitto viene nascosto anziché rimpicciolito. Default 0 (non nasconderlo mai)."
              },
              "hide": {
                "label": "Nascondi",
                "description": "Indica se scartare dall'uscita gli edifici nascosti (default false: vengono mantenuti con status='hidden')."
              }
            }
          },
          "resolve_road_conflicts": {
            "name": "Risolvi i conflitti stradali",
            "description": "Sposta le strade le cui rappresentazioni simbolizzate (larghezza disegnata) si sovrappongono o si affollano a una scala obiettivo: le strade di gerarchia inferiore vengono allontanate da quelle di gerarchia superiore con spostamenti di vertici lisciati e con estremità fissate, emettendo opzionalmente collegamenti di spostamento, come ArcGIS Resolve Road Conflicts / Propagate Displacement.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer lineare delle strade in ingresso (LineString / MultiLineString)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer delle strade spostate in uscita con i campi 'status' e 'shift'. Se omesso, il risultato è memorizzato in memoria."
              },
              "symbol_width": {
                "label": "Larghezza del simbolo",
                "description": "Larghezza simbolizzata fissa per tutte le strade, in unità mappa (o in mm di pagina quando è impostato 'scale'). Usata quando 'symbol_width_field' è assente."
              },
              "symbol_width_field": {
                "label": "Campo larghezza del simbolo",
                "description": "Campo numerico che indica la larghezza simbolizzata di ciascuna strada (unità mappa, oppure mm di pagina quando è impostato 'scale'). In assenza di un valore si usa 'symbol_width'."
              },
              "hierarchy_field": {
                "label": "Campo gerarchia",
                "description": "Campo numerico che ordina l'importanza delle strade (valore più basso = più importante, mantenuta fissa). Se assente, tutte le strade condividono equamente lo spostamento."
              },
              "scale": {
                "label": "Scala",
                "description": "Denominatore della scala della mappa di destinazione. Se impostato, le larghezze dei simboli sono millimetri di pagina convertiti in unità al suolo (mm * scala / 1000). Default: le larghezze sono prese direttamente come unità mappa."
              },
              "gap": {
                "label": "Vuoto",
                "description": "Distanza libera aggiuntiva da mantenere tra le fasce dei simboli, in unità mappa. Default 0."
              },
              "max_iter": {
                "label": "Iterazioni massime",
                "description": "Numero massimo di iterazioni di spostamento. Default 50."
              },
              "pin_endpoints": {
                "label": "Fissa le estremità",
                "description": "Mantiene fissi il primo e l'ultimo vertice di ogni strada per preservare gli incroci/la connettività (default true)."
              },
              "links": {
                "label": "Collegamenti",
                "description": "Percorso di uscita opzionale per i collegamenti di spostamento (linee da→a) utilizzabili da rubbersheet_features."
              }
            }
          },
          "ripleys_k": {
            "name": "K di Ripley",
            "description": "Analisi multi-distanza dei pattern puntuali (funzione K / L di Ripley) con inviluppi Monte Carlo di casualità spaziale completa, per rilevare clustering o dispersione su un intervallo di distanze.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso (le altre geometrie usano il punto rappresentativo dato dalla media dei vertici)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso CSV opzionale per la tabella K/L. La tabella viene restituita anche nel risultato dello strumento."
              },
              "distance_bands": {
                "label": "Bande di distanza",
                "description": "Numero di bande di distanza da valutare (default 10)."
              },
              "max_distance": {
                "label": "Distanza massima",
                "description": "Distanza massima da valutare, nelle unità del CRS. Default: un quarto del lato minore del riquadro di delimitazione dei punti."
              },
              "permutations": {
                "label": "Permutazioni",
                "description": "Numero di simulazioni CSR per l'inviluppo di significatività (default 99; 0 disattiva l'inviluppo)."
              },
              "weight_field": {
                "label": "Campo peso",
                "description": "Campo numerico opzionale che pondera ciascun punto."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme del generatore di numeri casuali per la CSR (default 1), per inviluppi riproducibili."
              }
            }
          },
          "rubbersheet_features": {
            "name": "Adatta gli elementi con rubbersheeting",
            "description": "Deforma un layer vettoriale per allinearlo a un obiettivo usando collegamenti di spostamento: una trasformazione affine a tratti su TIN di Delaunay (o IDW) che porta i punti di controllo sui loro obiettivi e deforma dolcemente tutto ciò che sta in mezzo — la trasformazione di conflazione, come ArcGIS Rubbersheet Features.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso da correggere (qualsiasi tipo di geometria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del vettoriale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "links": {
                "label": "Collegamenti",
                "description": "Layer lineare opzionale dei collegamenti di spostamento (per ogni linea: primo vertice = origine, ultimo vertice = destinazione)."
              },
              "target": {
                "label": "Obiettivo",
                "description": "Layer vettoriale di destinazione opzionale; i collegamenti vengono generati associando il punto rappresentativo di ciascuna geometria in ingresso alla destinazione più vicina entro search_distance."
              },
              "search_distance": {
                "label": "Distanza di ricerca",
                "description": "Distanza massima per associare l'ingresso alla destinazione durante la generazione dei collegamenti (unità del CRS). Obbligatoria con 'target'."
              },
              "method": {
                "label": "Metodo",
                "description": "'linear' (TIN di Delaunay affine a tratti, default) o 'idw' (ponderato per distanza inversa)."
              },
              "power": {
                "label": "Potenza",
                "description": "Potenza dell'IDW per l'attenuazione al di fuori del TIN / per method=idw. Default 2."
              }
            }
          },
          "sar_coherence": {
            "name": "Coerenza SAR",
            "description": "Calcola la magnitudine della coerenza interferometrica normalizzata (e opzionalmente la fase interferometrica) tra due acquisizioni SAR complesse co-registrate su una finestra mobile (ArcGIS Compute Coherence / Generate Interferogram). La coerenza misura la stabilità della fase anziché la luminosità, quindi rileva cambiamenti che la differenza di intensità non può vedere — crolli, inondazioni sotto la vegetazione, raccolti, movimento del ghiaccio — con qualsiasi condizione meteorologica. Nessuno strumento in entrambi i registri usa la fase SAR. Gli ingressi sono coppie I/Q a due bande e devono essere già co-registrati.",
            "params": {
              "reference": {
                "label": "Riferimento",
                "description": "Raster SAR complesso (due bande: I e Q) della prima acquisizione."
              },
              "secondary": {
                "label": "Secondario",
                "description": "Raster SAR complesso co-registrato (due bande: I e Q) della seconda acquisizione."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster di coerenza in uscita (magnitudine, 0..1). Se omesso, il risultato è memorizzato in memoria."
              },
              "output_phase": {
                "label": "Fase in uscita",
                "description": "Percorso di uscita opzionale per il raster della fase interferometrica in radianti, avvolta in (-pi, pi]."
              },
              "window_size": {
                "label": "Dimensione della finestra",
                "description": "Finestra di stima come 'range,azimuth' in celle (default '5,5'). Lo stimatore è centrato, per cui un valore pari viene arrotondato PER ECCESSO alla successiva dimensione dispari; la finestra effettiva viene riportata come window_range/window_azimuth."
              },
              "bias_correction": {
                "label": "Correzione del bias",
                "description": "Corregge la distorsione verso l'alto dello stimatore di coerenza con finestre di piccole dimensioni (default true)."
              }
            }
          },
          "semivariogram_sensitivity": {
            "name": "Sensibilità del semivariogramma",
            "description": "Perturba nugget, sill parziale e range di un variogramma adattato, ri-kriga nelle posizioni di valutazione e riporta di quanto si spostano predizioni ed errori standard — la verifica standard di difendibilità di un modello di kriging (ArcGIS GA Semivariogram Sensitivity). La suite di kriging inclusa è ampia e kriging_cross_validation misura l'adattamento, ma nulla misura la sensibilità, e le due cose sono indipendenti: un modello ben validato in modo incrociato può essere comunque molto fragile rispetto ai parametri scelti dall'analista.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale che contiene i valori misurati."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numerico su cui applicare il kriging."
              },
              "locations": {
                "label": "Posizioni",
                "description": "Layer puntuale delle posizioni di predizione in cui valutare la sensitività."
              },
              "output": {
                "label": "Uscita",
                "description": "Tabella con una riga per ciascun modello perturbato. Se omessa, il risultato è memorizzato in memoria."
              },
              "model": {
                "label": "Modello",
                "description": "Modello di variogramma: 'exponential' (default), 'spherical' o 'gaussian'."
              },
              "nugget_span_percent": {
                "label": "Percentuale di estensione del nugget",
                "description": "Semiampiezza della perturbazione per il nugget, in percentuale (default 10)."
              },
              "partial_sill_span_percent": {
                "label": "Percentuale di estensione del sill parziale",
                "description": "Semiampiezza della perturbazione per il sill parziale, in percentuale (default 10)."
              },
              "range_span_percent": {
                "label": "Percentuale di estensione del range",
                "description": "Semiampiezza della perturbazione per il range, in percentuale (default 10)."
              },
              "nugget_steps": {
                "label": "Passi del nugget",
                "description": "Campioni lungo l'intervallo del nugget (default 3; il valore 1 lo fissa al valore adattato)."
              },
              "partial_sill_steps": {
                "label": "Passi del sill parziale",
                "description": "Campioni lungo l'intervallo del sill parziale (default 3)."
              },
              "range_steps": {
                "label": "Passi del range",
                "description": "Campioni lungo l'intervallo del range (default 3)."
              },
              "lag_count": {
                "label": "Numero di lag",
                "description": "Classi di lag del variogramma empirico usate per l'adattamento di riferimento (default 12)."
              }
            }
          },
          "similarity_search": {
            "name": "Ricerca per similarità",
            "description": "Classifica le geometrie candidate per similarità di attributi rispetto a una o più geometrie di riferimento su campi numerici standardizzati z (euclidea o coseno), più/meno/entrambi — come ArcGIS Similarity Search.",
            "params": {
              "reference": {
                "label": "Riferimento",
                "description": "Layer vettoriale di riferimento (una o più geometrie che definiscono il profilo da eguagliare)."
              },
              "candidates": {
                "label": "Candidati",
                "description": "Layer vettoriale dei candidati da ordinare per somiglianza con il riferimento."
              },
              "fields": {
                "label": "Campi",
                "description": "Campo o campi numerici separati da virgole da confrontare (devono esistere su entrambi i layer)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita (candidati ordinati). Se omesso, il risultato è memorizzato in memoria."
              },
              "match_method": {
                "label": "Metodo di abbinamento",
                "description": "'euclidean' (distanza standardizzata in punteggi z; default) o 'cosine' (somiglianza angolare)."
              },
              "most_or_least": {
                "label": "Più o meno",
                "description": "Mantiene i 'most' simili (default), i 'least' simili o 'both' gli estremi."
              },
              "num_results": {
                "label": "Numero di risultati",
                "description": "Numero di risultati da mantenere per ciascun estremo (0 = tutti i candidati). Default 10."
              }
            }
          },
          "simplify_3d_line": {
            "name": "Semplifica linea 3D",
            "description": "Riduce il numero di vertici delle polilinee 3D usando una divisione di Douglas-Peucker che misura la deviazione in tre dimensioni, preservando il profilo verticale, come ArcGIS Simplify 3D Line.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer polilineare in ingresso (vertici 3D; i vertici 2D sono trattati come caso particolare planare)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Deviazione 3D massima in unità mappa. I vertici più vicini di questo valore alla corda vengono rimossi."
              },
              "z_factor": {
                "label": "Fattore Z",
                "description": "Moltiplicatore applicato a Z prima del test di distanza, per i dati la cui unità Z differisce da quella XY (default 1)."
              }
            }
          },
          "simplify_building": {
            "name": "Semplifica edificio",
            "description": "Riduce i vertici delle impronte di edifici proteggendo gli angoli retti, con una soglia di area minima per l'eliminazione, come ArcGIS Simplify Building.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Poligoni delle impronte degli edifici."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Tolleranza di semplificazione in unità mappa: la distanza massima di cui il contorno può spostarsi."
              },
              "minimum_area": {
                "label": "Area minima",
                "description": "Le impronte al di sotto di quest'area vengono scartate (default 0, mantenerle tutte)."
              },
              "keep_collapsed_points": {
                "label": "Mantieni i punti collassati",
                "description": "Produce un punto nel centroide di ciascuna impronta scartata da minimum_area (default false)."
              },
              "corner_tolerance": {
                "label": "Tolleranza degli angoli",
                "description": "Gradi entro i quali un angolo interno è considerato un angolo retto protetto (default 20)."
              }
            }
          },
          "simplify_by_circular_arcs": {
            "name": "Semplifica con archi circolari",
            "description": "Semplifica linee e poligoni sostituendo sequenze di vertici con segmenti rettilinei e veri archi circolari, preservando le curve ingegneristiche anziché approssimarle con corde (ArcGIS Simplify By Straight Lines And Circular Arcs; la modalità 'tangent' copre Simplify By Tangent Segments). Ogni semplificatore in entrambi i registri è solo a rimozione di vertici, il che impone di scegliere tra una curva sfaccettata e un numero di vertici inaccettabile sulle sacche delle strade a fondo cieco, rotatorie e impronte di serbatoi. I cerchi sono adattati con minimi quadrati algebrici ma accettati sulla vera deviazione ortogonale, così la garanzia di tolleranza è rispettata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer lineare o poligonale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale. Se omesso, il risultato è memorizzato in memoria."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Deviazione massima consentita di una primitiva adattata rispetto ai vertici originali, in unità del CRS."
              },
              "mode": {
                "label": "Modalità",
                "description": "'arcs' (default; adatta segmenti rettilinei e archi di cerchio) o 'tangent' (solo segmenti rettilinei, il comportamento di Simplify By Tangent Segments)."
              },
              "min_arc_angle": {
                "label": "Angolo minimo dell'arco",
                "description": "Gli archi che sottendono meno di questo numero di gradi vengono invece prodotti come segmenti rettilinei (default 10)."
              },
              "max_radius": {
                "label": "Raggio massimo",
                "description": "Gli archi con raggio maggiore di questo valore vengono prodotti come segmenti rettilinei (default: 1e6)."
              },
              "densify_output": {
                "label": "Densifica l'uscita",
                "description": "Reinfittisce gli archi adattati fino a una tolleranza di corda in fase di scrittura (default true). Se false vengono prodotti solo gli estremi degli archi, per cui la sola geometria perde la curva — leggere 'output_arcs' per recuperarla."
              },
              "output_arcs": {
                "label": "Archi in uscita",
                "description": "Percorso opzionale per la tabella degli archi adattati (ID della geometria, estremi, centro, raggio, ampiezza con segno in gradi). Se omesso, il risultato è memorizzato in memoria (viene comunque restituito)."
              }
            }
          },
          "simplify_by_tangent_segments": {
            "name": "Semplifica con segmenti tangenti",
            "description": "Sostituisce la geometria curva densificata con la catena minima di segmenti rettilinei che resta entro un offset perpendicolare massimo, unendo i segmenti consecutivi alla loro intersezione così che il risultato resti tangente all'originale (ArcGIS Simplify By Tangent Segments). Il compagno lineare di simplify_by_circular_arcs: simplify_features (Douglas-Peucker) può mantenere solo i vertici esistenti e non garantisce alcuna tangenza, lasciando spigoli sulla geometria ingegneristica, mentre smooth_line e smooth_natural_features spostano i vertici anziché ridurli.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie lineari o poligonali da semplificare."
              },
              "output": {
                "label": "Uscita",
                "description": "Geometrie semplificate con i campi del numero di vertici aggiunti. Se omesso, il risultato è memorizzato in memoria."
              },
              "max_offset": {
                "label": "Offset massimo",
                "description": "Deviazione perpendicolare massima rispetto all'originale, in UNITÀ DEL CRS. In EPSG:4326 si tratta di gradi, per cui un lavoro alla scala del metro richiede circa 2e-5, non 2.0. Il limite è imposto rispetto a ciascuna linea adattata, per cui la catena prodotta può superarlo leggermente in prossimità di una giunzione dove si incontrano segmenti consecutivi."
              },
              "anchor_points": {
                "label": "Punti di ancoraggio",
                "description": "Layer puntuale opzionale le cui posizioni devono sopravvivere come vertici (anchor_points di ArcGIS). Le sequenze non vengono mai estese attraverso un'ancora."
              },
              "anchor_tolerance": {
                "label": "Tolleranza di ancoraggio",
                "description": "Distanza entro la quale un vertice in ingresso è considerato corrispondente a un punto di ancoraggio (unità del CRS). Default: max_offset."
              },
              "min_run": {
                "label": "Sequenza minima",
                "description": "Numero minimo di vertici in ingresso che una sequenza deve coprire prima di essere collassata in un segmento (default 3). Le sequenze più corte vengono prodotte immutate."
              },
              "preserve_endpoints": {
                "label": "Preserva le estremità",
                "description": "Mantiene esattamente il primo e l'ultimo vertice di ciascuna parte (default true)."
              }
            }
          },
          "simplify_shared_edges": {
            "name": "Semplifica i bordi condivisi",
            "description": "Semplifica una copertura poligonale mantenendo coincidenti i confini condivisi tra poligoni adiacenti (senza vuoti né sliver), come ArcGIS Simplify Shared Edges.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale poligonale in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Tolleranza di semplificazione di Douglas-Peucker: la distanza massima (in unità del CRS) di cui un arco semplificato può discostarsi dall'originale. Default 1.0."
              },
              "simplify_boundary": {
                "label": "Semplifica il confine",
                "description": "Semplifica anche gli archi sul contorno esterno della copertura (i lati appartenenti a un solo poligono). Default true; impostare false per mantenere invariato il contorno esterno."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Quantizza i vertici su una griglia di questa dimensione (unità del CRS) prima di costruire la topologia, così che i vertici condivisi quasi coincidenti siano trattati come uno solo. Default 0 (usa le coordinate esatte)."
              }
            }
          },
          "slice_raster": {
            "name": "Suddividi il raster in classi",
            "description": "Classifica un raster continuo in N zone ordinali (intervallo uguale, area uguale, interruzioni naturali, intervallo geometrico o deviazione standard).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster continuo in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster delle zone in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da classificare, in base 1 (default 1)."
              },
              "number_zones": {
                "label": "Numero di zone",
                "description": "Numero di zone in uscita (default 10). Ignorato per std_dev."
              },
              "slice_type": {
                "label": "Tipo di suddivisione",
                "description": "Metodo di classificazione: equal_interval, equal_area, natural_breaks, geometric_interval o std_dev (default equal_interval)."
              },
              "base_output_zone": {
                "label": "Zona di base in uscita",
                "description": "ID di zona assegnato alla zona più bassa (default 1)."
              },
              "class_interval_size": {
                "label": "Dimensione dell'intervallo di classe",
                "description": "Ampiezza dell'intervallo in unità σ per std_dev (default 1.0). Usata solo da std_dev."
              }
            }
          },
          "smooth_natural_features": {
            "name": "Leviga gli elementi naturali",
            "description": "Liscia poligoni pixelati e linee frastagliate (uscite da raster a vettoriale) in curve dall'aspetto naturale tramite il taglio degli angoli di Chaikin, preservando l'area dei poligoni.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale in ingresso con geometrie poligonali o lineari, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "segment_length": {
                "label": "Lunghezza del segmento",
                "description": "Scala del rumore a scalini da rimuovere, in unità del CRS — idealmente la dimensione della cella del raster di origine. Se omessa, viene rilevata automaticamente dalla lunghezza mediana dei lati del layer."
              },
              "iterations": {
                "label": "Iterazioni",
                "description": "Iterazioni di lisciamento di Chaikin (1-8); più iterazioni danno un risultato più morbido con più vertici. Default 3."
              },
              "preserve_area": {
                "label": "Preserva l'area",
                "description": "Ripristina l'area originale di ciascun poligono dopo il lisciamento (il taglio degli angoli restringe le forme convesse). Default true."
              }
            }
          },
          "smooth_shared_edges": {
            "name": "Leviga i bordi condivisi",
            "description": "Liscia una copertura poligonale mantenendo coincidenti i confini condivisi tra poligoni adiacenti (senza vuoti né sliver), come ArcGIS Smooth Shared Edges.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale poligonale in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "algorithm": {
                "label": "Algoritmo",
                "description": "Algoritmo di lisciamento: 'paek' (kernel gaussiano, controllato dalla tolleranza; default) o 'bezier' (taglio degli angoli di Chaikin, ignora la tolleranza)."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Lunghezza di lisciamento PAEK nelle unità del CRS: la finestra di lunghezza d'arco su cui vengono mediati i vertici. Valori più grandi danno curve più morbide. Default 1.0. Ignorata dall'algoritmo 'bezier'."
              },
              "smooth_boundary": {
                "label": "Liscia il confine",
                "description": "Liscia anche gli archi sul contorno esterno della copertura (i lati appartenenti a un solo poligono). Default true; impostare false per mantenere invariato il contorno esterno."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Quantizza i vertici su una griglia di questa dimensione (unità del CRS) prima di costruire la topologia, così che i vertici condivisi quasi coincidenti siano trattati come uno solo. Default 0 (usa le coordinate esatte)."
              }
            }
          },
          "snap_tracks": {
            "name": "Aggancia le tracce",
            "description": "Abbina tracce GPS con timestamp a una rete stradale con un programma dinamico di Viterbi (emissione = distanza di aggancio, transizione = continuità del percorso), così le tracce abbinate seguono un unico percorso plausibile invece di zigzagare tra strade parallele — come ArcGIS Snap Tracks.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale GPS con marca temporale in ingresso."
              },
              "network": {
                "label": "Rete",
                "description": "Layer lineare della rete stradale su cui effettuare l'aggancio."
              },
              "track_field": {
                "label": "Campo traccia",
                "description": "Campo che identifica ciascuna traccia/oggetto in movimento."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo che contiene l'istante di ciascun punto (secondi numerici o ISO-8601)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer puntuale agganciato in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "search_distance": {
                "label": "Distanza di ricerca",
                "description": "Raggio dei candidati: vengono considerati solo gli archi della rete entro questa distanza da un rilevamento. Obbligatorio."
              },
              "max_candidates": {
                "label": "Candidati massimi",
                "description": "Numero massimo di archi candidati mantenuti per ciascun rilevamento (default 5)."
              }
            }
          },
          "solar_radiation": {
            "name": "Radiazione solare",
            "description": "Radiazione solare incidente (Wh/m²) su un DEM per un intervallo di date: diretta + diffusa, tenendo conto di pendenza/esposizione, ombreggiatura dell'orizzonte e posizione del sole nel tempo — come ArcGIS Raster Solar Radiation.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster di quota in ingresso (proiettato, in metri — la pendenza e l'orizzonte richiedono distanze reali)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster della radiazione totale in uscita (Wh/m²). Se omesso, il risultato è memorizzato in memoria."
              },
              "direct_output": {
                "label": "Radiazione diretta in uscita",
                "description": "Raster opzionale in uscita per la componente di radiazione diretta (Wh/m²)."
              },
              "diffuse_output": {
                "label": "Radiazione diffusa in uscita",
                "description": "Raster opzionale in uscita per la componente di radiazione diffusa (Wh/m²)."
              },
              "start_day": {
                "label": "Giorno iniziale",
                "description": "Primo giorno dell'anno (1-365) o una data ISO (AAAA-MM-GG). Default 1."
              },
              "end_day": {
                "label": "Giorno finale",
                "description": "Ultimo giorno dell'anno (1-365) o una data ISO. Default 365."
              },
              "day_interval": {
                "label": "Intervallo di giorni",
                "description": "Effettua un campionamento ogni tot giorni sull'intervallo (ciascun campione rappresenta quel numero di giorni). Default: intervallo/12 (circa 12 campioni)."
              },
              "time_step": {
                "label": "Passo temporale",
                "description": "Ore tra i campionamenti della posizione del sole nell'arco di ciascuna giornata. Default 0.5."
              },
              "latitude": {
                "label": "Latitudine",
                "description": "Latitudine in gradi. Default: ricavata dal centro del DEM per EPSG:4326 / 3857."
              },
              "transmittivity": {
                "label": "Trasmittività",
                "description": "Trasmittività atmosferica (0-1) per una massa d'aria unitaria. Default 0.6."
              },
              "diffuse_proportion": {
                "label": "Proporzione diffusa",
                "description": "Frazione dell'irradianza orizzontale extraterrestre considerata radiazione diffusa del cielo (0-1). Default 0.3."
              },
              "horizon_distance": {
                "label": "Distanza dell'orizzonte",
                "description": "Lunghezza massima del raggio d'orizzonte in celle (limita il calcolo delle ombre). Default 100."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 del DEM (default 1)."
              }
            }
          },
          "sort_features": {
            "name": "Ordina gli elementi",
            "description": "Riordina un layer vettoriale per campi attributo o lungo una curva di Hilbert che riempie lo spazio (ordinamento spaziale), come ArcGIS Sort — l'ordinamento di Hilbert raggruppa i record spazialmente vicini per migliorare la potatura GeoParquet e la località PMTiles.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer vettoriale in uscita nel nuovo ordine. Se omesso, il risultato è memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "'hilbert' (ordine secondo la curva spaziale; default) o 'attribute' (secondo l'elenco 'fields')."
              },
              "fields": {
                "label": "Campi",
                "description": "Modalità attribute: campi separati da virgole con direzione opzionale, ad esempio 'pop:desc,name:asc'."
              },
              "index_field": {
                "label": "Campo indice",
                "description": "Nome del campo opzionale in cui memorizzare la distanza lungo la curva di Hilbert di ciascuna geometria."
              }
            }
          },
          "space_time_kernel_density": {
            "name": "Densità kernel spazio-temporale",
            "description": "Densità kernel spazio-temporale di punti con timestamp: una banda di densità per fetta temporale (un raster multibanda) da un kernel separabile spaziale (Epanechnikov/quartico) x temporale (triangolare/Epanechnikov), così ogni banda aggrega i punti vicini sia nello spazio sia nel tempo, come ArcGIS Space Time Kernel Density. Il compagno sensibile al tempo di heat_map 2D incluso.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso. Un CRS geografico (EPSG:4326/lon-lat non etichettato) usa metri haversine; uno proiettato usa le unità del CRS. Le geometrie non puntuali usano il proprio primo vertice/vertice rappresentativo."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del raster multibanda in uscita (una banda per fetta temporale; driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo che contiene l'istante di ciascun punto: un campo numerico (nelle sue unità) o una stringa di data/data-ora in formato ISO-8601."
              },
              "time_step": {
                "label": "Passo temporale",
                "description": "Intervallo delle fette: un numero semplice (time_field numerico) o una durata come '1w', '7d', '12h', '1M'. Default '1w'."
              },
              "temporal_bandwidth": {
                "label": "Larghezza di banda temporale",
                "description": "Semiampiezza del kernel temporale, con le stesse unità/sintassi di durata di time_step. Default: uguale a time_step."
              },
              "spatial_bandwidth": {
                "label": "Larghezza di banda spaziale",
                "description": "Raggio del kernel spaziale, in metri per un ingresso geografico o in unità del CRS per uno proiettato. Default: estensione massima / 20."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita nelle unità del CRS (gradi per un CRS geografico). Default: estensione massima / 200."
              },
              "weight_field": {
                "label": "Campo peso",
                "description": "Campo numerico opzionale che pondera ciascun punto. Default: ogni punto vale 1."
              },
              "spatial_kernel": {
                "label": "Kernel spaziale",
                "description": "Forma del kernel spaziale: 'epanechnikov' (default) o 'quartic'."
              },
              "temporal_kernel": {
                "label": "Kernel temporale",
                "description": "Forma del kernel temporale: 'triangular' (default) o 'epanechnikov'."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG da assegnare al raster in uscita (default: quello del layer in ingresso)."
              }
            }
          },
          "spatial_association_between_zones": {
            "name": "Associazione spaziale tra zone",
            "description": "Misura quanto fortemente due raster di zone categorici corrispondono tramite la misura V (omogeneità/completezza) più punteggi di associazione per zona.",
            "params": {
              "zones1": {
                "label": "Zone 1",
                "description": "Primo raster categoriale delle zone (ad esempio la copertura del suolo). Stessa griglia di zones2."
              },
              "zones2": {
                "label": "Zone 2",
                "description": "Secondo raster categoriale delle zone (ad esempio le ecoregioni) sulla stessa griglia di zones1."
              },
              "output": {
                "label": "Uscita",
                "description": "Tabella CSV opzionale per ciascuna classe di zones1 (classe, conteggio, associazione, classe dominante di zones2 e relativa quota). Le metriche complessive sono comunque sempre restituite nel risultato."
              },
              "band1": {
                "label": "Banda 1",
                "description": "Banda in base 1 di zones1 da leggere (default 1)."
              },
              "band2": {
                "label": "Banda 2",
                "description": "Banda in base 1 di zones2 da leggere (default 1)."
              }
            }
          },
          "spatial_eigenvector_filtering": {
            "name": "Filtraggio con autovettori spaziali (MESF)",
            "description": "Genera autovettori di Moran (filtri spaziali) da una matrice di pesi spaziali e aggiunge le componenti autocorrelate come campi di variabili esplicative (MEV1, MEV2, …), come ArcGIS Decompose Spatial Structure / Create Spatial Component Explanatory Variables. Costruisce una matrice di connettività simmetrica (contiguità o KNN simmetrizzato), la centra doppiamente (M C M) e la decompone in autovalori con un risolutore ciclico di Jacobi in puro Rust; mantiene gli autovettori il cui I di Moran è ≥ min_autocorrelation, ordinati in modo decrescente e limitati a max_components.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (punti/linee/poligoni; i metodi di contiguità richiedono poligoni)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita — le geometrie in ingresso con gli autovettori mantenuti aggiunti come MEV1, MEV2, …. Se omesso, il risultato è memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "Concettualizzazione delle relazioni spaziali: 'contiguity_edges' (rook), 'contiguity_edges_corners' (queen) o 'knn' (simmetrizzato). Default 'contiguity_edges_corners'."
              },
              "number_of_neighbors": {
                "label": "Numero di vicini",
                "description": "Numero di vicini più prossimi k per method = knn. Default 8."
              },
              "min_autocorrelation": {
                "label": "Autocorrelazione minima",
                "description": "I di Moran minimo che un autovettore deve avere per essere mantenuto (autocorrelazione spaziale positiva). Default 0.25."
              },
              "max_components": {
                "label": "Componenti massime",
                "description": "Numero massimo di autovettori da produrre, presi in ordine decrescente di I di Moran. Default 15."
              }
            }
          },
          "spatial_outlier_detection": {
            "name": "Rilevamento dei valori anomali spaziali",
            "description": "Assegna ai punti un punteggio in base al loro Local Outlier Factor (LOF) — quanto ogni punto è isolato rispetto alla densità locale dei suoi k vicini più prossimi — e segnala i valori anomali principali, come ArcGIS Spatial Outlier Detection. Colma la lacuna lasciata dall'etichetta binaria di rumore di DBSCAN.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale puntuale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Punti in uscita con il punteggio LOF e il contrassegno di valore anomalo. Se omesso, il risultato è memorizzato in memoria."
              },
              "neighbors": {
                "label": "Vicini",
                "description": "Numero di vicini più prossimi k (default 20)."
              },
              "percent_outlier": {
                "label": "Percentuale di valori anomali",
                "description": "Contrassegna come valori anomali questa percentuale di punti con LOF più alto (default 5). Ignorato se è impostato 'threshold'."
              },
              "threshold": {
                "label": "Soglia",
                "description": "Soglia LOF esplicita: i punti con LOF superiore a questo valore sono anomali (prevale su percent_outlier)."
              }
            }
          },
          "spatially_constrained_multivariate_clustering": {
            "name": "Clustering multivariato con vincolo spaziale",
            "description": "Partiziona le geometrie in regioni spazialmente contigue e omogenee per attributi con l'algoritmo SKATER (albero ricoprente minimo su un grafo di contiguità, tagliato per massimizzare la varianza tra cluster), con vincoli opzionali di dimensione/bilanciamento. Ogni cluster è connesso per costruzione, a differenza di multivariate_clustering. Come ArcGIS Spatially Constrained Multivariate Clustering.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie poligonali (o puntuali) in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso in uscita per le geometrie in ingresso più un campo CLUSTER_ID. Se omesso, il risultato è memorizzato in memoria."
              },
              "analysis_fields": {
                "label": "Campi di analisi",
                "description": "Nomi dei campi numerici su cui effettuare il clustering, separati da virgole o punti e virgola."
              },
              "number_of_clusters": {
                "label": "Numero di cluster",
                "description": "Numero obiettivo di cluster (default 5)."
              },
              "neighborhood": {
                "label": "Intorno",
                "description": "'contiguity_edges' (rook, default), 'contiguity_edges_corners' (queen) o 'knn'."
              },
              "number_of_neighbors": {
                "label": "Numero di vicini",
                "description": "Numero di vicini per l'intorno 'knn' (default 8)."
              },
              "constraint": {
                "label": "Vincolo",
                "description": "'none' (default), 'feature_count' o 'attribute_value'."
              },
              "constraint_field": {
                "label": "Campo vincolo",
                "description": "Campo sommato per ciascun cluster quando 'constraint' è 'attribute_value'."
              },
              "min_constraint": {
                "label": "Vincolo minimo",
                "description": "Numero minimo di geometrie o totale minimo dell'attributo per cluster; i tagli che lo violano vengono saltati."
              },
              "max_constraint": {
                "label": "Vincolo massimo",
                "description": "Numero massimo di geometrie o totale massimo dell'attributo per cluster; i cluster che lo superano vengono ulteriormente suddivisi anche oltre 'number_of_clusters'."
              },
              "scale_data": {
                "label": "Ridimensiona i dati",
                "description": "Standardizza in punteggi z i campi di analisi prima del clustering (default true)."
              },
              "output_table": {
                "label": "Tabella in uscita",
                "description": "Percorso opzionale per il riepilogo per cluster (medie, R quadro per variabile, pseudo-F)."
              }
            }
          },
          "spectral_index": {
            "name": "Indice spettrale",
            "description": "Calcola un indice spettrale (NDVI, NDWI, NDBI, NBR, EVI, SAVI) da un raster multibanda.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster multibanda in ingresso."
              },
              "index": {
                "label": "Indice",
                "description": "Indice da calcolare: ndvi, ndwi, ndbi, nbr, evi o savi."
              },
              "red": {
                "label": "Rosso",
                "description": "Numero della banda in base 1 per la banda del rosso."
              },
              "nir": {
                "label": "NIR",
                "description": "Numero della banda in base 1 per la banda dell'infrarosso vicino."
              },
              "green": {
                "label": "Verde",
                "description": "Numero della banda in base 1 per la banda del verde."
              },
              "blue": {
                "label": "Blu",
                "description": "Numero della banda in base 1 per la banda del blu."
              },
              "swir": {
                "label": "SWIR",
                "description": "Numero della banda in base 1 per la banda dell'infrarosso a onde corte."
              },
              "soil_factor": {
                "label": "Fattore del suolo",
                "description": "Fattore di correzione del suolo L per SAVI (default 0.5)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "split_by_attributes": {
            "name": "Dividi per attributi",
            "description": "Divide un layer vettoriale in un file di uscita per ogni valore unico (o combinazione) dei campi indicati, come ArcGIS Split By Attributes.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso."
              },
              "output_dir": {
                "label": "Cartella di uscita",
                "description": "Directory di uscita; qui viene scritto un file per ciascun gruppo (creata se necessario)."
              },
              "fields": {
                "label": "Campi",
                "description": "Nome o nomi dei campi separati da virgole su cui effettuare la suddivisione (una chiave multicampo unisce i valori con '__')."
              },
              "format": {
                "label": "Formato",
                "description": "Estensione del formato di uscita: geojson (default), fgb, parquet, shp."
              }
            }
          },
          "split_by_features": {
            "name": "Dividi per elementi",
            "description": "Ritaglia un layer in ingresso rispetto a ogni zona di un layer poligonale di divisione, scrivendo un file di uscita per ogni valore distinto del campo di divisione. Le zone che condividono un valore vengono prima dissolte, e le zone vuote vengono saltate. Come ArcGIS Split (Analysis).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie da suddividere (punto, linea o poligono)."
              },
              "split_features": {
                "label": "Geometrie di divisione",
                "description": "Layer poligonale le cui geometrie definiscono le zone di suddivisione."
              },
              "split_field": {
                "label": "Campo di divisione",
                "description": "Campo di 'split_features' che fornisce il nome di ciascuna uscita."
              },
              "output_dir": {
                "label": "Cartella di uscita",
                "description": "Directory che riceve un file di uscita per ogni valore di suddivisione distinto."
              },
              "output_format": {
                "label": "Formato di uscita",
                "description": "Estensione/driver del file di uscita: 'geojson' (default), 'shp', 'gpkg', 'parquet', 'csv'."
              }
            }
          },
          "split_line_at_point": {
            "name": "Dividi linea in un punto",
            "description": "Divide le geometrie polilineari nelle posizioni delle geometrie puntuali che ricadono entro un raggio di ricerca, inserendo un nodo in ogni punto agganciato ed emettendo una geometria per ogni sotto-segmento risultante (attributi del padre preservati) — come ArcGIS Split Line At Point.",
            "params": {
              "input_lines": {
                "label": "Linee in ingresso",
                "description": "Layer vettoriale polilineare in ingresso da suddividere."
              },
              "point_features": {
                "label": "Geometrie puntuali",
                "description": "Layer vettoriale puntuale (o multipunto) le cui posizioni definiscono i nodi di suddivisione."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Distanza massima, nelle unità del CRS delle linee, tra un punto e una linea perché il punto suddivida quella linea. Obbligatoria, positiva."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale lineare in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "split_raster": {
            "name": "Dividi raster",
            "description": "Divide un raster in tessere autonome per numero di tessere, dimensione fissa in pixel o geometrie poligonali, con sovrapposizione opzionale in pixel — come ArcGIS Split Raster. Ogni tessera preserva CRS e georeferenziazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso."
              },
              "output_dir": {
                "label": "Cartella di uscita",
                "description": "Directory di uscita per i file delle tessere (creata se necessario)."
              },
              "base_name": {
                "label": "Nome di base",
                "description": "Prefisso del nome dei file in uscita (default 'tile')."
              },
              "split_method": {
                "label": "Metodo di divisione",
                "description": "'count' (griglia N×M, default), 'size' (tessere a pixel fissi) o 'polygons' (un ritaglio per ciascuna geometria)."
              },
              "num_x": {
                "label": "Numero X",
                "description": "Numero di colonne di tessere per 'count' (default 2)."
              },
              "num_y": {
                "label": "Numero Y",
                "description": "Numero di righe di tessere per 'count' (default 2)."
              },
              "tile_size_x": {
                "label": "Dimensione della tessera X",
                "description": "Larghezza della tessera in pixel per 'size' (default 256)."
              },
              "tile_size_y": {
                "label": "Dimensione della tessera Y",
                "description": "Altezza della tessera in pixel per 'size' (default 256)."
              },
              "polygons": {
                "label": "Poligoni",
                "description": "Layer vettoriale poligonale per la modalità 'polygons' (una tessera per ciascuna geometria)."
              },
              "overlap": {
                "label": "Sovrapposizione",
                "description": "Sovrapposizione in pixel aggiunta a ciascuna tessera su tutti i lati (default 0)."
              },
              "format": {
                "label": "Formato",
                "description": "Estensione/driver del file di uscita: 'tif' (default) o 'png'."
              }
            }
          },
          "stack_profile": {
            "name": "Profilo di stack",
            "description": "Campiona più raster di superficie lungo la stessa polilinea ed emette un'unica tabella in formato lungo (LINE_ID, FIRST_DIST, FIRST_Z, SRC_ID, SRC_NAME) così le superfici possono essere confrontate in sezione trasversale su un asse di distanza condiviso. Come ArcGIS Stack Profile.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie lineari in ingresso di cui tracciare il profilo."
              },
              "surfaces": {
                "label": "Superfici",
                "description": "Elenco dei percorsi dei raster di superficie separati da virgole o punti e virgola, campionati nell'ordine indicato."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso della tabella del profilo in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "sample_distance": {
                "label": "Distanza di campionamento",
                "description": "Spaziatura delle stazioni in unità mappa (default: la dimensione di cella più fine tra gli ingressi)."
              },
              "line_id_field": {
                "label": "Campo ID linea",
                "description": "Campo opzionale che fornisce LINE_ID; per impostazione predefinita l'indice della geometria."
              },
              "method": {
                "label": "Metodo",
                "description": "Campionamento della superficie: 'bilinear' (default) o 'nearest'."
              }
            }
          },
          "storage_capacity": {
            "name": "Capacità di invaso",
            "description": "Esplora le elevazioni della superficie dell'acqua su un DEM e riporta l'area allagata e il volume di invaso a ogni livello (la curva livello-area-volume) per zona di analisi o sull'intero DEM, come ArcGIS Storage Capacity.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM in ingresso (quote)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV in uscita (zone_id, level, elevation, area, volume)."
              },
              "zones": {
                "label": "Zone",
                "description": "Layer poligonale opzionale; una curva quota-area-volume per ciascun poligono. Se omesso, l'intero DEM costituisce un'unica zona."
              },
              "zone_id_field": {
                "label": "Campo ID zona",
                "description": "Campo che denomina ciascuna zona nell'uscita (default: l'indice della geometria)."
              },
              "num_levels": {
                "label": "Numero di livelli",
                "description": "Numero di passi di quota tra il minimo e il massimo di ciascuna zona (default 20). Ignorato se è indicato 'increment'."
              },
              "increment": {
                "label": "Incremento",
                "description": "Passo di quota fisso tra i livelli (unità mappa). Prevale su 'num_levels'."
              },
              "min_elevation": {
                "label": "Elevazione minima",
                "description": "Limite inferiore di quota opzionale per la scansione (default: il terreno minimo di ciascuna zona)."
              },
              "max_elevation": {
                "label": "Elevazione massima",
                "description": "Limite superiore di quota opzionale per la scansione (default: il terreno massimo di ciascuna zona)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 del DEM (default 1)."
              }
            }
          },
          "strip_map_index_features": {
            "name": "Elementi di indice a strisce",
            "description": "Percorre ogni linea in ingresso ed emette una sequenza numerata di rettangoli di pagina ruotati e sovrapposti, orientati secondo il rilevamento locale del percorso, per atlanti a striscia lungo un'autostrada, un fiume, una condotta o un sentiero — come ArcGIS Strip Map Index Features.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale lineare in ingresso da indicizzare."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita delle pagine indice (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "page_length": {
                "label": "Lunghezza della pagina",
                "description": "Lunghezza di ciascuna pagina lungo la rotta, nelle unità del CRS. Obbligatoria."
              },
              "page_width": {
                "label": "Larghezza della pagina",
                "description": "Larghezza di ciascuna pagina trasversalmente alla rotta, nelle unità del CRS. Obbligatoria."
              },
              "overlap": {
                "label": "Sovrapposizione",
                "description": "Frazione [0, 1) di page_length di cui le pagine consecutive si sovrappongono lungo la rotta. Default 0."
              },
              "orientation": {
                "label": "Orientamento",
                "description": "along_line (default): ruota ciascuna pagina secondo la direzione della corda locale. horizontal/vertical: aggancia la rotazione all'asse est-ovest/nord-sud più vicino."
              },
              "start_page": {
                "label": "Pagina iniziale",
                "description": "Numero della prima pagina da assegnare. Default 1."
              }
            }
          },
          "subdivide_polygon": {
            "name": "Suddividi poligono",
            "description": "Divide ogni poligono in parti di area uguale (un numero fisso di parti, o un'area obiettivo ciascuna) usando tagli paralleli rettilinei a un dato angolo, come ArcGIS Subdivide Polygon.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale poligonale in ingresso (usare un CRS proiettato/equivalente per ottenere aree realmente uguali)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale poligonale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "'equal_parts' (num_parts strisce di uguale area, default) o 'equal_areas' (strisce di target_area, con il resto nell'ultima)."
              },
              "num_parts": {
                "label": "Numero di parti",
                "description": "Numero di parti di uguale area (per method=equal_parts). Default 2."
              },
              "target_area": {
                "label": "Area obiettivo",
                "description": "Area di ciascuna parte nelle unità del CRS (obbligatoria per method=equal_areas)."
              },
              "angle": {
                "label": "Angolo",
                "description": "Orientamento dei tagli in gradi (0 = tagli verticali / strisce orizzontali). Default 0."
              }
            }
          },
          "subset_features": {
            "name": "Sottoinsieme di elementi",
            "description": "Divide casualmente un layer di geometrie in un sottoinsieme di addestramento e il suo complemento (sottoinsieme di test), per percentuale o conteggio assoluto, usando un generatore casuale deterministico con seme. Opzionalmente stratificato per un campo di raggruppamento. Come ArcGIS Subset Features.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso (qualsiasi tipo di geometria)."
              },
              "output_training": {
                "label": "Addestramento in uscita",
                "description": "Percorso in uscita per il sottoinsieme di addestramento. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_test": {
                "label": "Test in uscita",
                "description": "Percorso di uscita opzionale per il sottoinsieme complementare (di test). Se omesso, il sottoinsieme di test è memorizzato in memoria."
              },
              "size": {
                "label": "Dimensione",
                "description": "Dimensione del sottoinsieme di addestramento: una percentuale (0-100) o un numero assoluto di geometrie, secondo 'size_method' (default 50)."
              },
              "size_method": {
                "label": "Metodo di dimensionamento",
                "description": "'percentage' (default) o 'absolute'."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme del generatore di numeri casuali per una suddivisione riproducibile (default: una costante fissa)."
              },
              "group_field": {
                "label": "Campo di raggruppamento",
                "description": "Campo opzionale su cui stratificare: ciascun gruppo contribuisce con la propria quota proporzionale al sottoinsieme di addestramento."
              }
            }
          },
          "subset_multidimensional_raster": {
            "name": "Sottoinsieme di raster multidimensionale",
            "description": "Restringe un cubo raster multidimensionale a un sottoinsieme delle sue fette, per intervallo di coordinate della dimensione, indici espliciti o passo (ArcGIS Subset Multidimensional Raster / Select By Dimension). Gli strumenti per cubi del round 18 consumano tutti un cubo intero, quindi non c'era modo di analizzare una finestra di studio senza rigenerare l'ingresso fuori dal catalogo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster multidimensionale, oppure un elenco separato da virgole di raster co-registrati le cui bande si concatenano in un unico cubo."
              },
              "dimension_values": {
                "label": "Valori della dimensione",
                "description": "Coordinate per fetta opzionali e strettamente crescenti (date, profondità, lunghezze d'onda), una per fetta. Richieste da 'dimension_range'."
              },
              "dimension": {
                "label": "Dimensione",
                "description": "Nome della dimensione, usato solo nella reportistica (default 'slice')."
              },
              "dimension_range": {
                "label": "Intervallo della dimensione",
                "description": "Intervallo di coordinate con estremi inclusi nella forma 'min,max'. Richiede 'dimension_values'. Mutuamente esclusivo con 'indices'."
              },
              "indices": {
                "label": "Indici",
                "description": "Indici espliciti delle fette in base 0, ad esempio '0,2,5'. Mutuamente esclusivo con 'dimension_range'."
              },
              "step": {
                "label": "Passo",
                "description": "Mantiene una fetta ogni N dopo gli altri filtri (default 1)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster del cubo in uscita, una banda per ciascuna fetta mantenuta. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "summarize_categorical_raster": {
            "name": "Riepiloga raster categorico",
            "description": "Tabula il conteggio delle celle, l'area e la quota di ogni classe di un raster categorico, una riga per fetta per le pile multibanda/multidimensionali, opzionalmente limitato a un'area di interesse (ArcGIS Summarize Categorical Raster). raster_area incluso riscrive i totali di classe nelle celle raster anziché in una tabella ed è solo a banda singola, quindi non può produrre la serie di area per classe per data di cui l'analisi del cambiamento della copertura del suolo ha bisogno. L'area delle celle è integrata per riga per i raster geografici.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster categoriale in ingresso (a banda singola o multibanda)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale della tabella in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "aoi": {
                "label": "AOI",
                "description": "Layer poligonale opzionale che limita il riepilogo a un'area di interesse."
              },
              "aoi_id_field": {
                "label": "Campo ID AOI",
                "description": "Campo di 'aoi' che identifica ciascuna area; se indicato, il riepilogo viene prodotto per ciascuna geometria dell'AOI."
              },
              "area_units": {
                "label": "Unità di area",
                "description": "Unità di area: map_units (default), hectares o square_kilometers."
              },
              "include_nodata": {
                "label": "Includi il nodata",
                "description": "Se true, il no-data viene riportato come una riga di classe a sé (default false)."
              },
              "bands": {
                "label": "Bande",
                "description": "Elenco separato da virgole delle bande in base 1 da riepilogare (default: tutte le bande)."
              }
            }
          },
          "summarize_nearby": {
            "name": "Riepiloga nelle vicinanze",
            "description": "Crea buffer delle geometrie in ingresso a una o più distanze in linea retta e riassume un secondo layer all'interno di ogni buffer: conteggio delle geometrie, area intersecata (poligoni), lunghezza ritagliata (linee) e somma/media ponderata per la misura dei campi numerici.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale in ingresso le cui geometrie vengono bufferizzate (punti, linee o poligoni), formato rilevato automaticamente (o handle in memoria)."
              },
              "summary_features": {
                "label": "Geometrie di riepilogo",
                "description": "Layer vettoriale da riepilogare all'interno di ciascun buffer (i poligoni sono riepilogati per area intersecata, le linee per lunghezza ritagliata, i punti per conteggio)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "distances": {
                "label": "Distanze",
                "description": "Elenco separato da virgole delle distanze di buffer nelle unità del CRS, ad esempio \"1000,2000,5000\". Ordinato in modo crescente; i duplicati e i valori non positivi vengono scartati."
              },
              "sum_fields": {
                "label": "Campi da sommare",
                "description": "Campi numerici opzionali separati da virgole del layer da riepilogare, da aggregare. Ciascuno produce una colonna sum_<field> e una mean_<field> (ponderate per area per i poligoni, per lunghezza per le linee, semplici per i punti)."
              },
              "id_field": {
                "label": "Campo ID",
                "description": "Campo opzionale del layer in ingresso che identifica ciascuna geometria di origine nell'uscita. Per impostazione predefinita l'indice della geometria in ingresso."
              }
            }
          },
          "summarize_percent_change": {
            "name": "Riepiloga la variazione percentuale",
            "description": "Conta gli incidenti di un periodo corrente e di uno precedente all'interno di ogni geometria areale e riporta la differenza di conteggio, la variazione percentuale e una classe di cambiamento. La variazione percentuale è nulla (classe 'new') dove il conteggio precedente è zero. Come ArcGIS Summarize Percent Change.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie areali (settori, sezioni di censimento, celle di griglia) in cui riepilogare."
              },
              "current_features": {
                "label": "Geometrie attuali",
                "description": "Geometrie puntuali degli incidenti per il periodo corrente."
              },
              "previous_features": {
                "label": "Geometrie precedenti",
                "description": "Geometrie puntuali degli incidenti per il periodo precedente."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso in uscita per le aree con i campi di variazione. Se omesso, il risultato è memorizzato in memoria."
              },
              "search_radius": {
                "label": "Raggio di ricerca",
                "description": "Distanza opzionale in unità mappa; contano anche gli incidenti entro questa distanza da un'area, non solo quelli al suo interno. Si noti che un raggio positivo fa sovrapporre i bacini di raccolta, per cui un incidente può essere conteggiato da più di un'area (i totali complessivi riportati restano deduplicati)."
              }
            }
          },
          "summarize_within": {
            "name": "Riepiloga all'interno",
            "description": "Riassume gli attributi di un layer all'interno di un layer poligonale esistente, ponderando le geometrie parzialmente sovrapposte per area o lunghezza intersecata, come ArcGIS Summarize Within.",
            "params": {
              "polygons": {
                "label": "Poligoni",
                "description": "Layer poligonale in cui riepilogare. Le sue geometrie e i suoi attributi sono preservati."
              },
              "input": {
                "label": "Ingresso",
                "description": "Layer da riepilogare (punto, linea o poligono)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale dei poligoni in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "fields": {
                "label": "Campi",
                "description": "Coppie 'campo:statistica' separate da virgole, ad esempio 'pop:sum,income:mean'. Statistiche: sum, mean, min, max, stddev, count."
              },
              "keep_all": {
                "label": "Mantieni tutto",
                "description": "Mantiene i poligoni privi di geometrie intersecanti (default true). Se false, i poligoni vuoti vengono scartati."
              },
              "shape_sum": {
                "label": "Somma delle forme",
                "description": "Aggiunge il conteggio / la lunghezza / l'area totale della geometria in ingresso intersecata (default true)."
              },
              "group_field": {
                "label": "Campo di raggruppamento",
                "description": "Campo opzionale del layer riepilogato; produce una riga di riepilogo raggruppata per ogni valore distinto."
              }
            }
          },
          "summary_statistics": {
            "name": "Statistiche riassuntive",
            "description": "GROUP BY in stile SQL su uno o più campi caso: per ogni combinazione unica dei campi caso, calcola un elenco di aggregati (campo, statistica) (count/sum/mean/min/max/std/first/last) più un conteggio dei record del gruppo. L'uscita è una pura tabella degli attributi. Senza campo caso produce una singola riga di totale generale (come Summary Statistics di ArcGIS; solo conteggio riproduce Frequency).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale o tabella degli attributi in ingresso da aggregare."
              },
              "statistics": {
                "label": "Statistiche",
                "description": "Elenco separato da punti e virgola o virgole di coppie 'campo statistica' (accetta anche 'campo:statistica'), ad esempio 'population sum; population mean; elev max'. Statistiche: count, sum, mean, min, max, std, first, last."
              },
              "case_fields": {
                "label": "Campi caso",
                "description": "Nome o nomi dei campi di raggruppamento (GROUP BY) opzionali separati da virgole o punti e virgola. Se omessi, viene prodotta un'unica riga di riepilogo sull'intera tabella."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale della tabella in uscita (driver dedotto dalla sua estensione; GeoParquet o CSV). Se omesso, la tabella è memorizzata in memoria. Colonne: i campi di raggruppamento, un 'count' dei record, quindi una colonna '<field>_<statistic>' per ciascuna coppia richiesta."
              }
            }
          },
          "sun_shadow_volume": {
            "name": "Volume d'ombra solare",
            "description": "Estrude solidi 3D lungo il vettore solare fino al suolo per produrre solidi chiusi di volume d'ombra per una data e ora indicate (ArcGIS Sun Shadow Volume). shadow_image, shadow_animation e time_in_daylight lavorano tutti su un DSM raster ed emettono raster, e solar_radiation calcola l'irradianza — nessuno produce geometria d'ombra, quindi domande come \"questa finestra è in ombra\" o \"quanta parte dello spazio aereo di questo lotto è in ombra\" non possono trovare risposta. L'uscita si compone con inside_3d, intersect_3d e union_3d.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Solidi 3D degli edifici o impronte estruse (MultiPolygon a maglia triangolare con Z)."
              },
              "output": {
                "label": "Uscita",
                "description": "Solidi chiusi dei volumi d'ombra. Se omesso, il risultato è memorizzato in memoria."
              },
              "datetime": {
                "label": "Data e ora",
                "description": "Data e ora locali della posizione del sole nella forma 'AAAA-MM-GGTHH:MM' o 'AAAA-MM-GG HH:MM'. Presa come parametro, mai da un orologio, così i risultati sono riproducibili."
              },
              "latitude": {
                "label": "Latitudine",
                "description": "Latitudine in gradi, usata per la geometria solare. Obbligatoria: non può essere derivata senza un motore di proiezione."
              },
              "utc_offset": {
                "label": "Scostamento UTC",
                "description": "Ore rispetto a UTC dell'ora locale fornita (default 0)."
              },
              "adjusted_for_dst": {
                "label": "Corretto per l'ora legale",
                "description": "Considera l'ora fornita come già corretta per l'ora legale, sottraendo un'ora prima del calcolo solare (default false), come in ArcGIS."
              },
              "ground_elevation": {
                "label": "Elevazione del terreno",
                "description": "Z costante del suolo su cui viene proiettata l'ombra. Default: la Z minima propria di ciascuna geometria."
              },
              "max_length": {
                "label": "Lunghezza massima",
                "description": "Limite massimo della distanza di scansione nelle unità del CRS, in modo che un sole basso non produca un prisma lungo chilometri. Default: illimitato."
              }
            }
          },
          "surface_difference": {
            "name": "Differenza tra superfici",
            "description": "Delinea dove una superficie si trova sopra, sotto o allo stesso livello di un'altra come poligoni, ciascuno con classe, area, volume e statistiche di differenza (ArcGIS Surface Difference). cut_fill misura le stesse quantità ma emette solo un raster di etichette di regione e un CSV, quindi le sue regioni non hanno geometria da sovrapporre, ritagliare o unire; surface_volume e polygon_volume misurano rispetto a un piano o all'interno di poligoni già disponibili anziché scoprirli.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster di superficie da classificare."
              },
              "reference": {
                "label": "Riferimento",
                "description": "Superficie di riferimento: il percorso di un raster co-registrato, oppure una quota costante con cui confrontarsi rispetto a un datum piatto."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer poligonale in uscita delle regioni classificate. Se omesso, il risultato è memorizzato in memoria."
              },
              "output_raster": {
                "label": "Raster in uscita",
                "description": "Raster della differenza con segno in uscita (ingresso meno riferimento). Prodotto sempre; memorizzato in memoria quando non è indicato alcun percorso."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Le differenze entro questo valore da zero sono considerate coincidenti (default 0.0)."
              },
              "min_area": {
                "label": "Area minima",
                "description": "Scarta le regioni più piccole di questa area in unità mappa al quadrato."
              },
              "include_coincident": {
                "label": "Includi i coincidenti",
                "description": "Produce poligoni anche per la classe invariata (default false). Disattivato per impostazione predefinita perché nella maggior parte delle scene si tratta di un unico enorme poligono di sfondo."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 della superficie in ingresso (default 1)."
              },
              "reference_band": {
                "label": "Banda di riferimento",
                "description": "Banda in base 1 della superficie di riferimento (default 1)."
              }
            }
          },
          "surface_parameters": {
            "name": "Parametri di superficie",
            "description": "Pendenza, esposizione o curvatura (mean/profile/tangential/plan/gaussian/casorati/contour_geodesic_torsion) da un DEM tramite un adattamento locale ai minimi quadrati di una superficie quadratica/biquadratica su una distanza di intorno scelta, come ArcGIS Surface Parameters — la controparte adattiva alla scala degli strumenti di terreno inclusi a finestra fissa 3×3.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster di elevazione in ingresso (DEM)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "parameter": {
                "label": "Parametro",
                "description": "Parametro da calcolare: slope (default), aspect, mean_curvature, profile_curvature, tangential_curvature, plan_curvature, gaussian_curvature, casorati_curvature, contour_geodesic_torsion."
              },
              "fit": {
                "label": "Adattamento",
                "description": "Modello di superficie: 'quadratic' (a 6 termini, default) o 'biquadratic' (a 9 termini)."
              },
              "neighborhood_distance": {
                "label": "Distanza dell'intorno",
                "description": "Raggio dell'intorno in unità mappa (default = una dimensione di cella, cioè una finestra 3×3)."
              },
              "neighborhood_type": {
                "label": "Tipo di intorno",
                "description": "'fixed' (default) usa ovunque il raggio completo; 'adaptive' riduce la finestra a 1 cella in prossimità di lacune nei dati o dei bordi."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da leggere, in base 1 (default 1)."
              }
            }
          },
          "surface_volume": {
            "name": "Volume di superficie",
            "description": "Integra una superficie raster rispetto a un piano di riferimento orizzontale, riportando area 2D, area 3D della superficie e volume per la porzione sopra e/o sotto il piano (come Surface Volume di ArcGIS). Analisi di scavo/riporto per movimenti terra e di capacità dei serbatoi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster della superficie di quota in ingresso."
              },
              "reference_plane": {
                "label": "Piano di riferimento",
                "description": "Quota del piano di riferimento rispetto a cui integrare (default 0)."
              },
              "direction": {
                "label": "Direzione",
                "description": "Quale lato del piano integrare: 'above', 'below' o 'both' (default 'above')."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da leggere, in base 1 (default 1)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso CSV opzionale per la tabella dei risultati. Se omesso, i risultati sono restituiti solo nel risultato dell'esecuzione."
              }
            }
          },
          "table_to_geometry": {
            "name": "Da tabella a geometria",
            "description": "Costruisce geometrie lineari o ellittiche da campi tabellari: coppie di coordinate iniziale/finale (XY To Line), origine + rilevamento + distanza (Bearing Distance To Line) o centro + asse maggiore/minore + azimut (Table To Ellipse) — con costruzione di linee planari, geodetiche e lossodromiche.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Tabella degli attributi o layer vettoriale puntuale in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "mode": {
                "label": "Modalità",
                "description": "'xy_to_line', 'bearing_distance' o 'ellipse'."
              },
              "line_type": {
                "label": "Tipo di linea",
                "description": "'geodesic' (default, percorso più breve sull'ellissoide WGS84), 'rhumb' (direzione costante) o 'planar' (segmenti cartesiani rettilinei nelle unità proprie dell'ingresso)."
              },
              "vertex_spacing": {
                "label": "Spaziatura dei vertici",
                "description": "Spaziatura di infittimento per le linee curve (geodesic/rhumb) e spaziatura di campionamento del contorno dell'ellisse, in metri per geodesic/rhumb o in unità del CRS per planar. Default: un numero fisso di segmenti."
              },
              "polygon_output": {
                "label": "Poligono in uscita",
                "description": "Solo per mode=ellipse: produce un poligono riempito anziché un contorno lineare chiuso. Default false."
              },
              "start_x": {
                "label": "X iniziale",
                "description": "mode=xy_to_line: campo che contiene la X / longitudine iniziale."
              },
              "start_y": {
                "label": "Y iniziale",
                "description": "mode=xy_to_line: campo che contiene la Y / latitudine iniziale."
              },
              "end_x": {
                "label": "X finale",
                "description": "mode=xy_to_line: campo che contiene la X / longitudine finale."
              },
              "end_y": {
                "label": "Y finale",
                "description": "mode=xy_to_line: campo che contiene la Y / latitudine finale."
              },
              "x": {
                "label": "X",
                "description": "mode=bearing_distance/ellipse: campo che contiene la X / longitudine dell'origine/del centro."
              },
              "y": {
                "label": "Y",
                "description": "mode=bearing_distance/ellipse: campo che contiene la Y / latitudine dell'origine/del centro."
              },
              "bearing": {
                "label": "Rilevamento",
                "description": "mode=bearing_distance: campo che contiene la direzione in gradi in senso orario da nord."
              },
              "distance": {
                "label": "Distanza",
                "description": "mode=bearing_distance: campo che contiene la distanza percorsa (metri per geodesic/rhumb, unità del CRS per planar)."
              },
              "major": {
                "label": "Maggiore",
                "description": "mode=ellipse: campo che contiene la lunghezza del semiasse maggiore (metri per geodesic/rhumb, unità del CRS per planar)."
              },
              "minor": {
                "label": "Minore",
                "description": "mode=ellipse: campo che contiene la lunghezza del semiasse minore (stesse unità del maggiore)."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "mode=ellipse: campo che contiene la direzione dell'asse maggiore in gradi in senso orario da nord."
              }
            }
          },
          "tabulate_intersection": {
            "name": "Tabula l'intersezione",
            "description": "Riepilogo zonale vettoriale su vettoriale: ripartisce un layer di classi (poligoni per area, linee per lunghezza intersecata o punti per conteggio) tra poligoni di zona, riportando la misura intersecata, la percentuale della zona e campi di somma ponderata per la misura.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer poligonale delle zone, formato rilevato automaticamente (o handle in memoria)."
              },
              "class_features": {
                "label": "Geometrie delle classi",
                "description": "Layer vettoriale delle classi da ripartire tra le zone (i poligoni sono riepilogati per area, le linee per lunghezza intersecata, i punti per conteggio)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "class_field": {
                "label": "Campo classe",
                "description": "Campo categoriale opzionale del layer delle classi; i risultati sono raggruppati per zona x questo valore. Omettere per trattare tutte le geometrie delle classi come un'unica classe."
              },
              "sum_fields": {
                "label": "Campi da sommare",
                "description": "Campi numerici opzionali separati da virgole del layer delle classi da ripartire in ciascuna zona (ponderati per area per i poligoni, per lunghezza per le linee, sommati per i punti)."
              },
              "zone_field": {
                "label": "Campo zona",
                "description": "Campo opzionale che identifica ciascuna zona nell'uscita. Per impostazione predefinita l'indice della geometria della zona."
              }
            }
          },
          "thin_road_network": {
            "name": "Assottiglia la rete stradale",
            "description": "Generalizza una rete stradale per la visualizzazione a piccola scala: nasconde le strade corte e di bassa gerarchia preservando la connettività, segnalando ogni strada come visibile/sfoltita (non distruttivo) come ArcGIS Thin Road Network.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale lineare in ingresso delle strade, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "min_length": {
                "label": "Lunghezza minima",
                "description": "Le strade più corte di questo valore (unità del CRS) sono candidate al diradamento. Le strade più lunghe vengono sempre mantenute."
              },
              "hierarchy_field": {
                "label": "Campo gerarchia",
                "description": "Campo numerico opzionale della classe stradale; valore più basso = più importante (mantenuta più a lungo). I candidati vengono diradati partendo dal numero di classe più alto."
              },
              "visibility_field": {
                "label": "Campo visibilità",
                "description": "Nome del campo del contrassegno di visibilità in uscita (1 = mantenuta, 0 = diradata). Default 'visible'."
              },
              "keep_only": {
                "label": "Mantieni solo",
                "description": "Se true, produce solo le strade visibili anziché contrassegnarle tutte. Default false (non distruttivo)."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Distanza entro la quale gli estremi delle strade sono considerati lo stesso incrocio. Default 1e-6."
              }
            }
          },
          "tile_grid_polygons": {
            "name": "Poligoni della griglia di tessere",
            "description": "Emette i confini delle tessere di mappa web come poligoni per un livello di zoom (o un intervallo) e un'estensione, ciascuno con z/x/y e la sua quadkey (ArcGIS Map Server Cache Tiling Scheme To Polygons, Create Vector Tile Index, Generate Tile Cache Tiling Scheme). Gli strumenti di griglia rettangolare/esagonale inclusi costruiscono griglie arbitrarie nel CRS in ingresso e non possono coincidere con il quadtree WebMercator usato dagli strumenti PMTiles e raster_to_tiles.",
            "params": {
              "zoom": {
                "label": "Zoom",
                "description": "Livello di zoom. Da usare con 'max_zoom' per produrre una piramide di livelli."
              },
              "max_zoom": {
                "label": "Zoom massimo",
                "description": "Zoom massimo opzionale; se indicato, viene prodotto ogni livello da 'zoom' a 'max_zoom'."
              },
              "extent": {
                "label": "Estensione",
                "description": "Layer raster o vettoriale opzionale i cui limiti ritagliano la griglia. In sua assenza, l'intero mondo a quel livello di zoom (fatto salvo 'max_tiles')."
              },
              "bbox": {
                "label": "Riquadro di delimitazione",
                "description": "Estensione esplicita opzionale nella forma 'min_lon,min_lat,max_lon,max_lat' in gradi. Prevale su 'extent'."
              },
              "scheme": {
                "label": "Schema",
                "description": "'xyz' (default, Google/OSM, la y cresce verso il basso a partire da nord) o 'tms' (la y cresce verso l'alto a partire da sud)."
              },
              "output_crs": {
                "label": "CRS di uscita",
                "description": "'EPSG:3857' (default, tessere quadrate) o 'EPSG:4326' (quadrilateri lon/lat)."
              },
              "max_tiles": {
                "label": "Tessere massime",
                "description": "Limite massimo rigido al numero di tessere (default 1000000); superarlo genera un errore che indica il conteggio calcolato."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer poligonale in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "time_series_clustering": {
            "name": "Clustering di serie temporali",
            "description": "Raggruppa le celle di un cubo spazio-temporale H3 per similarità delle loro serie temporali (valore, profilo z-normalizzato o correlazione) con k-medoids deterministico, così i luoghi che evolvono in modo simile si raggruppano insieme, come ArcGIS Time Series Clustering.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale in ingresso in EPSG:4326 (lon/lat) con un campo di marca temporale."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo della marca temporale (numerico o data/data-ora ISO-8601)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer poligonale H3 in uscita con cluster_id/is_medoid. Se omesso, il risultato è memorizzato in memoria."
              },
              "num_clusters": {
                "label": "Numero di cluster",
                "description": "Numero di cluster k (default 4)."
              },
              "characteristic": {
                "label": "Caratteristica",
                "description": "Distanza tra serie temporali: 'value' (grezza), 'profile' (normalizzata in punteggi z, default) o 'correlation' (1 − r)."
              },
              "time_step": {
                "label": "Passo temporale",
                "description": "Ampiezza di un passo temporale: un numero semplice (time_field numerico) o una durata come '1w', '7d', '12h'. Default '1w'."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo numerico opzionale sommato in ciascun gruppo. Default: conteggio dei punti per gruppo."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Risoluzione H3 da 0 (la più grossolana) a 15 (la più fine); default 7 (celle di ~5 km²)."
              },
              "seed": {
                "label": "Seme",
                "description": "Seme casuale per l'inizializzazione riproducibile dei medoidi (default 1)."
              }
            }
          },
          "time_series_cross_correlation": {
            "name": "Correlazione incrociata di serie temporali",
            "description": "Correlazione incrociata ritardata per cella tra due pile raster spazio-temporali allineate (come Time Series Cross Correlation / Multidimensional Raster Correlation di ArcGIS): per ogni cella, opzionalmente rimuove tendenza/stagionalità, quindi correla la serie A con la serie B su min_lag..=max_lag e riporta il lag migliore e la sua correlazione di Pearson, più una correlazione opzionale a lag 0 e uno pseudo valore p con dimensione campionaria effettiva di Pyper-Peterman. Il complemento a due variabili e sensibile al lag degli strumenti per cubi a serie singola generate_trend_raster / change_point_detection — nulla di incluso mette in relazione due variabili nel tempo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Pila A: un raster multibanda (una banda per passo temporale) OPPURE un elenco separato da virgole di percorsi di raster a banda singola co-registrati in ordine temporale."
              },
              "secondary": {
                "label": "Secondario",
                "description": "Pila B: stessa forma e stessa lunghezza di 'input' (raster multibanda o elenco di raster a banda singola separati da virgole)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster del lag migliore in uscita (lag intero che massimizza |correlazione|). Se omesso, il risultato è memorizzato in memoria."
              },
              "corr_output": {
                "label": "Correlazione in uscita",
                "description": "Raster opzionale in uscita della correlazione di Pearson (con segno) al lag migliore."
              },
              "corr0_output": {
                "label": "Correlazione 0 in uscita",
                "description": "Raster opzionale in uscita della correlazione al lag 0 (contemporanea)."
              },
              "pvalue_output": {
                "label": "Valore p in uscita",
                "description": "Raster opzionale in uscita di uno pseudo p-value bilaterale al lag migliore (dimensione campionaria efficace di Pyper-Peterman + z di Fisher)."
              },
              "min_lag": {
                "label": "Lag minimo",
                "description": "Lag minimo in passi temporali (default -6). A[t] viene appaiato con B[t+lag]."
              },
              "max_lag": {
                "label": "Lag massimo",
                "description": "Lag massimo in passi temporali (default 6). Deve essere >= min_lag."
              },
              "detrend": {
                "label": "Rimuovi la tendenza",
                "description": "Se true, sottrae un trend lineare OLS per ciascuna serie prima di calcolare la correlazione (default false)."
              },
              "deseasonalize": {
                "label": "Rimuovi la stagionalità",
                "description": "Se true, sottrae un ciclo stagionale additivo di periodo 'season_length' per ciascuna serie prima di calcolare la correlazione (default false)."
              },
              "season_length": {
                "label": "Lunghezza della stagione",
                "description": "Periodo stagionale (in passi temporali) usato quando 'deseasonalize' è true (default 12)."
              },
              "min_valid": {
                "label": "Minimo validi",
                "description": "Numero minimo di coppie valide sovrapposte necessarie per calcolare la correlazione a un dato lag (default 5)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 da leggere quando una pila è indicata come elenco di raster a banda singola separati da virgole (default 1). Ignorata per le pile multibanda."
              }
            }
          },
          "time_series_forecast": {
            "name": "Previsione di serie temporali",
            "description": "Previsione per posizione su un cubo spazio-temporale H3 (come ArcGIS Exponential Smoothing / Curve Fit Forecast): prevede in avanti la serie di ogni cella tramite lisciamento esponenziale di Holt o adattamenti di curve polinomiali, scegliendo per cella il modello con il minor RMSE di riserva, con previsioni al passo successivo/finale e una semi-ampiezza di confidenza al 90%. La previsione temporale che trend_surface spaziale incluso non può fare.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale in ingresso di eventi con marca temporale (lon/lat)."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo che contiene l'istante di ciascun punto: un numero o una marca temporale ISO-8601."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer poligonale H3 in uscita con gli attributi di previsione. Se omesso, il risultato è memorizzato in memoria."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo numerico da aggregare per gruppo (default: conteggio dei punti)."
              },
              "steps": {
                "label": "Passi",
                "description": "Numero di passi temporali da prevedere in avanti (default 3)."
              },
              "model": {
                "label": "Modello",
                "description": "'auto' (RMSE più basso sull'insieme di validazione; default), 'exp_smoothing', 'linear' o 'parabolic'."
              },
              "holdout": {
                "label": "Campione di riserva",
                "description": "Passi temporali riservati alla validazione/selezione del modello (default 3)."
              },
              "time_step": {
                "label": "Passo temporale",
                "description": "Ampiezza di un passo temporale nelle unità di time_field (default 1)."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Risoluzione H3 da 0 a 15 (default 7)."
              }
            }
          },
          "time_series_smoothing": {
            "name": "Smoothing di serie temporali",
            "description": "Liscia una serie temporale in-sample per posizione (come ArcGIS Time Series Smoothing): raggruppa le geometrie per id_field, ordina ogni gruppo per time_field e aggiunge un valore lisciato tramite una media mobile all'indietro/centrata/in avanti o un passaggio lineare locale a larghezza di banda adattiva (LOESS). Geometria e tutti gli attributi originali sono preservati. Completa time_series_forecast, che proietta in avanti anziché lisciare la serie osservata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer di geometrie in ingresso di osservazioni con marca temporale."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Campo numerico la cui serie viene lisciata."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo che ordina ciascuna serie: un numero o una marca temporale ISO-8601."
              },
              "id_field": {
                "label": "Campo ID",
                "description": "Campo che identifica ciascuna posizione/serie. Se omesso, tutte le geometrie formano un'unica serie."
              },
              "method": {
                "label": "Metodo",
                "description": "'moving_average' (default) o 'local_linear' (LOESS ad ampiezza di banda adattiva)."
              },
              "window": {
                "label": "Finestra",
                "description": "moving_average: numero di punti nella finestra di media (default 3)."
              },
              "bandwidth": {
                "label": "Larghezza di banda",
                "description": "local_linear: numero di punti più vicini nel tempo usati per ciascun adattamento locale (default 5)."
              },
              "alignment": {
                "label": "Allineamento",
                "description": "Collocazione della finestra di moving_average: 'backward', 'centered' (default) o 'forward'."
              },
              "output_field": {
                "label": "Campo in uscita",
                "description": "Nome del campo lisciato aggiunto (default 'smoothed')."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del layer in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "topo_to_raster": {
            "name": "Da topo a raster",
            "description": "Interpola un DEM idrologicamente corretto da isolinee, punti quotati e linee opzionali dei corsi d'acqua usando un rilassamento a curvatura minima (thin-plate) con imposizione del drenaggio — come ArcGIS Topo To Raster (ANUDEM). A differenza degli interpolatori IDW/TIN/spline inclusi non crea terrazzamenti sulle isolinee e rimuove le depressioni chiuse spurie.",
            "params": {
              "contours": {
                "label": "Isolinee",
                "description": "Layer vettoriale delle isoipse in ingresso (la quota viene letta da elevation_field). È necessario almeno uno tra contours e points."
              },
              "points": {
                "label": "Punti",
                "description": "Layer vettoriale puntuale delle quote spot in ingresso (la quota viene letta da elevation_field)."
              },
              "streams": {
                "label": "Corsi d'acqua",
                "description": "Layer vettoriale lineare opzionale dei corsi d'acqua usato per imporre il drenaggio (inciso nella superficie prima della rimozione dei pozzi)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale del raster DEM in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "elevation_field": {
                "label": "Campo elevazione",
                "description": "Nome del campo numerico della quota nei layer delle isoipse e dei punti. Default: rilevamento automatico (HEIGHT/ELEV/ELEVATION/Z, altrimenti il primo campo numerico)."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita nelle unità del CRS. Default: dimensionata in modo che l'asse più lungo della griglia sia di circa 400 celle."
              },
              "tension": {
                "label": "Tensione",
                "description": "Rigidità della superficie in [0,1]: 0 = thin-plate puro (il più morbido), 1 = membrana tesa. Default 0.35."
              },
              "iterations": {
                "label": "Iterazioni",
                "description": "Numero massimo di iterazioni SOR (default 2000). L'iterazione si arresta in anticipo quando la variazione massima per cella scende al di sotto della tolleranza."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Tolleranza di convergenza: si arresta quando la variazione di cella maggiore in un'iterazione è inferiore a questo valore (unità di quota del CRS). Default 0.01."
              },
              "enforce_drainage": {
                "label": "Imponi il drenaggio",
                "description": "Rimuove i pozzi interni spuri dopo l'interpolazione in modo che il DEM dreni verso i suoi bordi (default true)."
              },
              "stream_burn": {
                "label": "Incisione dei corsi d'acqua",
                "description": "Profondità (unità di quota) di cui abbassare le celle dei corsi d'acqua prima della rimozione dei pozzi, per instradare il deflusso lungo di essi. Default 0 (automatico = 1% del rilievo quando sono forniti i corsi d'acqua)."
              }
            }
          },
          "trace_proximity_events": {
            "name": "Traccia gli eventi di prossimità",
            "description": "Trova gli intervalli in cui due tracce in movimento sono state entro una distanza l'una dall'altra per almeno una durata minima (eventi di prossimità), e opzionalmente traccia i contatti transitivi a valle a partire da entità seme, come ArcGIS Trace Proximity Events.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale con marca temporale (usare un CRS proiettato; le distanze sono in unità mappa)."
              },
              "track_field": {
                "label": "Campo traccia",
                "description": "Campo che identifica ciascuna entità in movimento / traccia."
              },
              "time_field": {
                "label": "Campo tempo",
                "description": "Campo della marca temporale (secondi numerici o ISO-8601)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer lineare in uscita degli eventi di prossimità. Se omesso, il risultato è memorizzato in memoria."
              },
              "search_distance": {
                "label": "Distanza di ricerca",
                "description": "Separazione massima perché due tracce siano 'in prossimità' (unità mappa)."
              },
              "min_duration": {
                "label": "Durata minima",
                "description": "Tempo minimo in prossimità perché sia considerato un evento: secondi o una durata come '5m', '1h' (default 0)."
              },
              "entities": {
                "label": "Entità",
                "description": "ID delle tracce seme opzionali separati da virgole da cui tracciare i contatti a valle (tracciamento dei contatti)."
              },
              "depth": {
                "label": "Profondità",
                "description": "Numero massimo di generazioni di tracciamento a partire dai semi (default: illimitato)."
              }
            }
          },
          "transform_features": {
            "name": "Trasforma elementi",
            "description": "Applica una trasformazione affine (traslazione, rotazione attorno a un ancoraggio, scala per asse, specchiatura) a ogni geometria di un layer vettoriale.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "dx": {
                "label": "Dx",
                "description": "Traslazione applicata a X dopo scalamento/riflessione/rotazione, nelle unità del CRS. Default 0."
              },
              "dy": {
                "label": "Dy",
                "description": "Traslazione applicata a Y dopo scalamento/riflessione/rotazione, nelle unità del CRS. Default 0."
              },
              "angle": {
                "label": "Angolo",
                "description": "Rotazione in senso antiorario attorno all'ancora, in gradi. Default 0."
              },
              "scale_x": {
                "label": "Scala X",
                "description": "Fattore di scala attorno all'ancora lungo X. Default 1."
              },
              "scale_y": {
                "label": "Scala Y",
                "description": "Fattore di scala attorno all'ancora lungo Y. Default 1."
              },
              "mirror_axis": {
                "label": "Asse di specchiatura",
                "description": "Riflessione rispetto all'ancora: NONE (default), X (ribalta Y rispetto all'asse orizzontale) o Y (ribalta X rispetto all'asse verticale)."
              },
              "anchor": {
                "label": "Ancoraggio",
                "description": "Perno per scalamento/riflessione/rotazione: CENTROID (centro del riquadro di delimitazione, default), ORIGIN (0,0) o XY (usa anchor_x/anchor_y)."
              },
              "anchor_x": {
                "label": "Ancoraggio X",
                "description": "Coordinata X dell'ancora; obbligatoria quando anchor=XY."
              },
              "anchor_y": {
                "label": "Ancoraggio Y",
                "description": "Coordinata Y dell'ancora; obbligatoria quando anchor=XY."
              }
            }
          },
          "transform_fields": {
            "name": "Trasforma campi",
            "description": "Standardizza, trasforma e codifica i campi attributo (come ArcGIS Standardize/Transform/Encode Field): z-score, min-max, robusta, log/log1p/sqrt/boxcox/inversa, classificazione a intervallo uguale/quantile/deviazione standard e codifica one-hot.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale (o tabella) in ingresso con i campi da trasformare."
              },
              "fields": {
                "label": "Campi",
                "description": "Nomi dei campi da trasformare separati da virgole; a ciascuno viene applicata la stessa trasformazione."
              },
              "transform": {
                "label": "Trasformazione",
                "description": "Trasformazione da applicare: zscore, minmax, robust, log, log1p, sqrt, boxcox, inverse, bin, onehot."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer vettoriale in uscita con i campi trasformati aggiunti. Se omesso, il risultato è memorizzato in memoria."
              },
              "bins": {
                "label": "Classi dell'istogramma",
                "description": "Numero di classi per 'bin' (default 5)."
              },
              "bin_method": {
                "label": "Metodo di classificazione",
                "description": "Metodo di classificazione per 'bin': equal_interval (default), quantile o std_dev."
              },
              "boxcox_lambda": {
                "label": "Lambda di Box-Cox",
                "description": "Lambda fisso per 'boxcox'; se omesso, viene stimato per massima verosimiglianza (ricerca a sezione aurea)."
              },
              "suffix": {
                "label": "Suffisso",
                "description": "Suffisso del nome del campo in uscita (il valore predefinito dipende dalla trasformazione, ad esempio '_z' per zscore)."
              },
              "drop_input": {
                "label": "Scarta l'ingresso",
                "description": "Se true, rimuove dall'uscita il campo o i campi originali dopo la trasformazione (default false)."
              }
            }
          },
          "transform_route_events": {
            "name": "Trasforma eventi di rotta",
            "description": "Ri-referenzia gli eventi puntuali misurati rispetto a un sistema di percorsi sorgente su un sistema di percorsi di destinazione: recupera l'XY di ogni evento dal suo percorso e misura sorgente, quindi lo ricolloca sul percorso di destinazione più vicino entro una tolleranza di cluster, emettendo l'ID e la misura del percorso di destinazione — come ArcGIS Transform Route Events.",
            "params": {
              "source_events": {
                "label": "Eventi sorgente",
                "description": "Layer degli eventi puntuali in ingresso. Ogni geometria contiene un identificativo di rotta (route_id_field) e una misura (measure_field)."
              },
              "source_routes": {
                "label": "Percorsi sorgente",
                "description": "Sistema di rotte di origine: layer lineare le cui geometrie sono identificate da route_id_field. Le misure sono la distanza dal primo vertice di ciascuna rotta."
              },
              "target_routes": {
                "label": "Percorsi di destinazione",
                "description": "Sistema di rotte di destinazione: layer lineare su cui gli eventi vengono ricollocati. Gli identificativi delle rotte provengono da target_id_field."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale puntuale in uscita (driver dedotto dall'estensione). Se omesso, il risultato è memorizzato in memoria."
              },
              "route_id_field": {
                "label": "Campo ID percorso",
                "description": "Campo che indica l'identificativo di rotta in source_events e source_routes (default 'route_id'). Se il campo è assente -> viene usato l'indice della geometria della rotta di origine."
              },
              "measure_field": {
                "label": "Campo misura",
                "description": "Campo numerico di source_events che contiene la misura nel sistema di origine (default 'measure')."
              },
              "target_id_field": {
                "label": "Campo ID di destinazione",
                "description": "Campo che indica l'identificativo di rotta in target_routes (default: uguale a route_id_field). Se il campo è assente -> viene usato l'indice della geometria della rotta di destinazione."
              },
              "cluster_tolerance": {
                "label": "Tolleranza di cluster",
                "description": "Distanza XY massima (unità del CRS) dalla posizione dell'evento ricostruita a una rotta di destinazione perché l'evento venga trasferito. Il valore 0 o l'omissione significano nessun limite (aggancia sempre alla rotta di destinazione più vicina)."
              }
            }
          },
          "transpose_fields": {
            "name": "Trasponi campi",
            "description": "Rimodella una tabella degli attributi in formato largo in formato lungo: ogni colonna di valori elencata diventa una riga propria, etichettata con la colonna da cui proviene (ArcGIS Transpose Fields). pivot_table va solo da lungo a largo, quindi le tabelle che arrivano con una colonna per periodo non potevano essere fornite agli strumenti per serie temporali che necessitano di una riga per osservazione.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer vettoriale o tabella in ingresso."
              },
              "transpose_fields": {
                "label": "Trasponi campi",
                "description": "Colonne di valori da spivotare, separate da virgole o punti e virgola."
              },
              "value_field": {
                "label": "Campo valore",
                "description": "Nome della colonna in uscita che contiene il valore della cella (default 'VALUE')."
              },
              "transposed_field": {
                "label": "Campo trasposto",
                "description": "Nome della colonna in uscita che contiene il nome della colonna di origine (default 'FIELD')."
              },
              "field_labels": {
                "label": "Etichette dei campi",
                "description": "Etichette opzionali scritte in 'transposed_field' al posto dei nomi grezzi delle colonne, ad esempio '2000,2010,2020'. Devono avere la stessa lunghezza di 'transpose_fields'."
              },
              "retain_fields": {
                "label": "Campi da mantenere",
                "description": "Attributi copiati su ogni riga in uscita. Per impostazione predefinita tutti i campi non trasposti."
              },
              "drop_nulls": {
                "label": "Scarta i valori nulli",
                "description": "Salta le righe in uscita il cui valore è nullo (default false)."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "trim_line": {
            "name": "Accorcia linea",
            "description": "Elimina i brevi segmenti lineari pendenti (sporgenze e speroni) più corti di una tolleranza di lunghezza, mantenendo le intersezioni vere e le linee lunghe.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale lineare in ingresso, formato rilevato automaticamente (o handle in memoria)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso vettoriale opzionale in uscita (driver dalla sua estensione). Se omesso, memorizzato in memoria."
              },
              "dangle_length": {
                "label": "Lunghezza dei tratti pendenti",
                "description": "Tolleranza di lunghezza nelle unità del CRS. Un segmento pendente più corto di questo valore viene rifilato; quelli più lunghi vengono mantenuti. Deve essere positiva."
              },
              "keep_short": {
                "label": "Mantieni i corti",
                "description": "Se true (default), i segmenti corti non connessi a nessuna delle due estremità (isolati) vengono mantenuti; se false vengono anch'essi eliminati. I segmenti pendenti a una sola estremità vengono sempre rifilati quando sono corti."
              },
              "snap_tolerance": {
                "label": "Tolleranza di aggancio",
                "description": "Gli estremi entro questa distanza (unità del CRS) sono considerati lo stesso nodo. Default 1e-6."
              }
            }
          },
          "union_3d": {
            "name": "Unione 3D",
            "description": "Calcola il volume combinato di solidi 3D chiusi sovrapposti senza contare due volte le loro intersezioni, più i volumi di sovrapposizione per coppia (ArcGIS Union 3D). Nessuno dei due registri ha alcuna sovrapposizione 3D, quindi sommare le capsule di buffer_3d o gli involucri di minimum_bounding_volume oggi conta due volte ogni sovrapposizione; polygon_volume e surface_volume misurano solo rispetto a un piano di riferimento. I volumi per solido sono esatti (somma di tetraedri con segno); l'unione è stimata per occupazione di voxel a una risoluzione riportata.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Geometrie solide 3D chiuse (MultiPolygon a maglia triangolare con Z, come quelli prodotti da buffer_3d e minimum_bounding_volume)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale della tabella in uscita dei volumi per gruppo. Se omesso, il risultato è memorizzato in memoria."
              },
              "group_field": {
                "label": "Campo di raggruppamento",
                "description": "Campo opzionale; i solidi vengono uniti all'interno di ciascun valore di gruppo anziché sull'intero layer."
              },
              "output_overlap_table": {
                "label": "Tabella delle sovrapposizioni in uscita",
                "description": "Percorso opzionale per i volumi di sovrapposizione per coppia. Se omesso, il risultato è memorizzato in memoria (viene comunque restituito)."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Campioni voxel per asse usati per stimare il volume dell'unione, da 4 a 512 (default 96). Valori più alti sono più accurati e più lenti."
              }
            }
          },
          "unwrap_phase": {
            "name": "Srotola la fase",
            "description": "Converte la fase interferometrica avvolta in (-pi, pi] in un campo assoluto continuo tramite minimi quadrati ponderati, risolti con gradiente coniugato precondizionato, con ponderazione e mascheramento opzionali per coerenza (ArcGIS Unwrap Phase). Nulla in nessuno dei due registri srotola la fase — raster_calculator non può esprimere la risoluzione globale e i filtri speckle inclusi lisciano anziché srotolare — quindi l'uscita di fase di sar_coherence e flatten_interferogram non hanno attualmente alcun punto di arrivo continuo.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster della fase avvolta in radianti, oppure un interferogramma I/Q a due bande."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster della fase continua srotolata. Se omesso, il risultato è memorizzato in memoria."
              },
              "method": {
                "label": "Metodo",
                "description": "'least_squares_pcg' (default), corrispondente al metodo supportato da ArcGIS."
              },
              "coherence": {
                "label": "Coerenza",
                "description": "Raster di coerenza co-registrato opzionale usato come pesi per arco nella risoluzione, così che i pixel a bassa coerenza influenzino meno la soluzione."
              },
              "coherence_threshold": {
                "label": "Soglia di coerenza",
                "description": "Maschera i pixel la cui coerenza scende al di sotto di questo valore (default 0.3). Ignorato quando non è indicato alcun raster di coerenza. Una mascheratura che suddivide i pixel validi in componenti disconnesse lascia a ciascuna componente diversa da quella del pixel di riferimento una propria costante additiva arbitraria."
              },
              "max_iterations": {
                "label": "Iterazioni massime",
                "description": "Limite massimo di iterazioni PCG (default 500)."
              },
              "tolerance": {
                "label": "Tolleranza",
                "description": "Residuo relativo a cui la risoluzione si arresta (default 1e-8)."
              },
              "reference_row": {
                "label": "Riga di riferimento",
                "description": "Riga del pixel fissato a zero, che determina la costante additiva della soluzione. Default: il primo pixel valido."
              },
              "reference_col": {
                "label": "Colonna di riferimento",
                "description": "Colonna del pixel fissato. Default: il primo pixel valido."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 che contiene la fase. Ometterla per un raster di fase a banda singola o per un interferogramma I/Q a due bande (che viene allora rilevato automaticamente); indicarla per leggere la fase reale da una banda specifica di una pila multibanda. Un raster con più di due bande RICHIEDE questo parametro, perché tre o più bande non costituiscono una coppia I/Q e tirare a indovinare restituirebbe una fase plausibile ma errata."
              }
            }
          },
          "validate_flow_direction": {
            "name": "Valida la direzione di deflusso",
            "description": "Riporta le celle che rendono inutilizzabile un raster di direzione di flusso — codici che non sono direzioni D8, celle interne senza sbocco, flusso verso nodata, flusso fuori dal bordo e celle su un percorso di flusso circolare — come un layer puntuale di problemi (ArcGIS Validate Flow Direction). La suite idrologica inclusa consuma raster puntatore ovunque (d8_flow_accumulation, watershed, basins, trace_downslope_flowpaths) ma nulla ne valida uno, quindi un raster danneggiato da ricampionamento, riclassificazione o ritaglio produce una risposta sbagliata plausibile anziché un errore, e un ciclo di instradamento può bloccarsi.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster della direzione di flusso (puntatore) da verificare."
              },
              "output": {
                "label": "Uscita",
                "description": "Layer puntuale in uscita, un punto per ciascuna cella problematica. Se omesso, il risultato è memorizzato in memoria."
              },
              "flow_direction_type": {
                "label": "Tipo di direzione di flusso",
                "description": "'d8' (default) per codici singoli potenze di due, oppure 'mfd' dove un valore può essere la somma di più direzioni."
              },
              "report_edge_outflow": {
                "label": "Riporta il deflusso ai bordi",
                "description": "Segnala le celle il cui deflusso esce dal raster (default false). È normale su un confine reale, mentre è un difetto vero su un interno ritagliato."
              },
              "check_circular": {
                "label": "Verifica la circolarità",
                "description": "Rileva i percorsi di deflusso circolari (default true)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda in base 1 che contiene le direzioni (default 1)."
              }
            }
          },
          "vector_convert": {
            "name": "Converti vettoriale",
            "description": "Converte un dataset vettoriale in un altro formato (l'estensione di uscita seleziona il driver).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale in ingresso (formato rilevato automaticamente) o handle in memoria."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita; il driver è dedotto dalla sua estensione (.geojson, .fgb, .shp, .gpkg, .parquet, ...). Se omesso, il layer è memorizzato in memoria."
              }
            }
          },
          "vector_to_h3": {
            "name": "Da vettoriale a celle H3",
            "description": "Raggruppa un layer vettoriale in celle della griglia globale discreta H3, contando le geometrie per cella.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale in ingresso (deve essere in lon/lat geografiche, EPSG:4326) o handle in memoria."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del vettoriale in uscita; il driver è dedotto dalla sua estensione (.geojson, .fgb, .parquet, ...). Se omesso, il layer è memorizzato in memoria."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Risoluzione H3 da 0 (la più grossolana) a 15 (la più fine); default 8 (celle di ~0,7 km²)."
              }
            }
          },
          "vector_to_pmtiles": {
            "name": "Da vettoriale a PMTiles",
            "description": "Impacchetta un layer vettoriale in un unico archivio PMTiles (piramide di Mapbox Vector Tile).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale in ingresso (GeoJSON, Shapefile, GeoPackage, FlatGeobuf, GeoParquet, ...)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del file PMTiles in uscita (ad esempio /work/roads.pmtiles)."
              },
              "min_zoom": {
                "label": "Zoom minimo",
                "description": "Livello di zoom minimo (default 0)."
              },
              "max_zoom": {
                "label": "Zoom massimo",
                "description": "Livello di zoom massimo (default 14, massimo 18)."
              },
              "layer_name": {
                "label": "Nome del layer",
                "description": "Nome del layer all'interno delle tessere, usato per la stilizzazione (default: il nome del layer in ingresso)."
              },
              "simplify": {
                "label": "Semplifica",
                "description": "Semplifica le geometrie per ciascun livello di zoom (default true)."
              },
              "drop_rate": {
                "label": "Tasso di scarto",
                "description": "Frequenza con cui le geometrie vengono scartate agli zoom bassi, come in tippecanoe (default: nessuno scarto)."
              }
            }
          },
          "voxel_isosurface": {
            "name": "Isosuperficie di voxel",
            "description": "Estrae un'isosuperficie triangolata a uno o più valori di soglia da un campo voxel 3D tramite marching tetrahedra (ArcGIS Export Voxel Isosurface). L'intera suite di isolinee in entrambi i registri è 2D — linee da un piano; questo è l'analogo volumetrico, che trasforma l'uscita di idw_3d o di un raster multidimensionale in geometria renderizzabile. Emette la convenzione di mesh triangolare usata da buffer_3d e minimum_bounding_volume, quindi i risultati alimentano direttamente inside_3d.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Campo di voxel come raster multibanda: la banda k è la fetta Z a z_min + k * z_spacing."
              },
              "values": {
                "label": "Valori",
                "description": "Valore o valori di soglia: un numero, un array JSON di numeri o una stringa separata da virgole. Una superficie per ciascun valore."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso di uscita opzionale per le superfici a maglia triangolare. Se omesso, il risultato è memorizzato in memoria."
              },
              "z_min": {
                "label": "Z minimo",
                "description": "Coordinata Z della prima fetta (default 0)."
              },
              "z_spacing": {
                "label": "Spaziatura Z",
                "description": "Spaziatura verticale tra le fette (default 1)."
              },
              "close_boundaries": {
                "label": "Chiudi i confini",
                "description": "Chiude le superfici dove incontrano il bordo del volume in modo che il risultato delimiti un solido chiuso (default true). Realizzato facendo avanzare un guscio aggiuntivo al di sotto dell'isovalore, così la chiusura è saldata alla superficie; essa si colloca tra il piano di confine e una cella oltre di esso. In questo modo vengono sigillate solo le facce ESTERNE: le celle a contatto con no-data interni vengono saltate, per cui una sacca di no-data che interseca la superficie estratta lascia comunque un bordo aperto (una sacca interamente interna o esterna all'isolinea non incontra mai la maglia)."
              },
              "smooth": {
                "label": "Liscia",
                "description": "Iterazioni di lisciamento laplaciano applicate alla maglia estratta (default 0)."
              }
            }
          },
          "warp_raster": {
            "name": "Deforma raster",
            "description": "Georeferenzia un raster da punti di controllo a terra (come ArcGIS Warp): adatta un polinomio di ordine 1/2/3 da coppie GCP pixel sorgente → coordinate del mondo e ricampiona in una nuova griglia georeferenziata (più vicino/bilineare), riportando i residui per GCP e l'errore RMS. La metà raster della storia di conflazione che rubbersheet_features vettoriale già copre.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Raster in ingresso (la sua griglia di pixel costituisce lo spazio di coordinate di origine)."
              },
              "gcps": {
                "label": "GCP",
                "description": "Punti di controllo a terra come quadruple 'col,row,x,y' separate da ';' (>= 3 per l'ordine 1, 6 per l'ordine 2, 10 per l'ordine 3)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster georiferito in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "transform": {
                "label": "Trasformazione",
                "description": "Ordine polinomiale: 'poly1' (affine; default), 'poly2' o 'poly3'."
              },
              "resampling": {
                "label": "Ricampionamento",
                "description": "'nearest' (default) o 'bilinear'."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita nelle unità del mondo reale (default: larghezza dell'ingresso mappata sull'estensione di destinazione)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Codice EPSG da assegnare al CRS in uscita (opzionale)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da deformare, in base 1 (default 1)."
              }
            }
          },
          "weighted_voronoi": {
            "name": "Voronoi pesato",
            "description": "Raster di allocazione di Voronoi ponderato (aree di mercato/dominanza): assegna ogni cella al sito con la minore distanza ponderata — moltiplicativa (d/w, Apollonio), additiva (d-w) o di potenza (d²-w²) — come ArcGIS Generate Weighted Voronoi. La versione a siti disuguali di voronoi_diagram incluso, non ponderato.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Layer puntuale dei siti in ingresso."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster di allocazione in uscita (indice del sito in base 1 per ciascuna cella). Se omesso, il risultato è memorizzato in memoria."
              },
              "weight_field": {
                "label": "Campo peso",
                "description": "Campo numerico che indica il peso/l'attrattività di ciascun sito (default: tutti i siti hanno peso 1)."
              },
              "weight_type": {
                "label": "Tipo di peso",
                "description": "'multiplicative' (d/w; default), 'additive' (d-w) o 'power' (d²-w²)."
              },
              "cell_size": {
                "label": "Dimensione della cella",
                "description": "Dimensione della cella in uscita nelle unità del CRS (default: estensione / 400)."
              },
              "margin": {
                "label": "Margine",
                "description": "Frazione dell'estensione dei siti di cui allargare il raster (default 0.1)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG da assegnare all'uscita (default: quello del layer in ingresso)."
              }
            }
          },
          "write_geoparquet": {
            "name": "Scrivi GeoParquet",
            "description": "Converte un dataset vettoriale (GeoJSON, Shapefile, FlatGeobuf, GeoPackage, ...) in GeoParquet, ordinato secondo Hilbert e compresso ZSTD per impostazione predefinita.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file vettoriale in ingresso (formato rilevato automaticamente) o handle in memoria."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del file GeoParquet in uscita (ad esempio /work/data.parquet)."
              },
              "compression": {
                "label": "Compressione",
                "description": "Compressione delle colonne: zstd (default), snappy, gzip o uncompressed."
              },
              "hilbert_sort": {
                "label": "Ordinamento di Hilbert",
                "description": "Ordina le geometrie lungo una curva di Hilbert per garantire la località spaziale (default true)."
              }
            }
          },
          "write_pmtiles": {
            "name": "Da raster a PMTiles",
            "description": "Renderizza un raster in un unico archivio PMTiles (piramide di tessere PNG in Web Mercator).",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "Percorso del file raster in ingresso. Deve avere un CRS sorgente (EPSG o WKT)."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del file PMTiles in uscita (ad esempio /work/dem.pmtiles)."
              },
              "min_zoom": {
                "label": "Zoom minimo",
                "description": "Livello di zoom minimo (default: un unico zoom nativo corrispondente alla risoluzione del raster)."
              },
              "max_zoom": {
                "label": "Zoom massimo",
                "description": "Livello di zoom massimo (default: uguale a min_zoom)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda da renderizzare, in base 1 (default 1)."
              },
              "colormap": {
                "label": "Mappa dei colori",
                "description": "Mappa di colori: viridis (default), magma, turbo, terrain o grayscale."
              },
              "method": {
                "label": "Metodo",
                "description": "Metodo di ricampionamento: bilinear (default), nearest, cubic."
              },
              "min": {
                "label": "Minimo",
                "description": "Valore mappato sull'estremo inferiore della mappa di colori (default: il minimo della banda)."
              },
              "max": {
                "label": "Massimo",
                "description": "Valore mappato sull'estremo superiore della mappa di colori (default: il massimo della banda)."
              }
            }
          },
          "zonal_characterization": {
            "name": "Caratterizzazione zonale",
            "description": "Calcola le statistiche di più raster di valori su un unico raster di zone in un solo passaggio, con una statistica per raster e percentili arbitrari, come ArcGIS Zonal Characterization.",
            "params": {
              "zones": {
                "label": "Zone",
                "description": "Raster delle zone; ogni valore distinto definisce una zona."
              },
              "rasters": {
                "label": "Raster",
                "description": "Voci 'percorso:statistica[:nome]' separate da virgole, ad esempio 'dem.tif:mean,ndvi.tif:median'. I raster dei valori usano la banda 1. Statistiche: mean, sum, min, max, range, stddev, median, majority, minority, variety, count, percentile."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso opzionale della tabella delle statistiche in uscita. Se omesso, il risultato è memorizzato in memoria."
              },
              "percentile": {
                "label": "Percentile",
                "description": "Percentile (0-100) applicato a ogni raster la cui statistica è 'percentile' (default 50)."
              },
              "zone_band": {
                "label": "Banda delle zone",
                "description": "Banda in base 1 da leggere dal raster delle zone (default 1)."
              },
              "ignore_nodata": {
                "label": "Ignora il nodata",
                "description": "Salta le celle no-data nei raster dei valori (default true). Se false, un qualsiasi no-data in una zona rende nulla la statistica di quella zona."
              }
            }
          },
          "zonal_fill": {
            "name": "Riempimento zonale",
            "description": "Riempie ogni zona di un raster categorico con il valore minimo di un raster di pesi trovato lungo il confine di quella zona (come ArcGIS Zonal Fill) — un mattone per superfici vincolate assente dalla suite inclusa (fill è basato sul flusso, zonal_statistics riassume soltanto).",
            "params": {
              "zones": {
                "label": "Zone",
                "description": "Raster categoriale delle zone (ogni valore intero distinto è una zona)."
              },
              "weight": {
                "label": "Peso",
                "description": "Raster dei pesi co-registrato il cui minimo al contorno riempie ciascuna zona."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster in uscita. Se omesso, il risultato è memorizzato in memoria."
              }
            }
          },
          "zonal_geometry": {
            "name": "Geometria zonale",
            "description": "Misure geometriche per zona da un raster di zone categorico (come ArcGIS Zonal Geometry): area, perimetro, spessore, centroide e asse maggiore/minore + orientamento dell'ellisse di deviazione standard — la controparte sulla forma delle zone che zonal_statistics e zonal_histogram inclusi, basati sui valori, non forniscono.",
            "params": {
              "zones": {
                "label": "Zone",
                "description": "Raster categoriale delle zone (ogni valore intero distinto è una zona)."
              },
              "output": {
                "label": "Uscita",
                "description": "Raster in uscita (modalità raster) o percorso CSV (modalità as_table). Se omesso, il risultato è memorizzato in memoria / restituito solo nel risultato."
              },
              "measure": {
                "label": "Misura",
                "description": "Misura in modalità raster: 'area' (default), 'perimeter', 'thickness', 'centroid_x', 'centroid_y', 'major_axis', 'minor_axis' o 'orientation'."
              },
              "as_table": {
                "label": "Come tabella",
                "description": "Se true, produce una riga per ciascuna zona con tutte le misure anziché un raster per cella (default false)."
              }
            }
          },
          "zonal_histogram": {
            "name": "Istogramma zonale",
            "description": "Tabula la distribuzione delle celle di un raster di valori all'interno di ogni zona: conteggi di classe (categorico) o frequenze per classi (continuo), come tabella incrociata zone x classi.",
            "params": {
              "zones": {
                "label": "Zone",
                "description": "Percorso del file raster delle zone (ID di zona interi/categoriali)."
              },
              "value": {
                "label": "Valore",
                "description": "Percorso del file raster dei valori; deve condividere la griglia di 'zones'."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del CSV in uscita: una riga per ciascuna zona, una colonna per ciascuna classe/gruppo."
              },
              "mode": {
                "label": "Modalità",
                "description": "'classes' (default) tratta ogni valore arrotondato come una classe a sé, per raster di valori interi/categoriali. 'bins' raggruppa i valori continui in gruppi di uguale ampiezza."
              },
              "bins": {
                "label": "Classi dell'istogramma",
                "description": "Numero di gruppi di uguale ampiezza per la modalità 'bins'. Default 10."
              },
              "percent": {
                "label": "Percentuale",
                "description": "Produce la percentuale di ciascuna classe sulle celle valide della zona anziché i conteggi grezzi delle celle. Default false."
              },
              "zone_band": {
                "label": "Banda delle zone",
                "description": "Banda in base 1 da leggere da 'zones'. Default 1."
              },
              "value_band": {
                "label": "Banda dei valori",
                "description": "Banda in base 1 da leggere da 'value'. Default 1."
              },
              "long_output": {
                "label": "Formato lungo in uscita",
                "description": "Percorso CSV opzionale per la variante in formato lungo (zone,class,count,percent)."
              }
            }
          },
          "extract_cog_subset": {
            "name": "Estrai sottoinsieme COG",
            "description": "Estrae un sottoinsieme per riquadro di delimitazione da un Cloud Optimized GeoTIFF locale o HTTP.",
            "params": {
              "input": {
                "label": "Ingresso",
                "description": "File COG locale. Fornire input oppure url."
              },
              "url": {
                "label": "URL",
                "description": "URL COG HTTP(S). Fornire url oppure input; le sorgenti HTTP usano richieste di intervalli di byte."
              },
              "bbox": {
                "label": "Riquadro di delimitazione",
                "description": "Riquadro di delimitazione come minX,minY,maxX,maxY in bbox_crs."
              },
              "bbox_crs": {
                "label": "CRS del riquadro di delimitazione",
                "description": "Codice EPSG delle coordinate del riquadro di delimitazione."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del COG in uscita."
              },
              "level": {
                "label": "Livello",
                "description": "Livello di panoramica del COG da leggere; 0 è la risoluzione piena."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Dimensione obiettivo del pixel in uscita. Usa le unità di output_crs quando output_crs è impostato; altrimenti le unità di bbox_crs. Seleziona la panoramica COG più vicina quando il livello è omesso."
              },
              "output_crs": {
                "label": "CRS di uscita",
                "description": "Codice EPSG opzionale in uscita. Se impostato, il sottoinsieme viene riproiettato in questo CRS. Per i CRS di origine che non possono essere scritti come metadati EPSG, per impostazione predefinita si usa bbox_crs."
              },
              "nodata": {
                "label": "Nodata",
                "description": "Valore nodata opzionale in uscita. Usato come riempimento nella riproiezione e scritto come metadato nodata dell'uscita."
              }
            }
          },
          "extract_wms_subset": {
            "name": "Estrai sottoinsieme WMS",
            "description": "Richiede un sottoinsieme per riquadro di delimitazione da un endpoint WMS GetMap e lo scrive come COG Deflate.",
            "params": {
              "url": {
                "label": "URL",
                "description": "URL dell'endpoint WMS."
              },
              "layers": {
                "label": "Layer",
                "description": "Nome o nomi dei layer WMS, separati da virgole."
              },
              "styles": {
                "label": "Stili",
                "description": "Nome o nomi degli stili WMS, separati da virgole. Per impostazione predefinita vuoto."
              },
              "bbox": {
                "label": "Riquadro di delimitazione",
                "description": "Riquadro di delimitazione come minX,minY,maxX,maxY in bbox_crs."
              },
              "bbox_crs": {
                "label": "CRS del riquadro di delimitazione",
                "description": "Codice EPSG delle coordinate del riquadro di delimitazione."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del COG in uscita."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Dimensione obiettivo del pixel in uscita nelle unità di output_crs quando output_crs è impostato; altrimenti nelle unità di bbox_crs."
              },
              "width": {
                "label": "Larghezza",
                "description": "Larghezza della richiesta in uscita in pixel. Usata quando la risoluzione è omessa."
              },
              "height": {
                "label": "Altezza",
                "description": "Altezza della richiesta in uscita in pixel. Usata quando la risoluzione è omessa."
              },
              "output_crs": {
                "label": "CRS di uscita",
                "description": "Codice EPSG opzionale in uscita/della richiesta. Per impostazione predefinita bbox_crs."
              },
              "format": {
                "label": "Formato",
                "description": "Formato dell'immagine WMS. Per impostazione predefinita image/geotiff."
              },
              "version": {
                "label": "Versione",
                "description": "Versione WMS. Per impostazione predefinita 1.1.1."
              },
              "nodata": {
                "label": "Nodata",
                "description": "Valore nodata opzionale in uscita."
              }
            }
          },
          "extract_xyz_tile_subset": {
            "name": "Estrai sottoinsieme di tessere XYZ",
            "description": "Scarica tessere raster XYZ per un riquadro di delimitazione, le mosaica e scrive un COG RGB Deflate.",
            "params": {
              "url": {
                "label": "URL",
                "description": "Modello di URL delle tessere XYZ, ad esempio https://.../{z}/{x}/{y}.png."
              },
              "zoom": {
                "label": "Zoom",
                "description": "Livello di zoom XYZ."
              },
              "bbox": {
                "label": "Riquadro di delimitazione",
                "description": "Riquadro di delimitazione come minX,minY,maxX,maxY in bbox_crs."
              },
              "bbox_crs": {
                "label": "CRS del riquadro di delimitazione",
                "description": "Codice EPSG delle coordinate del riquadro di delimitazione."
              },
              "output": {
                "label": "Uscita",
                "description": "Percorso del COG in uscita."
              },
              "resolution": {
                "label": "Risoluzione",
                "description": "Dimensione obiettivo del pixel in uscita nelle unità di output_crs. Per impostazione predefinita la risoluzione nativa delle tessere."
              },
              "width": {
                "label": "Larghezza",
                "description": "Larghezza in uscita in pixel. Usata quando la risoluzione è omessa."
              },
              "height": {
                "label": "Altezza",
                "description": "Altezza in uscita in pixel. Usata quando la risoluzione è omessa."
              },
              "output_crs": {
                "label": "CRS di uscita",
                "description": "Codice EPSG opzionale in uscita. Per impostazione predefinita bbox_crs."
              },
              "tile_size": {
                "label": "Dimensione della tessera",
                "description": "Dimensione delle tessere in pixel. Per impostazione predefinita 256."
              },
              "subdomains": {
                "label": "Sottodomini",
                "description": "Lettere opzionali dei sottodomini per {s}, ad esempio abc."
              },
              "nodata": {
                "label": "Nodata",
                "description": "Valore nodata opzionale in uscita usato per i pixel mancanti/trasparenti."
              }
            }
          }
        }
      },
      "whitebox": {
        "categories": {
          "conversion": "Conversione",
          "conversionGeometryTopology": "Conversione - Geometria e topologia",
          "conversionRasterVectorConversion": "Conversione - Conversione raster/vettoriale",
          "conversionVectorTableIO": "Conversione - I/O vettoriale e tabellare",
          "hydrology": "Idrologia",
          "hydrologyDepressionsStorage": "Idrologia - Depressioni e invaso",
          "hydrologyFlowRouting": "Idrologia - Instradamento del deflusso",
          "hydrologyHydrologicIndices": "Idrologia - Indici idrologici",
          "hydrologyStreamsLongitudinalAnalysis": "Idrologia - Corsi d'acqua - Analisi longitudinale",
          "hydrologyStreamsNetworkExtraction": "Idrologia - Corsi d'acqua - Estrazione della rete",
          "hydrologyStreamsOrderingMetrics": "Idrologia - Corsi d'acqua - Metriche di ordinamento",
          "hydrologyWatershedsBasins": "Idrologia - Bacini idrografici",
          "lidarAnalysisMetrics": "LiDAR - Metriche di analisi",
          "lidarFilteringClassification": "LiDAR - Filtraggio e classificazione",
          "lidarIOManagement": "LiDAR - I/O e gestione",
          "lidarInterpolationGridding": "LiDAR - Interpolazione e grigliatura",
          "projectionAndGeoreferencing": "Proiezione e georeferenziazione",
          "raster": "Raster",
          "rasterDistanceCost": "Raster - Distanza e costo",
          "rasterLocalNeighborhood": "Raster - Intorno locale",
          "rasterOverlayMath": "Raster - Algebra di sovrapposizione",
          "rasterReclassifyMask": "Raster - Riclassifica e maschera",
          "rasterSpatialStatistics": "Raster - Statistica spaziale",
          "remoteSensingChangeDetection": "Telerilevamento - Rilevamento dei cambiamenti",
          "remoteSensingClassification": "Telerilevamento - Classificazione",
          "remoteSensingEdgeFeatureDetection": "Telerilevamento - Rilevamento di bordi e caratteristiche",
          "remoteSensingEnhancementContrast": "Telerilevamento - Miglioramento e contrasto",
          "remoteSensingFilters": "Telerilevamento - Filtri",
          "remoteSensingObia": "Telerilevamento - OBIA",
          "remoteSensingRadiometricCorrection": "Telerilevamento - Correzione radiometrica",
          "remoteSensingSar": "Telerilevamento - SAR",
          "remoteSensingSpectralAnalytics": "Telerilevamento - Analisi spettrale",
          "remoteSensingThermalEmissivity": "Telerilevamento - Termico ed emissività",
          "terrain": "Terreno",
          "terrainDerivatives": "Terreno - Derivate",
          "terrainLandformIndices": "Terreno - Indici morfologici",
          "terrainMultiscaleSignatures": "Terreno - Firme multiscala",
          "terrainRoughnessTexture": "Terreno - Rugosità e tessitura",
          "terrainVisibility": "Terreno - Visibilità",
          "terrainWorkflowProducts": "Terreno - Prodotti di flusso di lavoro",
          "vector": "Vettoriale",
          "vectorAttributeAnalysis": "Vettoriale - Analisi degli attributi",
          "vectorGeometryProcessing": "Vettoriale - Elaborazione geometrica",
          "vectorLinearReferencing": "Vettoriale - Riferimento lineare",
          "vectorNetworkAnalysis": "Vettoriale - Analisi di rete",
          "vectorOnlineData": "Vettoriale - Dati online",
          "vectorOverlayAnalysis": "Vettoriale - Analisi di sovrapposizione",
          "vectorSamplingGridding": "Vettoriale - Campionamento e grigliatura",
          "vectorShapeMetrics": "Vettoriale - Metriche di forma",
          "vectorSpatialStatistics": "Vettoriale - Statistica spaziale"
        },
        "menuTool": {
          "calculate_transit_service_frequency": "Calcola frequenza del servizio di trasporto",
          "excel_to_table": "Da Excel a tabella",
          "extract_scanned_features": "Estrai gli elementi scansionati",
          "features_to_gpx": "Da elementi a GPX",
          "features_to_gtfs": "Da elementi a GTFS",
          "gpx_to_features": "Da GPX a elementi",
          "gtfs_to_features": "Da GTFS a elementi",
          "h3_to_vector": "Da celle H3 a poligoni",
          "h3_polyfill": "Riempimento di poligoni H3",
          "kml_to_features": "Da KML a elementi",
          "pmtiles_extract": "Estrai PMTiles",
          "raster_to_h3": "Da raster a celle H3",
          "write_pmtiles": "Da raster a PMTiles",
          "raster_to_tiles": "Da raster a tessere XYZ",
          "read_geoparquet": "Leggi GeoParquet",
          "vector_convert": "Converti vettoriale",
          "vector_to_h3": "Da vettoriale a celle H3",
          "vector_to_pmtiles": "Da vettoriale a PMTiles",
          "write_geoparquet": "Scrivi GeoParquet",
          "fix_dangling_arcs": "Correggi archi pendenti",
          "lines_to_polygons": "Da linee a poligoni",
          "multipart_to_singlepart": "Da multiparte a parte singola",
          "polygons_to_lines": "Da poligoni a linee",
          "remove_polygon_holes": "Rimuovi i fori dei poligoni",
          "singlepart_to_multipart": "Da parte singola a multiparte",
          "topology_rule_autofix": "Correzione automatica delle regole topologiche",
          "topology_rule_validate": "Valida le regole topologiche",
          "topology_validation_report": "Rapporto di validazione topologica",
          "convert_nodata_to_zero": "Converti NoData in zero",
          "modify_nodata_value": "Modifica il valore NoData",
          "new_raster_from_base_raster": "Nuovo raster da raster di base",
          "new_raster_from_base_vector": "Nuovo raster da vettoriale di base",
          "raster_to_vector_lines": "Da raster a linee vettoriali",
          "raster_to_vector_points": "Da raster a punti vettoriali",
          "raster_to_vector_polygons": "Da raster a poligoni vettoriali",
          "remove_raster_polygon_holes": "Rimuovi i fori dei poligoni raster",
          "set_nodata_value": "Imposta il valore NoData",
          "vector_lines_to_raster": "Da linee vettoriali a raster",
          "vector_points_to_raster": "Da punti vettoriali a raster",
          "vector_polygons_to_raster": "Da poligoni vettoriali a raster",
          "add_point_coordinates_to_table": "Aggiungi coordinate dei punti alla tabella",
          "clean_vector": "Pulisci vettoriale",
          "csv_points_to_vector": "Da punti CSV a vettoriale",
          "export_table_to_csv": "Esporta tabella in CSV",
          "join_tables": "Unisci tabelle",
          "merge_table_with_csv": "Unisci tabella con CSV",
          "merge_vectors": "Unisci vettoriali",
          "reinitialize_attribute_table": "Reinizializza la tabella degli attributi",
          "vector_summary_statistics": "Statistiche riassuntive vettoriali",
          "delineate_depressions": "Delimita le depressioni",
          "delineate_mounts": "Delimita i rilievi",
          "enforce_river_monotonicity": "Imponi la monotonicità del fiume",
          "extract_sinks": "Estrai le depressioni",
          "fill_spill_merge": "Fill-Spill-Merge",
          "topo_to_raster": "Da topo a raster",
          "breach_depressions_least_cost": "Sfonda le depressioni a costo minimo",
          "breach_single_cell_pits": "Sfonda le fosse a cella singola",
          "burn_streams": "Incidi i corsi d'acqua",
          "burn_streams_at_roads": "Incidi i corsi d'acqua alle strade",
          "depth_in_sink": "Profondità nella depressione",
          "fill_burn": "Riempi e incidi",
          "fill_depressions": "Riempi le depressioni",
          "fill_depressions_planchon_and_darboux": "Riempi le depressioni (Planchon e Darboux)",
          "fill_depressions_wang_and_liu": "Riempi le depressioni (Wang e Liu)",
          "fill_pits": "Riempi le fosse",
          "flatten_lakes": "Appiattisci i laghi",
          "impoundment_size_index": "Indice di dimensione dell'invaso",
          "insert_dams": "Inserisci dighe",
          "raise_walls": "Innalza argini",
          "sink": "Depressione",
          "stochastic_depression_analysis": "Analisi stocastica delle depressioni",
          "topological_breach_burn": "Sfondamento e incisione topologici",
          "upslope_depression_storage": "Invaso nelle depressioni a monte",
          "average_flowpath_slope": "Pendenza media del percorso di deflusso",
          "average_upslope_flowpath_length": "Lunghezza media del percorso di deflusso a monte",
          "d8_flow_accum": "Accumulo di deflusso D8",
          "d8_mass_flux": "Flusso di massa D8",
          "d8_pointer": "Puntatore D8",
          "dinf_flow_accum": "Accumulo di deflusso D-infinito",
          "dinf_mass_flux": "Flusso di massa D-infinito",
          "dinf_pointer": "Puntatore D-infinito",
          "downslope_flowpath_length": "Lunghezza del percorso di deflusso a valle",
          "fd8_flow_accum": "Accumulo di deflusso FD8",
          "fd8_pointer": "Puntatore FD8",
          "flow_accum_full_workflow": "Flusso di lavoro completo di accumulo del deflusso",
          "flow_length_diff": "Differenza di lunghezza del deflusso",
          "max_upslope_flowpath_length": "Lunghezza massima del percorso di deflusso a monte",
          "max_upslope_value": "Valore massimo a monte",
          "mdinf_flow_accum": "Accumulo di deflusso MD-infinito",
          "minimal_dispersion_flow_algorithm": "Algoritmo di deflusso a dispersione minima",
          "num_inflowing_neighbours": "Numero di vicini affluenti",
          "qin_flow_accumulation": "Accumulo di deflusso di Qin",
          "quinn_flow_accumulation": "Accumulo di deflusso di Quinn",
          "rho8_flow_accum": "Accumulo di deflusso Rho8",
          "rho8_pointer": "Puntatore Rho8",
          "trace_downslope_flowpaths": "Traccia i percorsi di deflusso a valle",
          "depth_to_water": "Profondità della falda",
          "distance_to_outlet": "Distanza dallo sbocco",
          "downslope_distance_to_stream": "Distanza a valle fino al corso d'acqua",
          "downslope_index": "Indice a valle",
          "edge_contamination": "Contaminazione dei bordi",
          "elev_relative_to_watershed_min_max": "Quota relativa al min-max del bacino",
          "elevation_above_stream": "Quota sul corso d'acqua",
          "elevation_above_stream_euclidean": "Quota sul corso d'acqua (euclidea)",
          "find_noflow_cells": "Trova celle senza deflusso",
          "find_parallel_flow": "Trova deflusso parallelo",
          "hydrologic_connectivity": "Connettività idrologica",
          "relative_stream_power_index": "Indice di potenza relativa del corso d'acqua",
          "sediment_transport_index": "Indice di trasporto solido",
          "wetness_index": "Indice di umidità",
          "farthest_channel_head": "Testata di canale più lontana",
          "find_main_stem": "Trova l'asta principale",
          "length_of_upstream_channels": "Lunghezza dei canali a monte",
          "long_profile": "Profilo longitudinale",
          "long_profile_from_points": "Profilo longitudinale da punti",
          "extract_streams": "Estrai i corsi d'acqua",
          "extract_valleys": "Estrai le valli",
          "prune_vector_streams": "Pota i corsi d'acqua vettoriali",
          "raster_streams_to_vector": "Da corsi d'acqua raster a vettoriale",
          "rasterize_streams": "Rasterizza i corsi d'acqua",
          "remove_short_streams": "Rimuovi i corsi d'acqua brevi",
          "repair_stream_vector_topology": "Ripara la topologia vettoriale dei corsi d'acqua",
          "river_centerlines": "Assi fluviali",
          "hack_stream_order": "Ordine gerarchico di Hack",
          "horton_ratios": "Rapporti di Horton",
          "horton_stream_order": "Ordine gerarchico di Horton",
          "shreve_stream_magnitude": "Magnitudine di Shreve",
          "strahler_order_basins": "Bacini per ordine di Strahler",
          "strahler_stream_order": "Ordine gerarchico di Strahler",
          "stream_link_class": "Classe del tratto fluviale",
          "stream_link_identifier": "Identificativo del tratto fluviale",
          "stream_link_length": "Lunghezza del tratto fluviale",
          "stream_link_slope": "Pendenza del tratto fluviale",
          "stream_slope_continuous": "Pendenza continua del corso d'acqua",
          "topological_stream_order": "Ordine topologico dei corsi d'acqua",
          "tributary_identifier": "Identificativo degli affluenti",
          "vector_stream_network_analysis": "Analisi della rete idrografica vettoriale",
          "basins": "Bacini",
          "flood_order": "Ordine di allagamento",
          "hillslopes": "Versanti",
          "isobasins": "Isobacini",
          "jenson_snap_pour_points": "Aggancia i punti di scarico (Jenson)",
          "longest_flowpath": "Percorso di deflusso più lungo",
          "max_branch_length": "Lunghezza massima del ramo",
          "snap_pour_points": "Aggancia i punti di scarico",
          "subbasins": "Sottobacini",
          "unnest_basins": "Separa i bacini annidati",
          "watershed": "Bacino idrografico",
          "watershed_from_raster_pour_points": "Bacino da punti di scarico raster",
          "assign_projection_lidar": "Assegna proiezione al LiDAR",
          "colourize_based_on_class": "Colora in base alla classe",
          "colourize_based_on_point_returns": "Colora in base ai ritorni del punto",
          "find_flightline_edge_points": "Trova i punti di bordo della linea di volo",
          "individual_tree_detection": "Rilevamento dei singoli alberi",
          "lidar_eigenvalue_features": "Caratteristiche degli autovalori LiDAR",
          "lidar_histogram": "Istogramma LiDAR",
          "lidar_info": "Informazioni LiDAR",
          "lidar_kappa": "Kappa LiDAR",
          "lidar_point_density": "Densità di punti LiDAR",
          "lidar_point_return_analysis": "Analisi dei ritorni dei punti LiDAR",
          "lidar_point_stats": "Statistiche dei punti LiDAR",
          "lidar_ransac_planes": "Piani RANSAC LiDAR",
          "lidar_rooftop_analysis": "Analisi delle coperture LiDAR",
          "normal_vectors": "Vettori normali",
          "classify_buildings_in_lidar": "Classifica edifici nel LiDAR",
          "classify_lidar": "Classifica LiDAR",
          "classify_overlap_points": "Classifica punti di sovrapposizione",
          "clip_lidar_to_polygon": "Ritaglia LiDAR su poligono",
          "erase_polygon_from_lidar": "Cancella poligono dal LiDAR",
          "filter_lidar": "Filtra LiDAR",
          "filter_lidar_by_percentile": "Filtra LiDAR per percentile",
          "filter_lidar_by_reference_surface": "Filtra LiDAR per superficie di riferimento",
          "filter_lidar_classes": "Filtra classi LiDAR",
          "filter_lidar_noise": "Filtra rumore LiDAR",
          "filter_lidar_scan_angles": "Filtra angoli di scansione LiDAR",
          "height_above_ground": "Altezza dal suolo",
          "improved_ground_point_filter": "Filtro dei punti a terra migliorato",
          "individual_tree_segmentation": "Segmentazione dei singoli alberi",
          "lidar_classify_subset": "Classifica sottoinsieme LiDAR",
          "lidar_elevation_slice": "Sezione altimetrica LiDAR",
          "lidar_remove_outliers": "Rimuovi valori anomali LiDAR",
          "lidar_segmentation": "Segmentazione LiDAR",
          "lidar_segmentation_based_filter": "Filtro LiDAR basato sulla segmentazione",
          "modify_lidar": "Modifica LiDAR",
          "normalize_lidar": "Normalizza LiDAR",
          "remove_duplicates": "Rimuovi duplicati",
          "ascii_to_las": "Da ASCII a LAS",
          "las_to_ascii": "Da LAS ad ASCII",
          "las_to_shapefile": "Da LAS a shapefile",
          "lidar_colourize": "Colora LiDAR",
          "lidar_join": "Unisci LiDAR",
          "lidar_shift": "Trasla LiDAR",
          "lidar_tile": "Suddividi LiDAR in tessere",
          "lidar_tophat_transform": "Trasformata top-hat LiDAR",
          "recover_flightline_info": "Recupera informazioni sulle linee di volo",
          "select_tiles_by_polygon": "Seleziona tessere per poligono",
          "sort_lidar": "Ordina LiDAR",
          "split_lidar": "Dividi LiDAR",
          "flightline_overlap": "Sovrapposizione delle linee di volo",
          "lidar_block_maximum": "Massimo per blocco LiDAR",
          "lidar_block_minimum": "Minimo per blocco LiDAR",
          "lidar_construct_vector_tin": "Costruisci TIN vettoriale LiDAR",
          "lidar_contour": "Isoipse LiDAR",
          "lidar_digital_surface_model": "Modello digitale di superficie LiDAR",
          "lidar_hex_bin": "Binning esagonale LiDAR",
          "lidar_hillshade": "Ombreggiatura del rilievo LiDAR",
          "lidar_idw_interpolation": "Interpolazione IDW LiDAR",
          "lidar_nearest_neighbour_gridding": "Grigliatura al vicino più prossimo LiDAR",
          "lidar_radial_basis_function_interpolation": "Interpolazione con funzioni a base radiale LiDAR",
          "lidar_sibson_interpolation": "Interpolazione di Sibson LiDAR",
          "lidar_thin": "Assottiglia LiDAR",
          "lidar_thin_high_density": "Assottiglia LiDAR ad alta densità",
          "lidar_tile_footprint": "Ingombro delle tessere LiDAR",
          "lidar_tin_gridding": "Grigliatura TIN LiDAR",
          "build_network_topology": "Costruisci topologia di rete",
          "closest_facility_network": "Struttura più vicina sulla rete",
          "generate_network_nodes": "Genera nodi di rete",
          "k_shortest_paths_network": "K percorsi più brevi sulla rete",
          "location_allocation_network": "Localizzazione-allocazione sulla rete",
          "map_matching_v1": "Map matching v1",
          "multimodal_od_cost_matrix": "Matrice dei costi OD multimodale",
          "multimodal_routes_from_od": "Percorsi multimodali da OD",
          "multimodal_shortest_path": "Percorso multimodale più breve",
          "network_accessibility_metrics": "Metriche di accessibilità della rete",
          "network_centrality_metrics": "Metriche di centralità della rete",
          "network_connected_components": "Componenti connesse della rete",
          "network_node_degree": "Grado dei nodi della rete",
          "network_od_cost_matrix": "Matrice dei costi OD della rete",
          "network_routes_from_od": "Percorsi di rete da OD",
          "network_service_area": "Area di servizio della rete",
          "network_topology_audit": "Audit della topologia di rete",
          "od_sensitivity_analysis": "Analisi di sensibilità OD",
          "shortest_path_network": "Percorso più breve sulla rete",
          "snap_points_to_network": "Aggancia i punti alla rete",
          "split_lines_at_intersections": "Dividi le linee alle intersezioni",
          "transfer_attributes": "Trasferisci attributi",
          "travelling_salesman_problem": "Problema del commesso viaggiatore",
          "vehicle_routing_cvrp": "Instradamento veicoli CVRP",
          "vehicle_routing_pickup_delivery": "Instradamento veicoli con ritiro e consegna",
          "vehicle_routing_vrptw": "Instradamento veicoli VRPTW",
          "georeference_raster_from_control_points": "Georeferenzia raster da punti di controllo",
          "orthorectification": "Ortorettifica",
          "reproject_lidar": "Riproietta LiDAR",
          "reproject_vector": "Riproietta vettoriale",
          "aggregate_multidimensional_raster": "Aggrega raster multidimensionale",
          "analyze_changes_ccdc": "Analizza i cambiamenti con CCDC",
          "apply_radiometric_calibration": "Applica calibrazione radiometrica",
          "assign_projection_raster": "Assegna proiezione al raster",
          "band_collection_statistics": "Statistiche della collezione di bande",
          "block_statistics": "Statistiche per blocco",
          "boundary_clean": "Pulizia dei confini",
          "cell_position_statistics": "Statistiche della posizione delle celle",
          "cell_statistics": "Statistiche delle celle",
          "classification_accuracy_assessment": "Valutazione dell'accuratezza della classificazione",
          "combine": "Combina",
          "composite_bands": "Componi bande",
          "compute_sar_indices": "Calcola indici SAR",
          "contour_with_barriers": "Isoipse con barriere",
          "convert_sar_units": "Converti unità SAR",
          "coregister_rasters": "Coregistra raster",
          "corridor": "Corridoio",
          "cost_back_link": "Collegamento inverso di costo",
          "cut_fill": "Sterro e riporto",
          "darcy_flow": "Flusso di Darcy",
          "dem_filter": "Filtro DEM",
          "detect_image_anomalies": "Rileva anomalie nell'immagine",
          "diffusion_interpolation_with_barriers": "Interpolazione per diffusione con barriere",
          "dimensional_moving_statistics": "Statistiche mobili dimensionali",
          "empirical_bayesian_kriging": "Kriging bayesiano empirico",
          "euclidean_direction": "Direzione euclidea",
          "expand_shrink": "Espandi / restringi",
          "extract_cog_subset": "Estrai sottoinsieme COG",
          "extract_ocean_winds": "Estrai i venti oceanici",
          "extract_spectra_from_image": "Estrai gli spettri dall'immagine",
          "extract_wms_subset": "Estrai sottoinsieme WMS",
          "extract_xyz_tile_subset": "Estrai sottoinsieme di tessere XYZ",
          "find_argument_statistics": "Trova statistiche di argomento",
          "flatten_interferogram": "Appiattisci l'interferogramma",
          "focal_flow": "Flusso focale",
          "focal_statistics": "Statistiche focali",
          "frequency_comparison": "Confronto di frequenze",
          "fuzzy_overlay": "Sovrapposizione fuzzy",
          "gaussian_geostatistical_simulations": "Simulazioni geostatistiche gaussiane",
          "multidimensional_anomaly": "Genera anomalia multidimensionale",
          "generate_trend_raster": "Genera raster di tendenza",
          "goldstein_phase_filter": "Filtro di fase di Goldstein",
          "idw_3d": "IDW 3D",
          "interpolate_from_spatiotemporal_points": "Interpola da punti spazio-temporali",
          "interpolate_with_barriers": "Interpola con barriere",
          "kernel_density_ratio": "Rapporto di densità kernel",
          "kernel_interpolation_with_barriers": "Interpolazione kernel con barriere",
          "landtrendr": "LandTrendr",
          "las_height_metrics": "Metriche di altezza LAS",
          "line_density": "Densità di linee",
          "line_statistics": "Statistiche delle linee",
          "local_polynomial_interpolation": "Interpolazione polinomiale locale",
          "locate_regions": "Localizza regioni",
          "matched_filter_target_detection": "Rilevamento di bersagli con filtro adattato (CEM/ACE)",
          "maximum_likelihood_classification": "Classificazione a massima verosimiglianza",
          "merge_multidimensional_rasters": "Unisci raster multidimensionali",
          "multicriteria_overlay": "Sovrapposizione multicriterio",
          "multidimensional_principal_components": "Componenti principali multidimensionali",
          "multidimensional_raster_correlation": "Correlazione tra raster multidimensionali",
          "multilook": "Multilook",
          "multitemporal_coherence": "Coerenza multitemporale",
          "observer_points": "Punti di osservazione",
          "optimal_interpolation": "Interpolazione ottimale",
          "path_distance": "Distanza di percorso",
          "percentile_contours": "Isoipse per percentili",
          "point_statistics": "Statistiche dei punti",
          "porous_puff": "Pennacchio poroso",
          "predict_using_trend_raster": "Predici con raster di tendenza",
          "presence_only_prediction": "Previsione con sole presenze",
          "pycnophylactic_interpolation": "Interpolazione picnofilattica",
          "radiometric_terrain_flattening": "Appiattimento radiometrico del terreno",
          "raster_normalize": "Normalizza raster",
          "regression_kriging": "Kriging di regressione",
          "remove_thermal_noise": "Rimuovi il rumore termico",
          "render_raster_png": "Rendi il raster in PNG",
          "reproject_raster": "Riproietta raster",
          "rescale_by_function": "Riscala per funzione",
          "sar_coherence": "Coerenza SAR",
          "slice_raster": "Suddividi il raster in classi",
          "solar_radiation": "Radiazione solare",
          "space_time_kernel_density": "Densità kernel spazio-temporale",
          "spatial_association_between_zones": "Associazione spaziale tra zone",
          "spectral_index": "Indice spettrale",
          "split_raster": "Dividi raster",
          "storage_capacity": "Capacità di invaso",
          "subset_multidimensional_raster": "Sottoinsieme di raster multidimensionale",
          "summarize_categorical_raster": "Riepiloga raster categorico",
          "surface_parameters": "Parametri di superficie",
          "surface_volume": "Volume di superficie",
          "time_series_cross_correlation": "Correlazione incrociata di serie temporali",
          "unwrap_phase": "Srotola la fase",
          "warp_raster": "Deforma raster",
          "weighted_voronoi": "Voronoi pesato",
          "zonal_characterization": "Caratterizzazione zonale",
          "zonal_fill": "Riempimento zonale",
          "zonal_geometry": "Geometria zonale",
          "zonal_histogram": "Istogramma zonale",
          "abs": "Valore assoluto",
          "aggregate_raster": "Aggrega raster",
          "anova": "ANOVA",
          "arccos": "Arcocoseno",
          "arcosh": "Arcocoseno iperbolico",
          "arcsin": "Arcoseno",
          "arctan": "Arcotangente",
          "arsinh": "Arcoseno iperbolico",
          "artanh": "Arcotangente iperbolica",
          "atan2": "Atan2",
          "block_maximum": "Massimo per blocco",
          "block_minimum": "Minimo per blocco",
          "boundary_shape_complexity": "Complessità della forma del confine",
          "ceil": "Arrotonda per eccesso",
          "centroid_raster": "Centroide raster",
          "clip_raster_to_polygon": "Ritaglia raster su poligono",
          "clump": "Raggruppa",
          "cos": "Coseno",
          "cosh": "Coseno iperbolico",
          "create_plane": "Crea piano",
          "crispness_index": "Indice di nitidezza",
          "cross_tabulation": "Tabulazione incrociata",
          "cumulative_distribution": "Distribuzione cumulata",
          "dbscan": "DBSCAN",
          "decrement": "Decremento",
          "edge_proportion": "Proporzione di bordo",
          "equal_to": "Uguale a",
          "erase_polygon_from_raster": "Cancella poligono dal raster",
          "exp": "Esponenziale",
          "exp2": "Esponenziale in base 2",
          "fft_random_field": "Campo casuale FFT",
          "filter_raster_features_by_area": "Filtra elementi raster per area",
          "find_patch_edge_cells": "Trova le celle di bordo della patch",
          "floor": "Arrotonda per difetto",
          "greater_than": "Maggiore di",
          "greater_than_or_equal_to": "MaggioreOUgualeA",
          "heat_map": "Mappa di calore",
          "idw_interpolation": "Interpolazione IDW",
          "image_autocorrelation": "Autocorrelazione dell'immagine",
          "image_correlation": "Correlazione tra immagini",
          "image_regression": "Regressione tra immagini",
          "increment": "Incremento",
          "inplace_add": "Somma sul posto",
          "inplace_divide": "Divisione sul posto",
          "inplace_multiply": "Moltiplicazione sul posto",
          "inplace_subtract": "Sottrazione sul posto",
          "integer_division": "Divisione intera",
          "inverse_pca": "PCA inversa",
          "is_nodata": "È NoData",
          "kappa_index": "Indice kappa",
          "ks_normality_test": "Test di normalità KS",
          "less_than": "Minore di",
          "less_than_or_equal_to": "MinoreOUgualeA",
          "list_unique_values_raster": "Elenca valori univoci (raster)",
          "ln": "Logaritmo naturale",
          "log10": "Logaritmo in base 10",
          "log2": "Logaritmo in base 2",
          "map_features": "Mappa gli elementi",
          "max": "Massimo",
          "min": "Minimo",
          "modified_shepard_interpolation": "Interpolazione di Shepard modificata",
          "narrowness_index": "Indice di strettezza",
          "negate": "Nega",
          "nibble": "Nibble",
          "not_equal_to": "Diverso da",
          "ordinary_cokriging": "Interpolazione con cokriging ordinario",
          "paired_sample_t_test": "Test t per campioni appaiati",
          "phi_coefficient": "Coefficiente phi",
          "principal_component_analysis": "Analisi delle componenti principali",
          "print_geotiff_tags": "Stampa i tag GeoTIFF",
          "quantiles": "Quantili",
          "radial_basis_function_interpolation": "Interpolazione con funzioni a base radiale",
          "radius_of_gyration": "Raggio di girazione",
          "random_field": "Campo casuale",
          "random_forest_classification_fit": "Adatta classificazione random forest",
          "random_forest_classification_predict": "Predici classificazione random forest",
          "random_forest_regression_fit": "Adatta regressione random forest",
          "random_forest_regression_predict": "Predici regressione random forest",
          "random_sample": "Campione casuale",
          "raster_area": "Area del raster",
          "raster_calculator": "Calcolatrice raster",
          "raster_cell_assignment": "Assegnazione delle celle raster",
          "raster_histogram": "Istogramma raster",
          "raster_perimeter": "Perimetro del raster",
          "raster_summary_stats": "Statistiche riassuntive del raster",
          "reciprocal": "Reciproco",
          "rescale_value_range": "Riscala l'intervallo di valori",
          "root_mean_square_error": "Errore quadratico medio",
          "round": "Arrotonda",
          "shape_complexity_index_raster": "Indice di complessità di forma raster",
          "sieve": "Setaccia",
          "sin": "Seno",
          "sinh": "Seno iperbolico",
          "sqrt": "Radice quadrata",
          "square": "Quadrato",
          "tan": "Tangente",
          "tanh": "Tangente iperbolica",
          "tin_interpolation": "Interpolazione TIN",
          "to_degrees": "In gradi",
          "to_radians": "In radianti",
          "trend_surface": "Superficie di tendenza",
          "trend_surface_vector_points": "Superficie di tendenza da punti vettoriali",
          "truncate": "Tronca",
          "turning_bands_simulation": "Simulazione a bande rotanti",
          "two_sample_ks_test": "Test KS a due campioni",
          "wilcoxon_signed_rank_test": "Test dei ranghi con segno di Wilcoxon",
          "z_scores": "Punteggi Z",
          "zonal_statistics": "Statistiche zonali",
          "buffer_raster": "Buffer raster",
          "cost_allocation": "Allocazione di costo",
          "cost_distance": "Distanza di costo",
          "cost_pathway": "Percorso di costo",
          "euclidean_allocation": "Allocazione euclidea",
          "euclidean_distance": "Distanza euclidea",
          "image_correlation_neighbourhood_analysis": "Analisi di vicinato per correlazione di immagini",
          "natural_neighbour_interpolation": "Interpolazione natural neighbour",
          "nearest_neighbour_interpolation": "Interpolazione al vicino più prossimo",
          "add": "Somma",
          "average_overlay": "Sovrapposizione per media",
          "bool_and": "AND logico",
          "bool_not": "NOT logico",
          "bool_or": "OR logico",
          "bool_xor": "XOR logico",
          "count_if": "Conta se",
          "divide": "Dividi",
          "highest_position": "Posizione più alta",
          "lowest_position": "Posizione più bassa",
          "max_absolute_overlay": "Sovrapposizione per massimo assoluto",
          "max_overlay": "Sovrapposizione per massimo",
          "min_absolute_overlay": "Sovrapposizione per minimo assoluto",
          "min_overlay": "Sovrapposizione per minimo",
          "modulo": "Modulo",
          "multiply": "Moltiplica",
          "multiply_overlay": "Sovrapposizione per prodotto",
          "percent_equal_to": "Percentuale uguale a",
          "percent_greater_than": "Percentuale maggiore di",
          "percent_less_than": "Percentuale minore di",
          "pick_from_list": "Scegli da un elenco",
          "power": "Potenza",
          "standard_deviation_overlay": "Sovrapposizione per deviazione standard",
          "subtract": "Sottrai",
          "sum_overlay": "Sovrapposizione per somma",
          "update_nodata_cells": "Aggiorna celle NoData",
          "weighted_overlay": "Sovrapposizione pesata",
          "weighted_sum": "Somma pesata",
          "conditional_evaluation": "Valutazione condizionale",
          "reclass": "Riclassifica",
          "reclass_equal_interval": "Riclassifica per intervalli uguali",
          "geographically_weighted_regression_raster": "Regressione geograficamente pesata (raster)",
          "getis_ord_gi_star_raster": "Gi* di Getis-Ord raster",
          "inhomogeneous_intensity_raster": "Intensità non omogenea (raster)",
          "local_kriging": "Kriging locale",
          "local_morans_i_lisa_raster": "I di Moran locale (LISA) raster",
          "ordinary_kriging": "Kriging ordinario",
          "simple_kriging": "Kriging semplice",
          "spacetime_kriging": "Kriging spazio-temporale",
          "spatial_error_regression_raster": "Regressione con errore spaziale (raster)",
          "spatial_lag_regression_raster": "Regressione con ritardo spaziale (raster)",
          "universal_kriging": "Kriging universale",
          "change_vector_analysis": "Analisi del vettore di cambiamento",
          "image_difference_change_detection": "Rilevamento dei cambiamenti per differenza di immagini",
          "pca_based_change_detection": "Rilevamento dei cambiamenti basato su PCA",
          "post_classification_change": "Cambiamento post-classificazione",
          "write_function_memory_insertion": "Inserimento in memoria della funzione di scrittura",
          "evaluate_training_sites": "Valuta le aree di addestramento",
          "fuzzy_knn_classification": "Classificazione KNN fuzzy",
          "generalize_classified_raster": "Generalizza raster classificato",
          "generalize_with_similarity": "Generalizza per similarità",
          "k_means_clustering": "Clustering K-medie",
          "knn_classification": "Classificazione KNN",
          "knn_regression": "Regressione KNN",
          "logistic_regression": "Regressione logistica",
          "min_dist_classification": "Classificazione a distanza minima",
          "modified_k_means_clustering": "Clustering K-medie modificato",
          "nnd_classification": "Classificazione NND",
          "otsu_thresholding": "Sogliatura di Otsu",
          "parallelepiped_classification": "Classificazione a parallelepipedi",
          "random_forest_classification": "Classificazione con random forest",
          "random_forest_regression": "Regressione con random forest",
          "svm_classification": "Classificazione SVM",
          "svm_regression": "Regressione SVM",
          "canny_edge_detection": "Rilevamento dei bordi di Canny",
          "corner_detection": "Rilevamento degli angoli",
          "laplacian_filter": "Filtro laplaciano",
          "laplacian_of_gaussians_filter": "Filtro laplaciano di gaussiane",
          "prewitt_filter": "Filtro di Prewitt",
          "roberts_cross_filter": "Filtro croce di Roberts",
          "sobel_filter": "Filtro di Sobel",
          "balance_contrast_enhancement": "Miglioramento bilanciato del contrasto",
          "create_colour_composite": "Crea composizione a colori",
          "direct_decorrelation_stretch": "Stiramento per decorrelazione diretta",
          "false_colour_composite": "Composizione a falsi colori",
          "gamma_correction": "Correzione gamma",
          "gaussian_contrast_stretch": "Stiramento gaussiano del contrasto",
          "histogram_equalization": "Equalizzazione dell'istogramma",
          "histogram_matching": "Adattamento dell'istogramma",
          "histogram_matching_two_images": "Adattamento dell'istogramma tra due immagini",
          "ihs_to_rgb": "Da IHS a RGB",
          "min_max_contrast_stretch": "Stiramento del contrasto min-max",
          "mosaic": "Mosaico",
          "mosaic_with_feathering": "Mosaico con sfumatura",
          "normalized_difference_index": "Indice di differenza normalizzata",
          "panchromatic_sharpening": "Pansharpening",
          "percentage_contrast_stretch": "Stiramento del contrasto percentuale",
          "piecewise_contrast_stretch": "Stiramento del contrasto a tratti",
          "resample": "Ricampiona",
          "rgb_to_ihs": "Da RGB a IHS",
          "sigmoidal_contrast_stretch": "Stiramento sigmoidale del contrasto",
          "split_colour_composite": "Separa composizione a colori",
          "standard_deviation_contrast_stretch": "Stiramento del contrasto per deviazione standard",
          "true_colour_composite": "Composizione a colori naturali",
          "adaptive_filter": "Filtro adattivo",
          "anisotropic_diffusion_filter": "Filtro a diffusione anisotropa",
          "bilateral_filter": "Filtro bilaterale",
          "closing": "Chiusura",
          "conservative_smoothing_filter": "Filtro di smoothing conservativo",
          "diff_of_gaussians_filter": "Filtro differenza di gaussiane",
          "diversity_filter": "Filtro di diversità",
          "edge_preserving_mean_filter": "Filtro di media con preservazione dei bordi",
          "emboss_filter": "Filtro a rilievo",
          "fast_almost_gaussian_filter": "Filtro gaussiano rapido approssimato",
          "flip_image": "Capovolgi immagine",
          "frangi_filter": "Filtro di Frangi",
          "gabor_filter_bank": "Banco di filtri di Gabor",
          "gaussian_filter": "Filtro gaussiano",
          "glcm_texture": "Tessitura GLCM",
          "guided_filter": "Filtro guidato",
          "high_pass_bilateral_filter": "Filtro bilaterale passa-alto",
          "high_pass_filter": "Filtro passa-alto",
          "high_pass_median_filter": "Filtro mediano passa-alto",
          "integral_image_transform": "Trasformata a immagine integrale",
          "k_nearest_mean_filter": "Filtro di media dei K vicini",
          "kuwahara_filter": "Filtro di Kuwahara",
          "lee_filter": "Filtro di Lee",
          "lidar_ground_point_filter": "Filtro dei punti a terra LiDAR",
          "line_detection_filter": "Filtro di rilevamento delle linee",
          "line_thinning": "Assottigliamento delle linee",
          "majority_filter": "Filtro di maggioranza",
          "maximum_filter": "Filtro di massimo",
          "mean_filter": "Filtro di media",
          "median_filter": "Filtro mediano",
          "minimum_filter": "Filtro di minimo",
          "non_local_means_filter": "Filtro non-local means",
          "olympic_filter": "Filtro olimpico",
          "opening": "Apertura",
          "percentile_filter": "Filtro di percentile",
          "range_filter": "Filtro di intervallo",
          "remove_spurs": "Rimuovi speroni",
          "savitzky_golay_2d_filter": "Filtro Savitzky-Golay 2D",
          "scharr_filter": "Filtro di Scharr",
          "standard_deviation_filter": "Filtro di deviazione standard",
          "thicken_raster_line": "Ispessisci le linee raster",
          "tophat_transform": "Trasformata top-hat",
          "total_filter": "Filtro somma",
          "unsharp_masking": "Maschera di contrasto",
          "user_defined_weights_filter": "Filtro con pesi definiti dall'utente",
          "wiener_filter": "Filtro di Wiener",
          "build_object_hierarchy_multiscale": "Costruisci gerarchia di oggetti multiscala",
          "classify_objects_ensemble_pro": "Classifica oggetti con ensemble (Pro)",
          "classify_objects_random_forest": "Classifica oggetti con random forest",
          "classify_objects_rules_basic": "Classifica oggetti per regole (base)",
          "classify_objects_rules_hierarchical": "Classifica oggetti per regole gerarchiche",
          "classify_objects_svm": "Classifica oggetti con SVM",
          "evaluate_object_classification_accuracy": "Valuta l'accuratezza della classificazione degli oggetti",
          "evaluate_segmentation_quality_pro": "Valuta la qualità della segmentazione (Pro)",
          "image_segmentation": "Segmentazione dell'immagine",
          "image_slider": "Cursore immagini",
          "image_stack_profile": "Profilo di stack di immagini",
          "obia_audit_report_pro": "Rapporto di audit OBIA (Pro)",
          "obia_batch_orchestrator_pro": "Orchestratore batch OBIA (Pro)",
          "obia_pipeline_basic": "Pipeline OBIA (base)",
          "object_class_probability_maps": "Mappe di probabilità di classe degli oggetti",
          "object_features_context_neighbors": "Caratteristiche oggetto: vicini di contesto",
          "object_features_shape_basic": "Caratteristiche oggetto: forma (base)",
          "object_features_spectral_basic": "Caratteristiche oggetto: spettrali (base)",
          "object_features_texture_glcm_basic": "Caratteristiche oggetto: tessitura GLCM (base)",
          "object_features_topology_relations": "Caratteristiche oggetto: relazioni topologiche",
          "object_uncertainty_diagnostics_pro": "Diagnostica di incertezza degli oggetti (Pro)",
          "objects_boundary_refinement_pro": "Affinamento dei confini degli oggetti (Pro)",
          "objects_enforce_min_mapping_unit": "Applica unità minima cartografabile agli oggetti",
          "polygons_to_segments": "Poligoni in segmenti",
          "propagate_labels_across_hierarchy": "Propaga le etichette lungo la gerarchia",
          "segment_graph_felzenszwalb": "Segmentazione a grafo di Felzenszwalb",
          "segment_multiresolution_hierarchical": "Segmentazione multirisoluzione gerarchica",
          "segment_scale_parameter_optimizer": "Ottimizzatore del parametro di scala della segmentazione",
          "segment_slic_superpixels": "Segmentazione in superpixel SLIC",
          "segment_watershed_markers": "Segmentazione watershed con marcatori",
          "segments_merge_small_regions": "Unisci le regioni piccole dei segmenti",
          "segments_split_low_cohesion": "Dividi i segmenti a bassa coesione",
          "segments_to_polygons": "Segmenti in poligoni",
          "brdf_normalization": "Normalizzazione BRDF",
          "correct_vignetting": "Correggi la vignettatura",
          "dark_object_subtraction": "Sottrazione dell'oggetto scuro",
          "dn_to_toa_reflectance": "Da DN a riflettanza TOA",
          "terrain_corrected_optical_analytics": "Analitica ottica corretta per il terreno",
          "cloude_pottier_decomposition": "Decomposizione di Cloude-Pottier",
          "enhanced_lee_filter": "Filtro di Lee migliorato",
          "freeman_durden_decomposition": "Decomposizione di Freeman-Durden",
          "frost_filter": "Filtro di Frost",
          "gamma_map_filter": "Filtro Gamma MAP",
          "h_alpha_wisart_classification": "Classificazione H-Alpha Wisart",
          "kuan_filter": "Filtro di Kuan",
          "refined_lee_filter": "Filtro di Lee raffinato",
          "wisart_iterative_clustering": "Clustering iterativo Wisart",
          "yamaguchi_4component_decomposition": "Decomposizione di Yamaguchi a 4 componenti",
          "continuum_removal": "Rimozione del continuo",
          "linear_spectral_unmixing": "Spettro-unmixing lineare",
          "minimum_noise_fraction": "Frazione di rumore minima",
          "spectral_angle_mapper": "Spectral Angle Mapper",
          "spectral_library_matching": "Confronto con libreria spettrale",
          "land_surface_temperature_single_channel": "Temperatura superficiale a canale singolo",
          "land_surface_temperature_split_window": "Temperatura superficiale split-window",
          "ndvi_based_emissivity": "Emissività basata su NDVI",
          "assess_route": "Valuta rotta",
          "breakline_mapping": "Mappatura delle linee di rottura",
          "convergence_index": "Indice di convergenza",
          "dem_void_filling": "Riempimento dei vuoti del DEM",
          "deviation_from_mean_elevation": "Scostamento dalla quota media",
          "difference_from_mean_elevation": "Differenza rispetto alla quota media",
          "directional_relief": "Rilievo direzionale",
          "elev_above_pit": "Quota sulla fossa",
          "elev_above_pit_dist": "Distanza della quota sulla fossa",
          "elevation_percentile": "Percentile di quota",
          "embankment_mapping": "Mappatura degli argini",
          "exposure_towards_wind_flux": "Esposizione al flusso del vento",
          "feature_preserving_smoothing": "Smoothing con preservazione delle forme",
          "feature_preserving_smoothing_multiscale": "Smoothing multiscala con preservazione delle forme",
          "fetch_analysis": "Analisi del fetch",
          "fill_missing_data": "Riempi i dati mancanti",
          "find_ridges": "Trova le creste",
          "hillshade": "Ombreggiatura del rilievo",
          "hypsometrically_tinted_hillshade": "Ombreggiatura del rilievo con tinte ipsometriche",
          "local_hypsometric_analysis": "Analisi ipsometrica locale",
          "low_points_on_headwater_divides": "Punti bassi sugli spartiacque di testata",
          "map_off_terrain_objects": "Mappa gli oggetti fuori terreno",
          "max_downslope_elev_change": "Massima variazione di quota a valle",
          "max_upslope_elev_change": "Massima variazione di quota a monte",
          "min_downslope_elev_change": "Minima variazione di quota a valle",
          "multidirectional_hillshade": "Ombreggiatura multidirezionale",
          "num_downslope_neighbours": "Numero di vicini a valle",
          "num_upslope_neighbours": "Numero di vicini a monte",
          "profile": "Profilo",
          "remove_off_terrain_objects": "Rimuovi gli oggetti fuori terreno",
          "ridge_and_valley_vectors": "Vettori di creste e valli",
          "slope_vs_aspect_plot": "Grafico pendenza-esposizione",
          "slope_vs_elev_plot": "Grafico pendenza-quota",
          "smooth_vegetation_residual": "Leviga il residuo di vegetazione",
          "surface_area_ratio": "Rapporto di superficie",
          "topographic_hachures": "Tratteggi topografici",
          "accumulation_curvature": "Curvatura di accumulo",
          "aspect": "Esposizione",
          "casorati_curvature": "Curvatura di Casorati",
          "curvedness": "Curvedness",
          "difference_curvature": "Curvatura differenza",
          "gaussian_curvature": "Curvatura gaussiana",
          "generating_function": "Funzione generatrice",
          "horizontal_excess_curvature": "Curvatura di eccesso orizzontale",
          "maximal_curvature": "Curvatura massima",
          "mean_curvature": "Curvatura media",
          "minimal_curvature": "Curvatura minima",
          "plan_curvature": "Curvatura planare",
          "principal_curvature_direction": "Direzione della curvatura principale",
          "profile_curvature": "Curvatura di profilo",
          "relative_aspect": "Esposizione relativa",
          "ring_curvature": "Curvatura ad anello",
          "rotor": "Rotore",
          "shape_index": "Indice di forma",
          "slope": "Pendenza",
          "tangential_curvature": "Curvatura tangenziale",
          "total_curvature": "Curvatura totale",
          "unsphericity": "Non sfericità",
          "vertical_excess_curvature": "Curvatura di eccesso verticale",
          "elev_relative_to_min_max": "Quota relativa al min-max",
          "geomorphons": "Geomorfoni",
          "hypsometric_analysis": "Analisi ipsometrica",
          "multiscale_topographic_position_class": "Classe di posizione topografica multiscala",
          "pennock_landform_classification": "Classificazione delle forme del rilievo di Pennock",
          "percent_elev_range": "Percentuale dell'escursione altimetrica",
          "relative_topographic_position": "Posizione topografica relativa",
          "max_anisotropy_dev": "Deviazione massima di anisotropia",
          "max_anisotropy_dev_signature": "Firma della deviazione massima di anisotropia",
          "max_difference_from_mean": "Differenza massima dalla media",
          "max_elev_dev_signature": "Firma della deviazione altimetrica massima",
          "max_elevation_deviation": "Deviazione altimetrica massima",
          "multiscale_curvatures": "Curvature multiscala",
          "multiscale_elevated_index": "Indice multiscala di elevazione",
          "multiscale_elevation_percentile": "Percentile di quota multiscala",
          "multiscale_low_lying_index": "Indice multiscala delle aree depresse",
          "multiscale_roughness": "Rugosità multiscala",
          "multiscale_roughness_signature": "Firma della rugosità multiscala",
          "multiscale_std_dev_normals": "Deviazione standard multiscala delle normali",
          "multiscale_std_dev_normals_signature": "Firma della deviazione standard multiscala delle normali",
          "multiscale_topographic_position_image": "Immagine della posizione topografica multiscala",
          "topographic_position_animation": "Animazione della posizione topografica",
          "average_normal_vector_angular_deviation": "Deviazione angolare media del vettore normale",
          "circular_variance_of_aspect": "Varianza circolare dell'esposizione",
          "edge_density": "Densità dei bordi",
          "ruggedness_index": "Indice di scabrezza",
          "spherical_std_dev_of_normals": "Deviazione standard sferica delle normali",
          "standard_deviation_of_slope": "Deviazione standard della pendenza",
          "average_horizon_distance": "Distanza media dall'orizzonte",
          "horizon_angle": "Angolo d'orizzonte",
          "horizon_area": "Area d'orizzonte",
          "openness": "Apertura",
          "shadow_animation": "Animazione delle ombre",
          "shadow_image": "Immagine delle ombre",
          "sky_view_factor": "Fattore di vista del cielo",
          "skyline_analysis": "Analisi dello skyline",
          "time_in_daylight": "Tempo in luce diurna",
          "viewshed": "Bacino visivo",
          "visibility_index": "Indice di visibilità",
          "topo_render": "Resa topografica",
          "add_surface_information": "Aggiungi informazioni di superficie",
          "add_z_information": "Aggiungi informazioni Z",
          "adjust_3d_z": "Regola la Z in 3D",
          "adjust_stream_to_raster": "Adatta il corso d'acqua al raster",
          "aggregate_points": "Aggrega punti",
          "aggregate_polygons": "Aggrega poligoni",
          "align_features": "Allinea elementi",
          "apportion_polygon": "Ripartisci poligono",
          "areal_interpolation": "Interpolazione areale",
          "assign_projection_vector": "Assegna proiezione al vettoriale",
          "attribute_uncertainty": "Incertezza degli attributi",
          "bivariate_spatial_association": "Associazione spaziale bivariata",
          "buffer_3d": "Buffer 3D",
          "build_balanced_zones": "Costruisci zone bilanciate",
          "build_seamlines": "Costruisci linee di giunzione",
          "calculate_adjacent_fields": "Calcola campi adiacenti",
          "calculate_central_meridian_and_parallels": "Calcola meridiano centrale e paralleli",
          "calculate_composite_index": "Calcola indice composito",
          "calculate_distance_band": "Calcola banda di distanza",
          "calculate_end_time": "Calcola ora di fine",
          "calculate_grid_convergence_angle": "Calcola angolo di convergenza del reticolo",
          "calculate_missing_z_values": "Calcola valori Z mancanti",
          "calculate_motion_statistics": "Calcola statistiche di movimento",
          "calculate_polygon_main_angle": "Calcola angolo principale del poligono",
          "calculate_rates": "Calcola tassi",
          "calculate_transformation_errors": "Calcola errori di trasformazione",
          "calculate_utm_zone": "Calcola zona UTM",
          "cartogram": "Cartogramma",
          "causal_inference_analysis": "Analisi di inferenza causale",
          "cell_records_to_sectors": "Da record di celle a settori",
          "central_feature": "Elemento centrale / media direzionale lineare",
          "change_point_detection": "Rilevamento dei punti di cambiamento",
          "collapse_dual_lines_to_centerline": "Riduci le doppie linee a un asse",
          "collapse_hydro_polygon": "Riduci il poligono idrografico",
          "collapse_road_detail": "Riduci il dettaglio stradale",
          "collect_events": "Raccogli eventi",
          "colocation_analysis": "Analisi di colocalizzazione",
          "color_polygons": "Colora poligoni",
          "compare_spatial_weights": "Confronta i pesi spaziali",
          "compute_accuracy_for_object_detection": "Calcola l'accuratezza del rilevamento di oggetti",
          "construct_sight_lines": "Costruisci linee di vista",
          "contiguous_cartogram": "Cartogramma contiguo",
          "contour_list": "Elenco di isoipse",
          "convert_coordinate_notation": "Converti la notazione delle coordinate",
          "cost_connectivity": "Connettività di costo",
          "count_overlapping_features": "Conta gli elementi sovrapposti",
          "create_accuracy_assessment_points": "Crea punti di valutazione dell'accuratezza",
          "create_cartographic_partitions": "Crea partizioni cartografiche",
          "create_overpass": "Crea cavalcavia",
          "create_routes": "Crea rotte",
          "create_spatial_sampling_locations": "Crea siti di campionamento spaziale",
          "create_spatially_balanced_points": "Crea punti spazialmente bilanciati",
          "create_underpass": "Crea sottopasso",
          "cul_de_sac_masks": "Maschere di vicoli ciechi",
          "delineate_built_up_areas": "Delimita le aree edificate",
          "dendrogram": "Dendrogramma",
          "densify_sampling_network": "Densifica la rete di campionamento",
          "detect_bright_ocean_objects": "Rileva oggetti luminosi in mare",
          "detect_dark_ocean_areas": "Rileva aree scure in mare",
          "detect_feature_changes": "Rileva cambiamenti negli elementi",
          "detect_graphic_conflict": "Rileva conflitti grafici",
          "detect_incidents": "Rileva incidenti",
          "dice": "Suddividi a dadi",
          "difference_3d": "Differenza 3D",
          "dimension_reduction": "Riduzione della dimensionalità",
          "directional_distribution": "Distribuzione direzionale",
          "directional_trend": "Tendenza direzionale",
          "disperse_markers": "Disperdi i marcatori",
          "dissolve_route_events": "Dissolvi gli eventi di rotta",
          "edgematch_features": "Raccorda gli elementi ai bordi",
          "eighty_twenty_analysis": "Analisi ottanta-venti",
          "eliminate_polygon_part": "Elimina parte di poligono",
          "eliminate_polygons": "Elimina poligoni",
          "emerging_hot_spot_analysis": "Analisi degli hotspot emergenti",
          "enclose_multipatch": "Chiudi multipatch",
          "estimate_time_to_event": "Stima il tempo all'evento",
          "evaluate_bin_sizes": "Valuta le ampiezze delle classi",
          "evaluate_variable_influence": "Valuta l'influenza delle variabili",
          "exploratory_interpolation": "Interpolazione esplorativa",
          "exploratory_regression": "Regressione esplorativa",
          "extract_locations_from_text": "Estrai località dal testo",
          "extract_water_sar": "Estrai l'acqua (SAR)",
          "extrude_between": "Estrudi tra",
          "feature_outline_masks": "Maschere di contorno degli elementi",
          "feature_to_line": "Da elemento a linea",
          "feature_vertices_to_points": "Da vertici degli elementi a punti",
          "features_to_kml": "Da elementi a KML",
          "fence_diagram": "Diagramma a steccato",
          "fill_missing_values": "Riempi i valori mancanti",
          "find_dwell_locations": "Trova i luoghi di sosta",
          "find_identical": "Trova gli identici",
          "find_meeting_locations": "Trova i luoghi d'incontro",
          "find_space_time_matches": "Trova corrispondenze spazio-temporali",
          "flip_line": "Inverti la linea",
          "forest_based_forecast": "Previsione basata su foreste",
          "generalized_linear_regression": "Regressione lineare generalizzata",
          "generate_breach_lines": "Genera linee di sfondamento",
          "generate_near_table": "Genera tabella di prossimità",
          "generate_network_swm": "Genera SWM di rete",
          "generate_od_links": "Genera collegamenti origine-destinazione",
          "generate_points_along_3d_lines": "Genera punti lungo linee 3D",
          "generate_spatial_weights_matrix": "Genera matrice dei pesi spaziali",
          "generate_subset_polygons": "Genera poligoni di sottoinsieme",
          "generate_transects_along_lines": "Genera transetti lungo le linee",
          "geodetic_densify": "Densifica geodeticamente",
          "geographically_weighted_regression": "Regressione geograficamente pesata",
          "geotagged_photos_to_points": "Da foto geotaggate a punti",
          "graphic_buffer": "Buffer grafico",
          "grid_index_features": "Elementi di griglia indice",
          "group_by_proximity": "Raggruppa per prossimità",
          "hdbscan": "Clustering HDBSCAN",
          "getis_ord_general_g": "Clustering alto/basso (G generale di Getis-Ord)",
          "hot_spot_analysis_comparison": "Confronto di analisi degli hotspot",
          "identify_narrow_polygons": "Identifica i poligoni stretti",
          "incremental_spatial_autocorrelation": "Autocorrelazione spaziale incrementale",
          "inside_3d": "Interno in 3D",
          "integrate": "Integra",
          "interpolate_shape": "Interpola la forma",
          "intersect_3d": "Interseca in 3D",
          "intersect_3d_line_with_surface": "Interseca linea 3D con superficie",
          "intersecting_layers_masks": "Maschere dei layer intersecanti",
          "intervisibility": "Intervisibilità",
          "is_closed_3d": "È chiuso in 3D",
          "line_of_sight": "Linea di vista",
          "local_bivariate_relationships": "Relazioni bivariate locali",
          "local_outlier_analysis": "Analisi locale dei valori anomali",
          "locate_lines_along_routes": "Localizza linee lungo le rotte",
          "median_center": "Centro mediano",
          "merge_divided_roads": "Unisci le carreggiate separate",
          "merge_lines_by_pseudo_node": "Unisci le linee sui pseudo-nodi",
          "minimum_bounding_volume": "Volume minimo circoscritto",
          "multipatch_footprint": "Ingombro del multipatch",
          "multipatch_to_mesh": "Da multipatch a mesh",
          "multiple_ring_buffer": "Buffer ad anelli multipli",
          "mgwr": "Regressione geograficamente pesata multiscala",
          "multivariate_clustering": "Clustering multivariato",
          "near_3d": "Prossimità 3D",
          "neighborhood_summary_statistics": "Statistiche riassuntive di vicinato",
          "non_maximum_suppression": "Soppressione dei non massimi",
          "optics_clustering": "Clustering OPTICS",
          "optimal_corridor_connections": "Connessioni ottimali di corridoio",
          "optimal_path_as_line": "Percorso ottimale come linea",
          "optimized_hot_spot_analysis": "Analisi ottimizzata degli hotspot",
          "optimized_outlier_analysis": "Analisi ottimizzata dei valori anomali",
          "pairwise_comparison_weights": "Pesi da confronto a coppie",
          "pivot_table": "Tabella pivot",
          "points_to_line": "Da punti a linea",
          "points_to_path": "Da punti a tracciato",
          "polygon_neighbors": "Vicini di poligono",
          "polygon_volume": "Volume del poligono",
          "propagate_displacement": "Propaga lo spostamento",
          "raster_domain": "Dominio del raster",
          "raster_to_weighted_points": "Da raster a punti pesati",
          "reclassify_field": "Riclassifica campo",
          "reconstruct_tracks": "Ricostruisci le tracce",
          "reduce_point_density": "Riduci la densità dei punti",
          "regularize_adjacent_building_footprint": "Regolarizza le sagome degli edifici adiacenti",
          "regularize_building_footprints": "Regolarizza le sagome degli edifici",
          "remove_overlap_multiple": "Rimuovi sovrapposizione (multipla)",
          "render_vector_png": "Rendi il vettoriale in PNG",
          "repair_geometry": "Ripara la geometria",
          "resolve_building_conflicts": "Risolvi i conflitti tra edifici",
          "resolve_road_conflicts": "Risolvi i conflitti stradali",
          "ripleys_k": "K di Ripley",
          "rubbersheet_features": "Adatta gli elementi con rubbersheeting",
          "semivariogram_sensitivity": "Sensibilità del semivariogramma",
          "similarity_search": "Ricerca per similarità",
          "simplify_3d_line": "Semplifica linea 3D",
          "simplify_building": "Semplifica edificio",
          "simplify_by_circular_arcs": "Semplifica con archi circolari",
          "simplify_by_tangent_segments": "Semplifica con segmenti tangenti",
          "simplify_shared_edges": "Semplifica i bordi condivisi",
          "smooth_natural_features": "Leviga gli elementi naturali",
          "smooth_shared_edges": "Leviga i bordi condivisi",
          "snap_tracks": "Aggancia le tracce",
          "sort_features": "Ordina gli elementi",
          "spatial_eigenvector_filtering": "Filtraggio con autovettori spaziali (MESF)",
          "spatial_outlier_detection": "Rilevamento dei valori anomali spaziali",
          "spatially_constrained_multivariate_clustering": "Clustering multivariato con vincolo spaziale",
          "split_by_attributes": "Dividi per attributi",
          "split_by_features": "Dividi per elementi",
          "split_line_at_point": "Dividi linea in un punto",
          "stack_profile": "Profilo di stack",
          "strip_map_index_features": "Elementi di indice a strisce",
          "subdivide_polygon": "Suddividi poligono",
          "subset_features": "Sottoinsieme di elementi",
          "summarize_nearby": "Riepiloga nelle vicinanze",
          "summarize_percent_change": "Riepiloga la variazione percentuale",
          "summarize_within": "Riepiloga all'interno",
          "summary_statistics": "Statistiche riassuntive",
          "sun_shadow_volume": "Volume d'ombra solare",
          "surface_difference": "Differenza tra superfici",
          "table_to_geometry": "Da tabella a geometria",
          "tabulate_intersection": "Tabula l'intersezione",
          "thin_road_network": "Assottiglia la rete stradale",
          "tile_grid_polygons": "Poligoni della griglia di tessere",
          "time_series_clustering": "Clustering di serie temporali",
          "time_series_forecast": "Previsione di serie temporali",
          "time_series_smoothing": "Smoothing di serie temporali",
          "trace_proximity_events": "Traccia gli eventi di prossimità",
          "transform_features": "Trasforma elementi",
          "transform_fields": "Trasforma campi",
          "transform_route_events": "Trasforma eventi di rotta",
          "transpose_fields": "Trasponi campi",
          "trim_line": "Accorcia linea",
          "union_3d": "Unione 3D",
          "validate_flow_direction": "Valida la direzione di deflusso",
          "voxel_isosurface": "Isosuperficie di voxel",
          "buffer_vector": "Buffer vettoriale",
          "directional_variogram": "Analisi del variogramma direzionale",
          "estimate_variogram": "Stima il variogramma",
          "fit_variogram": "Adatta il modello di variogramma",
          "add_field": "Aggiungi campo",
          "add_geometry_attributes": "Aggiungi attributi geometrici",
          "attribute_correlation": "Correlazione tra attributi",
          "attribute_histogram": "Istogramma degli attributi",
          "attribute_scattergram": "Diagramma a dispersione degli attributi",
          "delete_field": "Elimina campo",
          "extract_by_attribute": "Estrai per attributo",
          "field_calculator": "Calcolatrice di campi",
          "filter_vector_features_by_area": "Filtra elementi vettoriali per area",
          "list_unique_values": "Elenca valori univoci",
          "rename_field": "Rinomina campo",
          "centroid_vector": "Centroide vettoriale",
          "concave_hull": "Inviluppo concavo",
          "densify_features": "Densifica elementi",
          "eliminate_coincident_points": "Elimina punti coincidenti",
          "extend_vector_lines": "Estendi linee vettoriali",
          "merge_line_segments": "Unisci segmenti di linea",
          "minimum_bounding_box": "Rettangolo minimo circoscritto",
          "minimum_bounding_circle": "Cerchio minimo circoscritto",
          "minimum_bounding_envelope": "Inviluppo minimo circoscritto",
          "minimum_convex_hull": "Inviluppo convesso minimo",
          "polygonize": "Poligonizza",
          "representative_point_vector": "Punto rappresentativo vettoriale",
          "simplify_features": "Semplifica elementi",
          "smooth_vectors": "Leviga vettori",
          "snap_endnodes": "Aggancia nodi terminali",
          "split_vector_lines": "Dividi linee vettoriali",
          "split_with_lines": "Dividi con linee",
          "locate_points_along_routes": "Localizza punti lungo le rotte",
          "points_along_lines": "Punti lungo le linee",
          "route_calibrate": "Calibra rotta",
          "route_event_lines_from_layer": "Linee di eventi di rotta da layer",
          "route_event_lines_from_table": "Linee di eventi di rotta da tabella",
          "route_event_merge": "Unisci eventi di rotta",
          "route_event_overlay": "Sovrapponi eventi di rotta",
          "route_event_points_from_layer": "Punti di eventi di rotta da layer",
          "route_event_points_from_table": "Punti di eventi di rotta da tabella",
          "route_event_split": "Dividi eventi di rotta",
          "route_measure_qa": "Controllo qualità delle misure di rotta",
          "route_recalibrate": "Ricalibra rotta",
          "snap_events_to_routes": "Aggancia eventi alle rotte",
          "download_osm_vector": "Scarica vettoriale da OSM",
          "clip": "Ritaglia",
          "difference": "Differenza",
          "dissolve": "Dissolvi",
          "erase": "Cancella",
          "identity": "Identità",
          "intersect": "Interseca",
          "line_intersections": "Intersezioni di linee",
          "line_polygon_clip": "Ritaglio di linee su poligono",
          "near": "Prossimità",
          "select_by_location": "Seleziona per posizione",
          "spatial_join": "Unione spaziale",
          "symmetrical_difference": "Differenza simmetrica",
          "union": "Unione",
          "update": "Aggiorna",
          "construct_vector_tin": "Costruisci TIN vettoriale",
          "contours_from_points": "Isoipse da punti",
          "contours_from_raster": "Isoipse da raster",
          "extract_nodes": "Estrai nodi",
          "extract_raster_values_at_points": "Estrai valori raster nei punti",
          "find_lowest_or_highest_points": "Trova i punti più bassi o più alti",
          "hexagonal_grid_from_raster_base": "Griglia esagonale su base raster",
          "hexagonal_grid_from_vector_base": "Griglia esagonale su base vettoriale",
          "layer_footprint_raster": "Ingombro del layer raster",
          "layer_footprint_vector": "Ingombro del layer vettoriale",
          "medoid": "Medoide",
          "random_points_in_polygon": "Punti casuali nel poligono",
          "rectangular_grid_from_raster_base": "Griglia rettangolare su base raster",
          "rectangular_grid_from_vector_base": "Griglia rettangolare su base vettoriale",
          "vector_hex_binning": "Binning esagonale vettoriale",
          "voronoi_diagram": "Diagramma di Voronoi",
          "compactness_ratio": "Rapporto di compattezza",
          "deviation_from_regional_direction": "Scostamento dalla direzione regionale",
          "elongation_ratio": "Rapporto di allungamento",
          "hole_proportion": "Proporzione di fori",
          "linearity_index": "Indice di linearità",
          "narrowness_index_vector": "Indice di strettezza vettoriale",
          "patch_orientation": "Orientamento della patch",
          "perimeter_area_ratio": "Rapporto perimetro-area",
          "polygon_area": "Area del poligono",
          "polygon_long_axis": "Asse maggiore del poligono",
          "polygon_perimeter": "Perimetro del poligono",
          "polygon_short_axis": "Asse minore del poligono",
          "related_circumscribing_circle": "Cerchio circoscritto correlato",
          "shape_complexity_index_vector": "Indice di complessità di forma vettoriale",
          "envelope_test": "Test dell'inviluppo",
          "getis_ord_gi_star": "Gi* di Getis-Ord",
          "global_morans_i": "I di Moran globale",
          "hotspot_vs_process": "Hotspot contro processo",
          "inhomogeneous_baseline": "Linea di base non omogenea",
          "local_morans_i_lisa": "I di Moran locale (LISA)",
          "nearest_neighbour_index": "Indice del vicino più prossimo",
          "point_pattern_envelope": "Inviluppo del pattern di punti",
          "point_process_residuals": "Residui del processo di punti",
          "point_process_residuals_comparison": "Confronto dei residui dei processi di punti",
          "quadrat_count_test": "Test di conteggio per quadrati",
          "ripleys_k_function": "Funzione K di Ripley",
          "ripleys_k_test": "Test K di Ripley",
          "spatial_error_regression": "Regressione con errore spaziale",
          "spatial_lag_regression": "Regressione con ritardo spaziale"
        },
        "menuSubcategory": {
          "geolibre_wasm": "GeoLibre (WASM)",
          "geometry_topology": "Geometria e topologia",
          "raster_vector_conversion": "Conversione raster/vettoriale",
          "vector_table_i_o": "I/O vettoriale e tabellare",
          "depressions_storage": "Depressioni e invaso",
          "flow_routing": "Instradamento del deflusso",
          "hydrologic_indices": "Indici idrologici",
          "streams_longitudinal_analysis": "Corsi d'acqua - Analisi longitudinale",
          "streams_network_extraction": "Corsi d'acqua - Estrazione della rete",
          "streams_ordering_metrics": "Corsi d'acqua - Metriche di ordinamento",
          "watersheds_basins": "Bacini idrografici",
          "analysis_metrics": "Metriche di analisi",
          "filtering_classification": "Filtraggio e classificazione",
          "i_o_management": "I/O e gestione",
          "interpolation_gridding": "Interpolazione e grigliatura",
          "network_analysis": "Analisi di rete",
          "general": "Generale",
          "distance_cost": "Distanza e costo",
          "local_neighborhood": "Intorno locale",
          "overlay_math": "Algebra di sovrapposizione",
          "reclassify_mask": "Riclassifica e maschera",
          "spatial_statistics": "Statistica spaziale",
          "change_detection": "Rilevamento dei cambiamenti",
          "classification": "Classificazione",
          "edge_feature_detection": "Rilevamento di bordi e caratteristiche",
          "enhancement_contrast": "Miglioramento e contrasto",
          "filters": "Filtri",
          "obia": "OBIA",
          "radiometric_correction": "Correzione radiometrica",
          "sar": "SAR",
          "spectral_analytics": "Analisi spettrale",
          "thermal_emissivity": "Termico ed emissività",
          "derivatives": "Derivate",
          "landform_indices": "Indici morfologici",
          "multiscale_signatures": "Firme multiscala",
          "roughness_texture": "Rugosità e tessitura",
          "visibility": "Visibilità",
          "workflow_products": "Prodotti di flusso di lavoro",
          "attribute_analysis": "Analisi degli attributi",
          "geometry_processing": "Elaborazione geometrica",
          "linear_referencing": "Riferimento lineare",
          "online_data": "Dati online",
          "overlay_analysis": "Analisi di sovrapposizione",
          "sampling_gridding": "Campionamento e grigliatura",
          "shape_metrics": "Metriche di forma"
        }
      }
    }
  }
}
