{
  "format": "geolibre-language-pack",
  "formatVersion": 1,
  "scope": "whitebox",
  "locale": "pt",
  "name": "Pacote de idioma português para Whitebox",
  "updatedAt": "2026-09-25T16:57:57.200Z",
  "translations": {
    "processing": {
      "toolMeta": {
        "whitebox": {
          "build_object_hierarchy_multiscale": {
            "name": "Construir hierarquia de objetos multiescala",
            "description": "Rede hierárquica de objetos construída por agregação iterativa ao longo de múltiplas escalas de segmentação, fundindo progressivamente segmentos mais finos com base na similaridade espectral e na adjacência espacial. Constrói uma estrutura em árvore na qual os nós folha representam segmentos de escala fina e a raiz representa a imagem inteira. As relações de contenção codificam hierarquias de objetos pai-filho (parte-todo), permitindo análise multirresolução e consultas de objetos adaptativas à escala entre os níveis da hierarquia. Principais recursos: hierarquia de segmentação multiescala; rastreia relações parte-todo; suporta consultas de objetos aninhados; permite análise adaptativa à escala; representação hierárquica eficiente em memória; facilita a classificação em cascata. Casos de uso: mapeamento hierárquico da cobertura do solo; extração de edificações complexas a partir de componentes; detecção de talhões agrícolas; análise de estratos de vegetação; delimitação de distritos urbanos; mapeamento de áreas úmidas com classificação de subcomponentes. Interpretação da saída: a saída é um banco de dados hierárquico de objetos que codifica a estrutura dependente da escala. Consulte objetos em escalas específicas; as escalas intermediárias revelam escalas de objetos de transição que equilibram detalhe e generalização. As relações pai-filho revelam a estrutura composicional. As distribuições estatísticas por nível de escala caracterizam as propriedades de tamanho/forma dos objetos em cada nível da hierarquia, permitindo selecionar a estratégia de classificação ideal para cada escala.",
            "params": {
              "coarse_segments": {
                "label": "Segmentos grosseiros",
                "description": "Raster de segmentos grosseiros."
              },
              "fine_segments": {
                "label": "Segmentos finos",
                "description": "Raster de segmentos finos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de hierarquia de saída."
              }
            }
          },
          "classify_objects_ensemble_pro": {
            "name": "Classificar objetos por conjunto (Pro)",
            "description": "Executa uma configuração de classificação de objetos no estilo de ensemble, ajustada para maior estabilidade em cenas heterogêneas.",
            "params": {
              "features": {
                "label": "Feições",
                "description": "CSV de feições de objetos de entrada (deve incluir segment_id e colunas numéricas de feições)."
              },
              "training": {
                "label": "Treinamento",
                "description": "CSV de treinamento com colunas segment_id e rótulo de classe."
              },
              "segment_id_field": {
                "label": "Campo de ID do segmento",
                "description": "Nome do campo de ID do segmento (padrão segment_id)."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Campo de rótulo de classe no CSV de treinamento (padrão class)."
              },
              "n_trees": {
                "label": "Número de árvores",
                "description": "Número de árvores (padrão 200)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de predições de saída."
              }
            }
          },
          "classify_objects_random_forest": {
            "name": "Classificar objetos por floresta aleatória",
            "description": "Treina um classificador ensemble Random Forest com amostras de treinamento de segmentos rotulados, usando feições espectrais, morfológicas e de textura como preditores. Constrói múltiplas árvores de decisão por amostragem bootstrap e aleatorização de feições e, em seguida, agrega as predições por votação majoritária. A classificação opera sobre vetores de feições por segmento, atribuindo rótulos de classe aos objetos de forma probabilística com base no consenso do ensemble, permitindo uma categorização multiclasse robusta de objetos a partir de feições OBIA. Os principais recursos incluem aprendizado ensemble que combina múltiplas árvores de decisão para uma classificação robusta, tratamento de espaços de feições de alta dimensionalidade típicos de OBIA multiespectral, estimativas de confiança e probabilidade da classificação, ranking de importância das feições que identifica as propriedades discriminantes, tratamento natural de interações não lineares entre feições e robustez a ruído e redundância nas feições. Os casos de uso abrangem classificação multiclasse da cobertura do solo a partir de segmentos OBIA (urbano, agrícola, floresta, água), classificação supervisionada em nível de objeto refinada pela seleção de amostras de treinamento, classificação de detecção de mudanças em sequências temporais de segmentação, classificação hierárquica (tipos de habitat gerais refinados em categorias finas) e integração com amostras de treinamento manuais obtidas por interpretação visual. O rótulo de classe predito na saída identifica o tipo principal do objeto; a probabilidade de confiança indica a certeza da classificação; baixa confiança sugere objetos intermediários ambíguos; a importância das feições identifica quais propriedades espectrais/morfológicas determinam as decisões de classificação; o mapa de classificação representa diretamente a distribuição dos tipos de objetos; a confusão entre classes semelhantes orienta o refinamento do treinamento; a saída probabilística permite quantificar a incerteza.",
            "params": {
              "features": {
                "label": "Feições",
                "description": "CSV de feições de objetos de entrada (deve incluir segment_id e colunas numéricas de feições)."
              },
              "training": {
                "label": "Treinamento",
                "description": "CSV de treinamento com colunas segment_id e rótulo de classe."
              },
              "segment_id_field": {
                "label": "Campo de ID do segmento",
                "description": "Nome do campo de ID do segmento (padrão segment_id)."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Campo de rótulo de classe no CSV de treinamento (padrão class)."
              },
              "n_trees": {
                "label": "Número de árvores",
                "description": "Número de árvores (padrão 200)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de predições de saída."
              }
            }
          },
          "classify_objects_rules_basic": {
            "name": "Classificar objetos por regras (básico)",
            "description": "Aplica uma classificação de objetos transparente baseada em regras a partir de um CSV de regras feição-operador-limiar. Lógica de decisão totalmente interpretável para fluxos de trabalho de especialistas do domínio e conformidade regulatória.",
            "params": {
              "features": {
                "label": "Feições",
                "description": "CSV de feições de objetos de entrada."
              },
              "rules": {
                "label": "Regras",
                "description": "CSV de regras com colunas: feature, op, value, class, [priority]."
              },
              "default_class": {
                "label": "Classe padrão",
                "description": "Classe alternativa quando nenhuma regra corresponde."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de predições de saída."
              }
            }
          },
          "classify_objects_rules_hierarchical": {
            "name": "Classificar objetos por regras hierárquicas",
            "description": "Aplica uma classificação hierárquica de objetos baseada em regras; atualmente usa regras ordenadas com fallback determinístico.",
            "params": {
              "features": {
                "label": "Feições",
                "description": "CSV de feições de objetos de entrada."
              },
              "rules": {
                "label": "Regras",
                "description": "CSV de regras com colunas: feature, op, value, class, [priority]."
              },
              "default_class": {
                "label": "Classe padrão",
                "description": "Classe alternativa quando nenhuma regra corresponde."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de predições de saída."
              }
            }
          },
          "classify_objects_svm": {
            "name": "Classificar objetos por SVM",
            "description": "Classifica objetos usando um fluxo de trabalho no estilo SVM (implementado por meio dos padrões robustos do backend de classificação de objetos).",
            "params": {
              "features": {
                "label": "Feições",
                "description": "CSV de feições de objetos de entrada (deve incluir segment_id e colunas numéricas de feições)."
              },
              "training": {
                "label": "Treinamento",
                "description": "CSV de treinamento com colunas segment_id e rótulo de classe."
              },
              "segment_id_field": {
                "label": "Campo de ID do segmento",
                "description": "Nome do campo de ID do segmento (padrão segment_id)."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Campo de rótulo de classe no CSV de treinamento (padrão class)."
              },
              "n_trees": {
                "label": "Número de árvores",
                "description": "Número de árvores (padrão 200)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de predições de saída."
              }
            }
          },
          "evaluate_object_classification_accuracy": {
            "name": "Avaliar a acurácia da classificação de objetos",
            "description": "Calcula métricas de acurácia da classificação comparando os rótulos de objetos preditos com rótulos de referência (verdade de campo) ou de validação. Gera uma matriz de confusão que documenta os padrões de concordância/discordância da classificação por classe, calcula a acurácia global (total de predições corretas), a acurácia do produtor por classe (taxa de detecção), a acurácia do usuário (confiabilidade), o F1-score (média harmônica), a estatística kappa (concordância corrigida pelo acaso) e uma análise de erros específica por classe que identifica padrões sistemáticos de classificação incorreta. Os principais recursos incluem avaliação abrangente da acurácia em todas as classes, métricas de desempenho por classe que permitem diagnósticos específicos, matriz de confusão que revela padrões sistemáticos de classificação incorreta, teste de significância estatística por meio do coeficiente kappa, tratamento natural de distribuições de classes desbalanceadas e identificação de problemas de adequação dos dados de treinamento. Os casos de uso incluem validação de modelos de classificação e quantificação de desempenho, comparação de abordagens e parâmetros de classificação concorrentes, identificação de classes de objetos problemáticas que exigem treinamento adicional, avaliação da adequação da classificação para aplicações operacionais, seleção de modelos e ajuste de hiperparâmetros baseados em acurácia, garantia de qualidade em fluxos de trabalho de mapeamento automatizado e relato de métricas de acurácia padronizadas para revisão por pares. Na saída, a acurácia global representa a confiabilidade da classificação em todos os objetos; a acurácia do produtor indica a completude da detecção por classe; a acurácia do usuário indica a confiabilidade da predição; um kappa alto (>0.8) indica forte concordância além do acaso; a matriz de confusão revela quais classes são confundidas entre si; a dominância da diagonal indica forte separação entre classes; as entradas fora da diagonal apontam as fontes de classificação incorreta; as métricas específicas por classe orientam melhorias direcionadas no treinamento.",
            "params": {
              "predictions": {
                "label": "Predições",
                "description": "CSV de predições contendo segment_id e predicted_class."
              },
              "reference": {
                "label": "Referência",
                "description": "CSV de referência contendo segment_id e class."
              },
              "segment_id_field": {
                "label": "Campo de ID do segmento",
                "description": "Nome do campo de ID do segmento (padrão segment_id)."
              },
              "predicted_field": {
                "label": "Campo predito",
                "description": "Campo de classe predita (padrão predicted_class)."
              },
              "reference_field": {
                "label": "Campo de referência",
                "description": "Campo de classe de referência (padrão class)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do relatório JSON de saída."
              }
            }
          },
          "evaluate_segmentation_quality_pro": {
            "name": "Avaliar a qualidade da segmentação (Pro)",
            "description": "Calcula diagnósticos de qualidade da segmentação, incluindo estatísticas de contagem de objetos e de sobreposição do rótulo dominante.",
            "params": {
              "segments": {
                "label": "Segmentos",
                "description": "Raster de rótulos de segmentos de entrada."
              },
              "reference": {
                "label": "Referência",
                "description": "Raster opcional de rótulos de referência para diagnósticos baseados em sobreposição."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do relatório JSON de saída."
              }
            }
          },
          "image_segmentation": {
            "name": "Segmentação de imagem",
            "description": "Segmenta pilhas raster multibanda em regiões homogêneas contíguas usando crescimento de regiões com sementes.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única (um por banda)."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Limiar de distância para o crescimento de regiões no espaço de feições padronizado (padrão 0.5)."
              },
              "steps": {
                "label": "Passos",
                "description": "Número de faixas de prioridade de sementes (padrão 10)."
              },
              "min_area": {
                "label": "Área mínima",
                "description": "Área mínima opcional da região para a limpeza pós-mesclagem (padrão 4)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "image_slider": {
            "name": "Controle deslizante de imagens",
            "description": "O Image Slider é uma ferramenta de visualização interativa que permite a comparação direta, em nível de pixel, entre conjuntos de dados raster corregistrados por meio de divisores de sobreposição horizontais ou verticais arrastáveis. Algoritmo: mantém dois conjuntos de dados raster alinhados na memória, renderiza uma visualização combinada com posição ajustável do divisor que controla a visibilidade das camadas, e a interação do usuário ajusta dinamicamente o divisor, criando um efeito de tela dividida. Suporta orientações de divisão horizontal e vertical. Principais recursos: comparação interativa em tempo real, mantém a visualização em resolução total, interface intuitiva que não exige habilidades analíticas, funciona com rasters multiespectrais e indexados, suporta grandes conjuntos de dados por meio de renderização eficiente. Capacidades: visualização de detecção de mudanças, comparação antes/depois, análise multitemporal, avaliação da normalização radiométrica, inspeção visual da acurácia da classificação. Casos de uso: detecção de mudanças nas imagens entre datas, comparação de resultados de classificação com dados de referência, avaliação da eficácia do pré-processamento, detecção visual de mudanças em análises de séries temporais. Aplicações: avaliação de danos na resposta a desastres, monitoramento da expansão urbana, detecção de distúrbios florestais, monitoramento de mudanças agrícolas, controle de qualidade de saídas de processamento de imagens. Interpretação da saída: as diferenças visuais revelam a magnitude e a localização das mudanças; bordas nítidas indicam mudanças significativas; transições graduais sugerem imprecisão de registro ou gradação temporal; diferenças sistemáticas ao longo da imagem revelam artefatos sistemáticos de processamento.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Caminho do raster da imagem esquerda ou objeto raster tipado."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do raster da imagem direita ou objeto raster tipado."
              },
              "label1": {
                "label": "Rótulo 1",
                "description": "Rótulo opcional exibido para a imagem esquerda."
              },
              "left_palette": {
                "label": "Paleta esquerda",
                "description": "Paleta para a imagem esquerda não RGB (padrão grey)."
              },
              "left_reverse_palette": {
                "label": "Inverter paleta esquerda",
                "description": "Inverte a paleta esquerda."
              },
              "label2": {
                "label": "Rótulo 2",
                "description": "Rótulo opcional exibido para a imagem direita."
              },
              "right_palette": {
                "label": "Paleta direita",
                "description": "Paleta para a imagem direita não RGB (padrão grey)."
              },
              "right_reverse_palette": {
                "label": "Inverter paleta direita",
                "description": "Inverte a paleta direita."
              },
              "height": {
                "label": "Altura",
                "description": "Altura de exibição em pixels (padrão 600)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do HTML de saída."
              }
            }
          },
          "image_stack_profile": {
            "name": "Perfil de pilha de imagens",
            "description": "Extrai perfis por ponto ao longo de uma pilha raster ordenada e, opcionalmente, grava um relatório HTML.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Lista de rasters de entrada como uma matriz de caminhos ou uma cadeia delimitada por vírgula/ponto e vírgula."
              },
              "points": {
                "label": "Pontos",
                "description": "Caminho do vetor de pontos (ou objeto vetorial tipado) contendo as localizações das amostras."
              },
              "output_html": {
                "label": "HTML de saída",
                "description": "Caminho opcional de saída do relatório HTML."
              }
            }
          },
          "obia_audit_report_pro": {
            "name": "Relatório de auditoria OBIA (Pro)",
            "description": "Gera um relatório de auditoria para os artefatos de um fluxo de trabalho OBIA, incluindo metadados de existência, tamanho e data/hora dos arquivos.",
            "params": {
              "artifacts": {
                "label": "Artefatos",
                "description": "Matriz de caminhos de artefatos a auditar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do JSON do relatório de auditoria de saída."
              }
            }
          },
          "obia_batch_orchestrator_pro": {
            "name": "Orquestrador de lotes OBIA (Pro)",
            "description": "Executa múltiplas tarefas de pipeline OBIA em uma única solicitação e retorna um relatório consolidado das tarefas.",
            "params": {
              "jobs": {
                "label": "Tarefas",
                "description": "Matriz de objetos de tarefa com inputs, training, output_prefix e segment_method opcional."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do relatório JSON de saída."
              }
            }
          },
          "obia_pipeline_basic": {
            "name": "Fluxo OBIA (básico)",
            "description": "Executa um fluxo de trabalho OBIA completo de ponta a ponta: segmentação (SLIC/Graph), fusão de regiões pequenas, extração de feições espectrais/de forma e classificação random forest em uma única operação.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única para segmentação/feições."
              },
              "training": {
                "label": "Treinamento",
                "description": "CSV de treinamento com colunas segment_id e class."
              },
              "output_prefix": {
                "label": "Prefixo de saída",
                "description": "Prefixo do caminho de saída para os artefatos gerados."
              },
              "segment_method": {
                "label": "Método de segmentação",
                "description": "Método de segmentação: slic ou graph (padrão slic)."
              },
              "min_size": {
                "label": "Tamanho mínimo",
                "description": "Tamanho mínimo do segmento para a limpeza por mesclagem (padrão 10)."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Nome do campo de classe de treinamento (padrão class)."
              }
            }
          },
          "object_class_probability_maps": {
            "name": "Mapas de probabilidade de classe de objeto",
            "description": "Converte predições em mapas de probabilidade por classe, permitindo a visualização da incerteza baseada em raster e a filtragem baseada em confiança. Suporta limiarização de confiança posterior e cenários multirrótulo.",
            "params": {
              "predictions": {
                "label": "Predições",
                "description": "CSV de predições com segment_id e predicted_class."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de probabilidades de saída."
              }
            }
          },
          "object_features_context_neighbors": {
            "name": "Feições de objeto: vizinhos de contexto",
            "description": "Calcula feições de contexto espacial: contagens de objetos adjacentes, comprimentos de fronteiras compartilhadas e métricas de isolamento. Permite uma classificação sensível à vizinhança que captura as relações entre objetos na paisagem.",
            "params": {
              "segments": {
                "label": "Segmentos",
                "description": "Raster de rótulos de segmentos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de saída."
              }
            }
          },
          "object_features_shape_basic": {
            "name": "Feições de objeto: forma (básico)",
            "description": "Calcula descritores geométricos e morfológicos de forma para cada segmento, incluindo área (contagem de pixels), perímetro (comprimento da fronteira), compacidade (circularidade normalizada pelo perímetro), alongamento (razão comprimento/largura), fator de forma (regularidade normalizada da forma) e solidez (eficiência em relação à envoltória convexa). Os descritores de forma capturam características estruturais independentes do conteúdo espectral, permitindo a classificação pela geometria dos objetos e o reconhecimento de padrões morfológicos. Os principais recursos incluem conjuntos abrangentes de métricas de forma que cobrem área, perímetro, regularidade e alongamento, algoritmos de rastreamento de fronteiras computacionalmente eficientes, métricas invariantes à rotação e à translação, aplicabilidade em diferentes faixas de escala e capacidade de classificação morfológica de objetos (por exemplo, estradas alongadas versus edificações compactas). Os casos de uso abrangem classificação de contornos de edificações e análise da estrutura urbana, extração de feições lineares (estradas, rios, limites), caracterização de manchas de vegetação e análise de fragmentação, controle de qualidade por filtragem baseada na forma, reconhecimento hierárquico de objetos combinando propriedades de forma e espectrais, e quantificação da estrutura da paisagem no monitoramento ecológico. Na saída, a área quantifica o tamanho do segmento em pixels; o perímetro define a complexidade da fronteira; compacidade próxima de 1.0 indica formas circulares/regulares, valores menores indicam feições irregulares/alongadas; alongamento >1 indica feições lineares, próximo de 1 indica objetos compactos; o fator de forma combina múltiplas propriedades de forma para uma classificação integrada da forma; as métricas de forma permitem a filtragem morfológica para isolar os tipos de objetos de interesse.",
            "params": {
              "segments": {
                "label": "Segmentos",
                "description": "Raster de rótulos de segmentos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de saída."
              }
            }
          },
          "object_features_spectral_basic": {
            "name": "Feições de objeto: espectral (básico)",
            "description": "Calcula resumos estatísticos univariados abrangentes dos valores de reflectância espectral dentro de cada segmento em todas as bandas da imagem. Os cálculos por segmento incluem a reflectância média, o desvio padrão (homogeneidade), os limites mínimo e máximo de reflectância, valores de quantis para estimativa robusta e estatísticas por banda, permitindo a quantificação da textura multiespectral e a caracterização do perfil espectral, fundamentais para os fluxos de trabalho de classificação OBIA. Os principais recursos incluem geração de estatísticas espectrais por banda para imagens multiespectrais e hiperespectrais, medidas estatísticas robustas que capturam tendência central e dispersão, identificação de anomalias espectrais e valores atípicos dentro dos segmentos, sumarização eficiente de raster para vetor e saída que alimenta diretamente pipelines de classificação por aprendizado de máquina. Os casos de uso abrangem extração de feições para classificação baseada em objetos usando métricas espectrais, identificação de tipos de cobertura do solo por análise de assinaturas espectrais, detecção de mudanças por comparação de estatísticas espectrais em sequências temporais, avaliação da qualidade dos dados e detecção de valores atípicos, monitoramento ambiental por análise de séries temporais espectrais e aplicações de agricultura de precisão que exigem caracterização normalizada da resposta espectral. Na saída, os valores médios representam a resposta espectral típica do material do segmento; o desvio padrão quantifica a heterogeneidade interna (baixo = superfície homogênea, alto = materiais mistos ou sombras); os limites mín/máx identificam os extremos espectrais dentro dos segmentos; os perfis espectrais permitem a comparação com assinaturas de referência; as estatísticas formam a base dos vetores de feições para classificação; a análise por banda revela índices espectrais e a capacidade de discriminação de materiais.",
            "params": {
              "segments": {
                "label": "Segmentos",
                "description": "Raster de rótulos de segmentos de entrada."
              },
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única usados para feições espectrais."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de saída."
              }
            }
          },
          "object_features_texture_glcm_basic": {
            "name": "Feições de objeto: textura GLCM (básico)",
            "description": "Extrai características de textura usando a análise da matriz de coocorrência de níveis de cinza (GLCM), calculada a partir das distribuições de intensidade por banda dentro de cada segmento. A GLCM quantifica a coocorrência espacial dos níveis de tonalidade, gerando descritores que incluem contraste (variação local), homogeneidade (regularidade espacial), energia (ordenação), entropia (desordem) e métricas de dissimilaridade que capturam padrões de textura independentemente do brilho espectral geral. Os principais recursos incluem métricas de textura baseadas em GLCM que capturam padrões espaciais locais dentro dos segmentos, análise multidirecional (horizontal, vertical, diagonal) para uma caracterização da textura independente da orientação, aplicabilidade a todas as bandas da imagem permitindo a identificação por assinatura de textura, discriminação entre superfícies texturizadas e lisas, e análise computacionalmente viável em nível de segmento. Os casos de uso incluem classificação de materiais baseada em rugosidade e textura da superfície (asfalto versus concreto, distinção de tipos de cultura), caracterização da estrutura e da densidade florestal pela textura do dossel, interpretação de imagens SAR e análise da textura do tecido urbano, discriminação entre superfícies de qualidade e degradadas, avaliação da sanidade de culturas por métricas de textura do dossel e detecção de nuvens e sombras por anomalias de textura. Na saída, contraste alto indica textura rugosa/variável e baixo indica superfícies lisas; homogeneidade alta indica padrões espaciais regulares e baixa indica textura caótica; energia alta indica textura organizada e baixa indica ruído aleatório; a entropia quantifica a desordem da textura; a dissimilaridade captura a irregularidade do padrão espacial; os perfis de textura permitem uma classificação específica por material; a combinação com feições espectrais melhora a discriminação dos tipos de objetos.",
            "params": {
              "segments": {
                "label": "Segmentos",
                "description": "Raster de rótulos de segmentos de entrada."
              },
              "input": {
                "label": "Entrada",
                "description": "Raster de intensidade de banda única para análise de textura."
              },
              "levels": {
                "label": "Níveis",
                "description": "Níveis de quantização para GLCM (padrão 16)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de saída."
              }
            }
          },
          "object_features_topology_relations": {
            "name": "Feições de objeto: relações topológicas",
            "description": "Calcula feições de topologia de grafo: grau do objeto (número de vizinhos), força do vizinho dominante e indicadores de articulação. Captura a posição estrutural na rede de objetos para classificação hierárquica.",
            "params": {
              "segments": {
                "label": "Segmentos",
                "description": "Raster de rótulos de segmentos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de saída."
              }
            }
          },
          "object_uncertainty_diagnostics_pro": {
            "name": "Diagnóstico de incerteza de objetos (Pro)",
            "description": "Calcula diagnósticos agregados de incerteza a partir das saídas de probabilidade dos objetos.",
            "params": {
              "probabilities": {
                "label": "Probabilidades",
                "description": "CSV de probabilidades de entrada com colunas de probabilidade e incerteza."
              },
              "low_conf_threshold": {
                "label": "Limiar de baixa confiança",
                "description": "Limiar de baixa confiança sobre a probabilidade (padrão 0.7)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do JSON de diagnósticos de saída."
              }
            }
          },
          "objects_boundary_refinement_pro": {
            "name": "Refinamento de limites de objetos (Pro)",
            "description": "Refina as fronteiras dos objetos usando uma limpeza iterativa de regiões pequenas com fusão sensível à vizinhança.",
            "params": {
              "segments": {
                "label": "Segmentos",
                "description": "Raster de rótulos de segmentos de entrada."
              },
              "iterations": {
                "label": "Iterações",
                "description": "Iterações de refinamento (padrão 2)."
              },
              "min_size": {
                "label": "Tamanho mínimo",
                "description": "Limiar de tamanho mínimo do objeto (padrão 6)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster refinado de saída."
              }
            }
          },
          "objects_enforce_min_mapping_unit": {
            "name": "Aplicar unidade mínima mapeável aos objetos",
            "description": "Impõe uma unidade mínima de mapeamento fundindo segmentos de objetos subdimensionados.",
            "params": {
              "segments": {
                "label": "Segmentos",
                "description": "Raster de rótulos de segmentos de entrada."
              },
              "min_size": {
                "label": "Tamanho mínimo",
                "description": "Tamanho mínimo do segmento em células (padrão 5)."
              },
              "method": {
                "label": "Método",
                "description": "Método de mesclagem: longest, largest, nearest (padrão longest)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "polygons_to_segments": {
            "name": "Polígonos para segmentos",
            "description": "Rasteriza polígonos editados de volta para um raster de rótulos de segmentos, preservando os IDs dos objetos ou os valores de atributos. Permite fluxos de trabalho OBIA iterativos que combinam segmentação automatizada com refinamento manual.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de polígonos de entrada."
              },
              "base": {
                "label": "Base",
                "description": "Raster base que define a grade de saída."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numérico opcional a gravar (padrão FID)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de segmentos de saída."
              }
            }
          },
          "propagate_labels_across_hierarchy": {
            "name": "Propagar rótulos pela hierarquia",
            "description": "Propaga rótulos de classe do nível grosseiro para objetos filhos do nível fino por meio de mapeamentos de hierarquia. Permite a rotulagem eficiente de hierarquias aninhadas e fluxos de trabalho de refinamento baseados em herança.",
            "params": {
              "hierarchy": {
                "label": "Hierarquia",
                "description": "CSV de hierarquia com fine_segment_id e coarse_segment_id."
              },
              "parent_labels": {
                "label": "Rótulos pai",
                "description": "CSV de rótulos pai com coarse_segment_id e class."
              },
              "child_labels": {
                "label": "Rótulos filho",
                "description": "CSV opcional de rótulos filho com fine_segment_id e class."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de rótulos propagados de saída."
              }
            }
          },
          "segment_graph_felzenszwalb": {
            "name": "Segmentação por grafo de Felzenszwalb",
            "description": "A segmentação baseada em grafos de Felzenszwalb trata a imagem como um grafo não direcionado ponderado, no qual os pixels são nós e as arestas conectam pixels adjacentes com pesos que representam a dissimilaridade espectral. Os segmentos se fundem iterativamente comparando os pesos das arestas dentro dos componentes com limiares dinâmicos; as arestas com pesos abaixo do limiar se fundem, produzindo segmentos com características espectrais localmente homogêneas. Essa abordagem hierárquica produz segmentações perceptualmente significativas, sensíveis às variações locais de contraste e às descontinuidades naturais de cor/textura. Principais recursos: segmentação hierárquica baseada em grafos; complexidade computacional eficiente de O(n log n); sensível às variações locais de contraste; produz segmentos perceptualmente significativos; suporta dados multiespectrais/hiperespectrais; gera regiões de tamanho variável que preservam as fronteiras naturais. Casos de uso: segmentação de imagens multiespectrais; mapeamento de habitats naturais; extração de feições urbanas; delimitação do dossel florestal; pré-processamento para detecção de mudanças; segmentação de dados hiperespectrais. Interpretação da saída: a saída é um raster rotulado; cada pixel recebe um ID de segmento. O tamanho dos segmentos varia inversamente ao contraste espectral local; fronteiras de alto contraste produzem segmentos menores e mais numerosos; regiões uniformes se fundem em segmentos maiores. A sensibilidade ao parâmetro k (escala do limiar) permite produzir segmentações mais grosseiras ou mais finas. As fronteiras dos segmentos correspondem a descontinuidades espectrais naturais.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "k": {
                "label": "K",
                "description": "Parâmetro de escala da segmentação (padrão 500.0)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sugestão opcional de suavização (padrão 0.8)."
              },
              "min_area": {
                "label": "Área mínima",
                "description": "Área mínima para a limpeza pós-mesclagem (padrão 20)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de segmentos de saída."
              }
            }
          },
          "segment_multiresolution_hierarchical": {
            "name": "Segmentação multirresolução hierárquica",
            "description": "Gera segmentações hierárquicas multiescala (grosseira e fina) com mapeamentos pai-filho explícitos. Permite extração de feições dependente da escala e fluxos de trabalho de classificação em múltiplos níveis.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "coarse_k": {
                "label": "K grosseiro",
                "description": "Parâmetro de escala grosseira (padrão 800)."
              },
              "fine_k": {
                "label": "K fino",
                "description": "Parâmetro de escala fina (padrão 250)."
              },
              "output_prefix": {
                "label": "Prefixo de saída",
                "description": "Prefixo de saída para os produtos gerados."
              }
            }
          },
          "segment_scale_parameter_optimizer": {
            "name": "Otimizador do parâmetro de escala de segmentação",
            "description": "Pesquisa parâmetros candidatos de escala de segmentação para identificar a escala ideal que corresponde a uma contagem-alvo de objetos. A seleção automatizada da escala elimina o ajuste manual, garantindo uma qualidade de segmentação consistente.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "candidate_scales": {
                "label": "Escalas candidatas",
                "description": "Lista de valores candidatos de escala (k)."
              },
              "target_objects": {
                "label": "Objetos alvo",
                "description": "Número desejado de objetos. O padrão é sqrt(total_cells)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do relatório JSON do otimizador."
              }
            }
          },
          "segment_slic_superpixels": {
            "name": "Segmentação em superpixels SLIC",
            "description": "O SLIC (Simple Linear Iterative Clustering) realiza um agrupamento iterativo de pixels no espaço de feições 5D que combina coordenadas espaciais e valores de cor/espectrais, fazendo os superpixels convergirem para a homogeneidade local. O algoritmo inicializa uma grade regular de centros de agrupamento e atribui os pixels aos centros mais próximos, atualizando iterativamente os centros e reduzindo as regiões de busca. Isso produz superpixels compactos e de forma regular, com mínima violação de fronteiras em comparação com alternativas como watershed ou mean-shift, oferecendo aderência superior às bordas naturais. Principais recursos: produz superpixels uniformes e compactos; computacionalmente eficiente, com complexidade de tempo linear; o parâmetro de compacidade configurável pelo usuário equilibra a regularidade espacial com a coerência espectral; ultrapassagem mínima das fronteiras; suporta imagens multiespectrais. Casos de uso: pré-processamento para classificação baseada em objetos; análise hierárquica de regiões; segmentação de imagens SAR e ópticas; mapeamento urbano; delimitação da vegetação; identificação de limites de uso do solo. Interpretação da saída: a saída é um raster rotulado no qual os valores dos pixels representam os IDs de superpixel atribuídos. As fronteiras dos superpixels se alinham às bordas dominantes e às transições de cor. Superpixels menores (maior granularidade) capturam detalhes mais finos, mas aumentam a carga computacional; superpixels maiores (menor granularidade) fundem regiões semelhantes, melhorando a eficiência. A precisão das fronteiras depende do ajuste do parâmetro de compacidade e da separação das bandas multiespectrais.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "region_size": {
                "label": "Tamanho da região",
                "description": "Tamanho alvo do superpixel em pixels (padrão 20)."
              },
              "compactness": {
                "label": "Compacidade",
                "description": "Controle de compacidade (padrão 10.0)."
              },
              "min_area": {
                "label": "Área mínima",
                "description": "Área mínima para a mesclagem de limpeza (padrão derivado de region_size)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de segmentos de saída."
              }
            }
          },
          "segment_watershed_markers": {
            "name": "Segmentação por marcadores de bacias",
            "description": "Segmentação do tipo watershed orientada por marcadores, que separa objetos em torno de regiões-semente de marcadores identificadas. Enfatiza a preservação das fronteiras enquanto controla o tamanho dos segmentos para fluxos de trabalho OBIA hierárquicos.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "gradient_weight": {
                "label": "Peso do gradiente",
                "description": "Controle de ênfase de bordas (padrão 1.0)."
              },
              "min_area": {
                "label": "Área mínima",
                "description": "Tamanho mínimo do segmento (padrão 12)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de segmentos de saída."
              }
            }
          },
          "segments_merge_small_regions": {
            "name": "Mesclar regiões pequenas de segmentos",
            "description": "A fusão de segmentos implementa uma consolidação hierárquica por meio de análise de adjacência espacial e critérios de fusão definidos pelo usuário. Avalia cada segmento subdimensionado em relação às regiões vizinhas usando limiares de tamanho, medidas de similaridade espectral ou critérios morfológicos personalizados; funde progressivamente os segmentos candidatos aos vizinhos absorventes seguindo filas de prioridade baseadas no custo de fusão, preservando a conectividade dos segmentos e evitando violações de topologia. Os principais recursos incluem regularização por pós-processamento de imagens sobressegmentadas, critérios de fusão configuráveis pelo usuário (tamanho mínimo, limiar de similaridade espectral, propriedades morfológicas), preservação da integridade das fronteiras dos segmentos durante a fusão, produção de mapas de segmentos compactos e simplificados e refinamento hierárquico sem ressegmentação completa. Os casos de uso incluem limpeza de resultados OBIA sobressegmentados, reduzindo a fragmentação e o ruído, simplificação de segmentos para maior estabilidade da classificação, eliminação de pequenos segmentos espúrios da segmentação inicial, padronização das propriedades dos segmentos para uma extração de feições posterior uniforme e refinamento para garantia de qualidade de hierarquias de segmentação multiescala. A saída apresenta um número reduzido de segmentos, refletindo a consolidação; os segmentos fundidos herdam as estatísticas espectrais dos componentes absorvidos; as fronteiras tornam-se mais suaves e menos complexas; as regiões fundidas mantêm a integridade espacial, mas apresentam uma heterogeneidade espectral interna ligeiramente maior; a saída é otimizada para a classificação posterior e a estabilidade das feições.",
            "params": {
              "segments": {
                "label": "Segmentos",
                "description": "Raster de rótulos de segmentos de entrada."
              },
              "min_size": {
                "label": "Tamanho mínimo",
                "description": "Tamanho mínimo do segmento em células (padrão 5)."
              },
              "method": {
                "label": "Método",
                "description": "Método de mesclagem: longest, largest, nearest (padrão longest)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "segments_split_low_cohesion": {
            "name": "Dividir segmentos de baixa coesão",
            "description": "Ressegmenta objetos existentes de baixa coesão usando configurações de escala mais fina para melhorar a homogeneidade espectral. Refinamento adaptativo para zonas problemáticas sem afetar objetos bem formados.",
            "params": {
              "segments": {
                "label": "Segmentos",
                "description": "Raster de segmentos existente."
              },
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada usados para a ressegmentação."
              },
              "split_scale": {
                "label": "Escala de divisão",
                "description": "Parâmetro de escala de divisão mais fina (padrão 120)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "segments_to_polygons": {
            "name": "Segmentos para polígonos",
            "description": "Converte rótulos de segmentos raster em polígonos vetoriais para edição interativa, controle de qualidade e integração com SIG. Permite uma transição contínua entre as representações OBIA raster e vetorial.",
            "params": {
              "segments": {
                "label": "Segmentos",
                "description": "Raster de segmentos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída."
              }
            }
          },
          "evaluate_training_sites": {
            "name": "Avaliar áreas de treinamento",
            "description": "Avalia a separabilidade das classes em polígonos de treinamento multibanda e grava um relatório HTML com estatísticas de distribuição por banda.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única (um por banda espectral), como caminhos ou uma cadeia delimitada."
              },
              "training_data": {
                "label": "Dados de treinamento",
                "description": "Caminho dos dados de treinamento poligonais."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Nome do campo de classe nos atributos de training_data."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do arquivo HTML de saída."
              }
            }
          },
          "fuzzy_knn_classification": {
            "name": "Classificação KNN difusa",
            "description": "Realiza uma classificação fuzzy k-vizinhos mais próximos e gera a confiança de pertinência às classes.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dados de treinamento",
                "description": "Caminho dos dados de treinamento vetoriais de pontos/polígonos."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Campo de classe nos atributos de training_data."
              },
              "scaling": {
                "label": "Escalonamento",
                "description": "Modo de escalonamento das feições: none (padrão), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Número de vizinhos (padrão 5)."
              },
              "m": {
                "label": "M",
                "description": "Parâmetro de expoente fuzzy (> 1; padrão 2.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster classificado de saída."
              },
              "probability_output": {
                "label": "Saída de probabilidade",
                "description": "Caminho opcional do raster de probabilidade de pertinência."
              }
            }
          },
          "generalize_classified_raster": {
            "name": "Generalizar raster classificado",
            "description": "A ferramenta Generalize Classified Raster simplifica mapas de classificação removendo pequenas manchas isoladas por meio de filtragem iterativa pela moda, fundindo componentes fragmentados de um ou vários pixels nas classes vizinhas espacialmente dominantes. Algoritmo: aplica um filtro morfológico de moda que preserva a classe dominante dentro de janelas móveis, remove ou consolida pixels isolados do contexto espacial, refina iterativamente a classificação por meio de análise de componentes conectados e absorve classes menores nas classes dominantes vizinhas. O tamanho da janela e o tamanho mínimo das manchas, configuráveis, controlam a intensidade da generalização. Principais recursos: reduz a fragmentação da classificação, melhora a coerência espacial, elimina manchas isoladas induzidas por ruído, mantém as fronteiras das classes por meio de filtragem seletiva, processamento de componentes conectados computacionalmente eficiente. Capacidades: intensidade de generalização variável, preservação de grandes manchas contíguas, aplicação a dados indexados ou categóricos. Casos de uso: refinamento pós-classificação removendo efeitos de sal e pimenta, consolidação de resultados de classificação fragmentados, preparação de produtos finais de classificação, generalização para uma unidade mínima de mapeamento específica. Aplicações: finalização de mapas de cobertura do solo, eliminação de classificações espúrias de pixel único, melhoria da continuidade espacial da classificação. Interpretação da saída: a redução da fragmentação das classes indica uma remoção de ruído eficaz; fronteiras preservadas revelam parâmetros de generalização adequados; generalização excessiva indica parâmetros de janela superdimensionados; a melhoria da coerência espacial sugere que o ruído da classificação consistia principalmente em artefatos de pixel único.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster classificado de entrada ou objeto raster tipado."
              },
              "min_size": {
                "label": "Tamanho mínimo",
                "description": "Tamanho mínimo da feição em células; patches menores são reatribuídos (padrão 5)."
              },
              "method": {
                "label": "Método",
                "description": "Método de generalização: 'longest' (padrão), 'largest' ou 'nearest'."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "generalize_with_similarity": {
            "name": "Generalizar por similaridade",
            "description": "Generaliza pequenas manchas em um raster classificado fundindo-as à mancha vizinha espectralmente mais semelhante.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster classificado de entrada."
              },
              "similarity": {
                "label": "Similaridade",
                "description": "Matriz de rasters de similaridade usados para calcular a similaridade ao centro das feições."
              },
              "min_size": {
                "label": "Tamanho mínimo",
                "description": "Tamanho mínimo da feição em pixels; feições menores são mescladas (padrão 5)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "k_means_clustering": {
            "name": "Agrupamento K-médias",
            "description": "O agrupamento K-means realiza uma classificação espectral não supervisionada particionando iterativamente os pixels em K agrupamentos espectrais, minimizando a variância intra-agrupamento e descobrindo agrupamentos espectrais naturais em imagens multiespectrais sem amostras de treinamento nem definições de classes a priori. O algoritmo inicializa K centros de agrupamento aleatórios, atribui iterativamente os pixels aos centros mais próximos e recalcula os centros como as médias dos agrupamentos até a convergência, gerando as atribuições e os centros finais dos agrupamentos. O K-means é computacionalmente eficiente, escalável para grandes pilhas multiespectrais e descobre padrões espectrais orientados pelos dados, úteis para análise exploratória e identificação de classes naturais. Os principais recursos incluem número de agrupamentos K especificado pelo usuário, permitindo compromissos flexíveis entre detalhe espectral e interpretabilidade da saída, critérios de convergência com limites de iteração e limiares de deslocamento dos centros configuráveis, controle opcional da semente aleatória garantindo um agrupamento reprodutível para testes e validação, e paralelização eficiente para imagens grandes. As aplicações abrangem classificação não supervisionada da cobertura do solo descobrindo classes espectrais naturais, detecção de anomalias identificando pixels espectralmente incomuns, segmentação de imagens para classificação supervisionada posterior e análise espectral exploratória revelando padrões espectrais dominantes. A saída do K-means identifica agrupamentos espectrais naturais. A saída produz um raster de pertinência aos agrupamentos com inteiros de 0 a K-1, um arquivo de centros de agrupamento com o espectro médio por agrupamento e, opcionalmente, a variância intra-agrupamento que quantifica a compacidade; a sobreposição visual das classes de agrupamento em composições de cor verdadeira revela padrões espaciais e a continuidade dos agrupamentos.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Lista de rasters de entrada como uma matriz de caminhos ou uma cadeia delimitada por vírgula/ponto e vírgula."
              },
              "classes": {
                "label": "Classes",
                "description": "Número de classes alvo (k)."
              },
              "max_iterations": {
                "label": "Máximo de iterações",
                "description": "Número máximo de iterações (padrão 10)."
              },
              "class_change": {
                "label": "Mudança de classe",
                "description": "Para quando o percentual de células válidas alteradas cai abaixo deste limiar (padrão 2.0)."
              },
              "initialize": {
                "label": "Inicializar",
                "description": "Estratégia de inicialização dos centroides: 'diagonal' (padrão) ou 'random'."
              },
              "min_class_size": {
                "label": "Tamanho mínimo da classe",
                "description": "Tamanho mínimo de classe usado ao atualizar os centroides (padrão 10)."
              },
              "out_html": {
                "label": "HTML de saída",
                "description": "Caminho opcional de saída do relatório HTML."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída do raster de classes. Se omitido, a saída permanece em memória."
              }
            }
          },
          "knn_classification": {
            "name": "Classificação KNN",
            "description": "A classificação por K vizinhos mais próximos atribui pixels às classes com base na votação majoritária entre as K amostras de treinamento mais próximas no espaço espectral, permitindo uma classificação não linear flexível sem treinamento explícito de modelo. O KNN calcula as distâncias (euclidiana, ângulo espectral ou Mahalanobis) de cada pixel da imagem a todas as amostras de treinamento, identifica as K amostras de treinamento mais próximas, aplica uma votação majoritária ponderada ou não ponderada para determinar a classe e retorna o rótulo da classe e, opcionalmente, um escore de confiança. O KNN se destaca com dados de treinamento limitados, fronteiras de classes altamente não lineares e distribuições espectrais heterogêneas das classes, onde os modelos paramétricos têm dificuldade. Os principais recursos incluem métricas de distância selecionáveis (euclidiana, ângulo espectral, Mahalanobis) que acomodam diferentes características espectrais e estruturas de correlação, valores de K especificados pelo usuário permitindo compromissos entre acurácia e complexidade, opções de votação ponderada que enfatizam as amostras próximas e limiares de confiança opcionais que permitem rejeitar classificações ambíguas. As aplicações incluem classificação de sensoriamento remoto de alta acurácia com amostras de treinamento coletadas em campo, classificação com poucas amostras quando há pouca verdade de campo, classificação de terrenos difíceis com assinaturas espectrais altamente variáveis e classificação sensível à confiança que rejeita decisões limítrofes. A classificação KNN permite resultados de alta acurácia com dados de treinamento flexíveis. A saída compreende um raster de rótulos de classe com IDs inteiros de classe correspondentes aos rótulos das amostras de treinamento, um raster de confiança opcional que registra as porcentagens de votação ou escores de confiança ponderados pela distância, e uma acurácia de classificação que pode superar outros métodos com uma seleção ideal de K e amostras de treinamento suficientes.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dados de treinamento",
                "description": "Caminho dos dados de treinamento vetoriais de pontos/polígonos."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Campo de classe nos atributos de training_data."
              },
              "scaling": {
                "label": "Escalonamento",
                "description": "Modo de escalonamento das feições: none (padrão), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Número de vizinhos (padrão 5)."
              },
              "clip": {
                "label": "Recortar",
                "description": "Se verdadeiro, remove amostras de treinamento mal classificadas por uma pré-passagem leave-one-out."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "knn_regression": {
            "name": "Regressão KNN",
            "description": "Realiza regressão supervisionada por k vizinhos mais próximos em rasters de entrada multibanda.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dados de treinamento",
                "description": "Caminho dos dados de treinamento vetoriais de pontos."
              },
              "field": {
                "label": "Campo",
                "description": "Campo alvo numérico nos atributos de training_data."
              },
              "scaling": {
                "label": "Escalonamento",
                "description": "Modo de escalonamento das feições: none (padrão), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Número de vizinhos (padrão 5)."
              },
              "distance_weighted": {
                "label": "Ponderado pela distância",
                "description": "Se verdadeiro, usa a média ponderada pelo inverso da distância."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "logistic_regression": {
            "name": "Regressão logística",
            "description": "Realiza classificação supervisionada por regressão logística em rasters de entrada multibanda.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dados de treinamento",
                "description": "Caminho dos dados de treinamento vetoriais de pontos/polígonos."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Campo de classe nos atributos de training_data."
              },
              "scaling": {
                "label": "Escalonamento",
                "description": "Modo de escalonamento das feições: none (padrão), normalize, standardize."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Peso da regularização L2 (padrão 0.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "min_dist_classification": {
            "name": "Classificação por distância mínima",
            "description": "Realiza uma classificação supervisionada por distância mínima em rasters multiespectrais usando dados de treinamento poligonais.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única (um por banda espectral), como caminhos ou uma cadeia delimitada."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dados de treinamento",
                "description": "Caminho de um arquivo vetorial de polígonos contendo as áreas de treinamento."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Nome do campo de atributo nos dados de treinamento que contém o identificador da classe."
              },
              "dist_threshold": {
                "label": "Limiar de distância",
                "description": "Limiar opcional de escore z; pixels mais distantes do que isso da média da classe mais próxima ficam sem classificação. Padrão: sem limiar (classificar todos)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é mantido em memória."
              }
            }
          },
          "modified_k_means_clustering": {
            "name": "Agrupamento K-médias modificado",
            "description": "O agrupamento K-means modificado aprimora o K-means padrão com pré-processamento espectral, seleção automática e adaptativa de K e critérios de convergência aprimorados, para uma classificação multiespectral não supervisionada mais robusta e precisa. O algoritmo aplica um pré-processamento opcional que inclui padronização espectral para remover efeitos de escala, transformação por componentes principais que enfatiza as direções de variância dominantes e filtragem de ruído que remove variações espectrais espúrias. A seleção adaptativa de K usa métodos do cotovelo ou análise de silhueta para descobrir automaticamente o número ideal de agrupamentos, em vez de exigir especificação manual. Os principais recursos incluem pré-processamento espectral que reduz a sensibilidade à escala e enfatiza as direções dominantes de variação espectral, seleção automática de K que descobre objetivamente o número ideal de agrupamentos, critérios de convergência aprimorados que incluem limiares de deslocamento relativo dos centros e métricas de similaridade por ângulo espectral, e pós-processamento opcional que funde agrupamentos semelhantes ou divide agrupamentos difusos. As aplicações incluem classificação exploratória aprimorada da cobertura do solo que trata automaticamente as escalas espectrais, detecção robusta de anomalias que separa sinal de ruído por meio de pré-processamento, segmentação adaptativa de imagens que descobre automaticamente os níveis de detalhe adequados e integração multissensor que normaliza as escalas espectrais de diferentes sensores. A saída do K-means modificado revela classes espectrais naturais robustas. A saída produz um raster otimizado de pertinência aos agrupamentos com número de classes determinado automaticamente, centros de agrupamento com as transformações de pré-processamento documentadas e estatísticas de diagnóstico que quantificam a qualidade, a separação e a convergência dos agrupamentos; as recomendações da seleção adaptativa de K orientam os compromissos entre interpretabilidade e detalhe.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Lista de rasters de entrada como uma matriz de caminhos ou uma cadeia delimitada por vírgula/ponto e vírgula."
              },
              "start_clusters": {
                "label": "Agrupamentos iniciais",
                "description": "Número inicial de agrupamentos antes da mesclagem (padrão 1000)."
              },
              "merge_dist": {
                "label": "Distância de mesclagem",
                "description": "Limiar de distância para mesclagem de agrupamentos (euclidiana)."
              },
              "max_iterations": {
                "label": "Máximo de iterações",
                "description": "Número máximo de iterações (padrão 10)."
              },
              "class_change": {
                "label": "Mudança de classe",
                "description": "Para quando o percentual de células válidas alteradas cai abaixo deste limiar (padrão 2.0)."
              },
              "out_html": {
                "label": "HTML de saída",
                "description": "Caminho opcional de saída do relatório HTML."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída do raster de classes. Se omitido, a saída permanece em memória."
              }
            }
          },
          "nnd_classification": {
            "name": "Classificação NND",
            "description": "Realiza classificação por distância normalizada mais próxima com rejeição opcional de valores atípicos.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dados de treinamento",
                "description": "Caminho dos dados de treinamento vetoriais de pontos/polígonos."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Campo de classe nos atributos de training_data."
              },
              "scaling": {
                "label": "Escalonamento",
                "description": "Modo de escalonamento das feições: none (padrão), normalize, standardize."
              },
              "z_threshold": {
                "label": "Limiar Z",
                "description": "Escore z máximo de distância normalizada aceito antes da sinalização como outlier (padrão 1.96)."
              },
              "outlier_is_zero": {
                "label": "Outlier é zero",
                "description": "Se verdadeiro, os outliers recebem o valor de classe 0; caso contrário, nodata."
              },
              "k": {
                "label": "K",
                "description": "Tamanho da vizinhança para a estimativa de distância de classe (padrão 25)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "otsu_thresholding": {
            "name": "Limiarização de Otsu",
            "description": "A limiarização de Otsu é um método automático de segmentação de imagens que determina o valor ideal de limiar global maximizando a variância entre classes nos histogramas de intensidade dos pixels. Algoritmo: examina o histograma de uma imagem em tons de cinza ou de banda única, testa iterativamente todos os valores de limiar possíveis, calcula a variância entre classes para cada limiar e seleciona o valor que maximiza a separação da variância entre as classes de primeiro plano e de fundo. Não paramétrico, não requer especificação manual do limiar. Principais recursos: determinação totalmente automática do limiar, robusto a variações de iluminação, a abordagem baseada em histograma permite um cálculo rápido, sem parâmetros externos, fornece um único limiar global. Capacidades: segmentação binária, otimização de histogramas unimodais e bimodais, trata imagens de faixa dinâmica estreita ou de alto contraste. Casos de uso: segmentação automática de imagens sem intervenção do usuário, binarização de documentos, extração de corpos d'água, detecção de nuvens em imagens de satélite, mapeamento de gelo/neve. Aplicações: pré-processamento para detecção de mudanças, classificação simples da cobertura do solo, geração de máscaras de água, segmentação preliminar antes de uma classificação avançada. Interpretação da saída: os pixels abaixo do limiar são classificados em uma classe e os acima, em outra; a bimodalidade do histograma indica a qualidade da separação; histogramas mal separados indicam inadequação para classificação binária; medidas estatísticas como a variância entre classes e a uniformidade indicam a qualidade da segmentação.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "parallelepiped_classification": {
            "name": "Classificação por paralelepípedos",
            "description": "Realiza uma classificação supervisionada por paralelepípedo em rasters multiespectrais usando dados de treinamento poligonais.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única (um por banda espectral), como caminhos ou uma cadeia delimitada."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dados de treinamento",
                "description": "Caminho de um arquivo vetorial de polígonos contendo as áreas de treinamento."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Nome do campo de atributo nos dados de treinamento que contém o identificador da classe."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é mantido em memória."
              }
            }
          },
          "random_forest_classification": {
            "name": "Classificação por floresta aleatória",
            "description": "A classificação Random Forest atribui rótulos por meio de um ensemble de árvores de decisão treinadas com amostras bootstrap e subconjuntos aleatórios de feições. Cada árvore cresce independentemente, sem poda, capturando relações e interações não lineares complexas entre as feições. A classificação agrega os votos de tipicamente 100-1000 árvores; a classe final é a votação majoritária. O treinamento bootstrap e a seleção aleatória de feições reduzem o sobreajuste ao mesmo tempo em que capturam padrões de alta dimensionalidade. A importância das feições pode ser calculada a partir das variações do erro out-of-bag, identificando as bandas espectrais de diagnóstico ou as feições derivadas mais relevantes para a classificação. Os principais recursos incluem ranking de importância das variáveis que identifica as feições-chave da classificação, confiança da classificação por pixel a partir do consenso dos votos entre as árvores do ensemble, tratamento automático de dados hiperespectrais de alta dimensionalidade, robustez a valores atípicos espectrais e ruído, e treinamento e predição paralelizáveis. A ferramenta processa eficientemente problemas multiclasse com conjuntos de treinamento desbalanceados. As aplicações incluem classificação da cobertura do solo a partir de dados multiespectrais e hiperespectrais, detecção de mudanças identificando transições espectrais entre mapas, classificação de tipos de cultura a partir de imagens de satélite multitemporais, classificação de materiais urbanos distinguindo tipos de edificações e superfícies, e detecção de anomalias identificando valores atípicos espectrais. As florestas aleatórias alcançam consistentemente alta acurácia em aplicações de sensoriamento remoto com dados de treinamento relativamente modestos. Interpretação da saída: as contagens de votos fornecem a confiança da classificação; votos unânimes ou de forte maioria (>80%) indicam classificações confiáveis, enquanto margens estreitas sugerem ambiguidade de pixels mistos. Os rankings de importância das feições identificam as bandas espectrais ou os índices derivados mais diagnósticos para a classificação. O erro out-of-bag estima o desempenho de generalização sem validação com amostras reservadas. As interações entre feições são implícitas; alta acurácia a partir de combinações específicas de bandas sugere relações espectrais não lineares.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dados de treinamento",
                "description": "Caminho dos dados de treinamento vetoriais de pontos/polígonos."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Campo de classe nos atributos de training_data."
              },
              "scaling": {
                "label": "Escalonamento",
                "description": "Modo de escalonamento das feições: none (padrão), normalize, standardize."
              },
              "n_trees": {
                "label": "Número de árvores",
                "description": "Número de árvores na floresta (padrão 200)."
              },
              "min_samples_leaf": {
                "label": "Mínimo de amostras por folha",
                "description": "Número mínimo de amostras exigido em um nó folha (padrão 1)."
              },
              "min_samples_split": {
                "label": "Mínimo de amostras para divisão",
                "description": "Número mínimo de amostras exigido para dividir um nó interno (padrão 2)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "random_forest_regression": {
            "name": "Regressão por floresta aleatória",
            "description": "Realiza regressão supervisionada random forest em rasters de entrada multibanda.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dados de treinamento",
                "description": "Caminho dos dados de treinamento vetoriais de pontos."
              },
              "field": {
                "label": "Campo",
                "description": "Campo alvo numérico nos atributos de training_data."
              },
              "scaling": {
                "label": "Escalonamento",
                "description": "Modo de escalonamento das feições: none (padrão), normalize, standardize."
              },
              "n_trees": {
                "label": "Número de árvores",
                "description": "Número de árvores na floresta (padrão 200)."
              },
              "min_samples_leaf": {
                "label": "Mínimo de amostras por folha",
                "description": "Número mínimo de amostras exigido em um nó folha (padrão 1)."
              },
              "min_samples_split": {
                "label": "Mínimo de amostras para divisão",
                "description": "Número mínimo de amostras exigido para dividir um nó interno (padrão 2)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "svm_classification": {
            "name": "Classificação SVM",
            "description": "A classificação por máquina de vetores de suporte (SVM) aplica algoritmos de aprendizado de máquina SVM a dados multiespectrais de sensoriamento remoto, separando as classes de treinamento pelo posicionamento ideal de um hiperplano no espaço de feições espectrais de alta dimensionalidade. Algoritmo: transforma os vetores de feições espectrais em um espaço de alta dimensionalidade por meio de funções kernel (linear, RBF, polinomial), identifica o hiperplano de margem máxima que separa as classes de treinamento e classifica os novos pixels de acordo com sua posição em relação ao hiperplano; os parâmetros de tolerância e a seleção do kernel controlam a generalização. Trata eficazmente a separação não linear de classes. Principais recursos: robusto a dados espectrais de alta dimensionalidade, excelente generalização com poucas amostras de treinamento, a flexibilidade do kernel acomoda distribuições espectrais diversas, fornece estimativas de probabilidade/confiança. Capacidades: classificação multiclasse, tolerância de margem suave, balanceamento automático dos pesos das classes. Casos de uso: classificação detalhada do solo com dados de treinamento esparsos, integração de feições espectrais e espaciais, detecção de mudanças, agricultura de precisão, mapeamento urbano. Aplicações: classificação de imagens hiperespectrais, mapeamento de ecossistemas complexos, delimitação de tipos de cultura, classificação de infraestrutura. Interpretação da saída: a pertinência à classe indica a categoria predita, e a coerência espacial revela a qualidade da classificação; as estimativas de probabilidade quantificam a confiança em nível de pixel; os padrões de classificação incorreta indicam deficiências nos dados de treinamento ou problemas de sobreposição espectral.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dados de treinamento",
                "description": "Caminho dos dados de treinamento vetoriais de pontos/polígonos."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Campo de classe nos atributos de training_data."
              },
              "scaling": {
                "label": "Escalonamento",
                "description": "Modo de escalonamento das feições: none (padrão), normalize, standardize."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Tipo de kernel: linear (padrão) ou rbf."
              },
              "c": {
                "label": "C",
                "description": "Parâmetro de regularização do SVM (padrão 1.0)."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Gamma do kernel RBF; o padrão é 1 / número_de_feições."
              },
              "epoch": {
                "label": "Época",
                "description": "Número de épocas de treinamento (padrão 2)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "svm_regression": {
            "name": "Regressão SVM",
            "description": "Realiza regressão supervisionada por máquina de vetores de suporte em rasters de entrada multibanda.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dados de treinamento",
                "description": "Caminho dos dados de treinamento vetoriais de pontos."
              },
              "field": {
                "label": "Campo",
                "description": "Campo alvo numérico nos atributos de training_data."
              },
              "scaling": {
                "label": "Escalonamento",
                "description": "Modo de escalonamento das feições: none (padrão), normalize, standardize."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Tipo de kernel: linear (padrão) ou rbf."
              },
              "c": {
                "label": "C",
                "description": "Parâmetro de regularização do SVM (padrão 1.0)."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Gamma do kernel RBF; o padrão é 1 / número_de_feições."
              },
              "eps": {
                "label": "Epsilon",
                "description": "Largura da perda insensível a epsilon (padrão 0.1)."
              },
              "tol": {
                "label": "Tolerância",
                "description": "Tolerância do otimizador (padrão 1e-3)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "change_vector_analysis": {
            "name": "Análise de vetor de mudança",
            "description": "Realiza a análise de vetor de mudança em conjuntos de dados multiespectrais de duas datas e retorna rasters de magnitude e direção.",
            "params": {
              "date1": {
                "label": "Data 1",
                "description": "Lista de rasters da data anterior como uma matriz de caminhos ou uma cadeia delimitada por vírgula/ponto e vírgula."
              },
              "date2": {
                "label": "Data 2",
                "description": "Lista de rasters da data posterior como uma matriz de caminhos ou uma cadeia delimitada por vírgula/ponto e vírgula."
              },
              "magnitude_output": {
                "label": "Saída de magnitude",
                "description": "Caminho opcional de saída para o raster de magnitude do vetor."
              },
              "direction_output": {
                "label": "Saída de direção",
                "description": "Caminho opcional de saída para o raster de código de direção."
              }
            }
          },
          "image_difference_change_detection": {
            "name": "Detecção de mudanças por diferença de imagens",
            "description": "A detecção de mudanças por diferença de imagens identifica mudanças na cobertura do solo calculando as diferenças multiespectrais pixel a pixel entre aquisições de satélite multitemporais corregistradas, destacando as áreas onde as assinaturas espectrais mudaram o suficiente para exceder a variação estatística de fundo. O algoritmo corregistra as imagens em grades de pixels comuns, calcula as diferenças em bandas selecionadas ou índices de vegetação (por exemplo, diferença de NDVI), aplica uma limiarização estatística usando a diferença absoluta média e intervalos de confiança para distinguir mudança de ruído, e gera máscaras binárias de mudança ou rasters contínuos de magnitude da diferença. A diferenciação de imagens é computacionalmente simples, interpretável e eficaz para detectar grandes mudanças na vegetação, no desenvolvimento urbano ou nos corpos d'água. Os principais recursos incluem seleção flexível de bandas que permite a detecção direcionada de mudanças em domínios espectrais específicos, limiarização estatística com níveis de confiança automáticos ou manuais, pré-processamento opcional (normalização, cálculo de índices) que melhora a relação sinal-ruído da mudança e processamento rápido que permite a detecção de mudanças em grande escala. As aplicações incluem mapeamento do desmatamento e monitoramento da perda florestal, acompanhamento da expansão urbana a partir de séries temporais de satélite multiespectrais, mapeamento de inundações antes/depois do evento a partir de dados SAR ou ópticos e detecção de mudanças agrícolas acompanhando transições de culturas. A saída da diferença de imagens destaca as áreas de mudança. A saída compreende um raster de máscara de mudança (binário mudança/sem mudança) com limiares configuráveis, um raster contínuo de magnitude da diferença que quantifica a intensidade da mudança e um raster opcional de classes de mudança que distingue o tipo de mudança (aumento, diminuição); a agregação temporal permite acompanhar mudanças ao longo de períodos plurianuais.",
            "params": {
              "t1_inputs": {
                "label": "Entradas T1",
                "description": "Matriz de caminhos de rasters da data 1."
              },
              "t2_inputs": {
                "label": "Entradas T2",
                "description": "Matriz de caminhos de rasters da data 2; deve corresponder ao comprimento e à ordem de t1_inputs."
              },
              "mode": {
                "label": "Modo",
                "description": "Modo de diferença: magnitude (padrão) ou signed."
              },
              "threshold_sigma": {
                "label": "Sigma do limiar",
                "description": "Limiar sigma opcional para a geração da máscara binária de mudança."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta os rasters da pilha para corresponder a t1_inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída para a imagem de diferença."
              },
              "output_absolute": {
                "label": "Saída absoluta",
                "description": "Caminho opcional do raster de saída para a diferença com sinal absoluta (|mean(t2-t1)|)."
              },
              "output_signed": {
                "label": "Saída com sinal",
                "description": "Caminho opcional do raster de saída para a diferença com sinal mean(t2-t1)."
              },
              "output_mask": {
                "label": "Máscara de saída",
                "description": "Caminho opcional do raster de saída para a máscara binária de mudança limiarizada."
              }
            }
          },
          "pca_based_change_detection": {
            "name": "Detecção de mudanças baseada em PCA",
            "description": "A detecção de mudanças por análise de componentes principais identifica mudanças na cobertura do solo calculando componentes principais a partir de dados espectrais multitemporais empilhados, nos quais os primeiros componentes capturam padrões comuns ao longo do tempo e os componentes posteriores isolam as mudanças temporais. O algoritmo empilha os dados multiespectrais multitemporais (corregistrados em uma grade comum), calcula a PCA transformando-os em componentes espectro-temporais ortogonais não correlacionados, interpreta os PCs posteriores como sensíveis à mudança e aplica uma limiarização estatística às cargas/escores dos PCs para detectar mudanças. A detecção baseada em PCA se destaca quando os sinais de mudança são espectralmente sutis, porque a PCA maximiza a variância e separa os padrões espectrais temporalmente consistentes (primeiros PCs) da variação temporal (PCs posteriores). Os principais recursos incluem fusão de dados de múltiplas datas que trata números variáveis de imagens e requisitos de corregistro, maximização automática da variância que enfatiza padrões espectro-temporais importantes, estatística multivariada que melhora a discriminação de mudanças em comparação com a diferenciação univariada e filtragem espacial opcional que reduz o ruído dos pixels. As aplicações incluem detecção de estresse sutil da vegetação antes do reconhecimento visual, detecção multiespectral de mudanças urbanas acompanhando o desenvolvimento ao longo de décadas, avaliação do impacto de desastres naturais por mapeamento rápido de danos e monitoramento ambiental detectando transições de estado dos ecossistemas. A saída da detecção baseada em PCA distingue padrões temporais. A saída compreende imagens de componentes principais com cargas espectro-temporais interpretáveis, um raster de probabilidade de mudança derivado dos escores dos componentes posteriores e uma classificação opcional de mudanças que distingue os tipos de mudança; os padrões espaciais dos PCs permitem o reconhecimento visual de padrões, complementando a detecção estatística.",
            "params": {
              "t1_inputs": {
                "label": "Entradas T1",
                "description": "Matriz de caminhos de rasters da data 1."
              },
              "t2_inputs": {
                "label": "Entradas T2",
                "description": "Matriz de caminhos de rasters da data 2; deve corresponder ao comprimento e à ordem de t1_inputs."
              },
              "component": {
                "label": "Componente",
                "description": "Índice (base 1) do componente principal a emitir (padrão 1)."
              },
              "standardized": {
                "label": "Padronizado",
                "description": "Se verdadeiro, usa PCA por matriz de correlação sobre os vetores de mudança (padrão false)."
              },
              "threshold_sigma": {
                "label": "Sigma do limiar",
                "description": "Limiar sigma opcional sobre o escore absoluto do PC para a saída da máscara binária."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta os rasters da pilha para corresponder a t1_inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída para o escore absoluto do PC selecionado."
              },
              "output_mask": {
                "label": "Máscara de saída",
                "description": "Caminho opcional do raster de saída para a máscara binária limiarizada (0/1)."
              },
              "output_report": {
                "label": "Relatório de saída",
                "description": "Caminho opcional do relatório JSON de saída para autovalores, variância explicada e cargas dos componentes."
              }
            }
          },
          "post_classification_change": {
            "name": "Mudança pós-classificação",
            "description": "A detecção de mudanças pós-classificação quantifica as transições de cobertura e uso do solo (LULC) comparando diretamente mapas classificados independentemente de diferentes períodos. As comparações de classes pixel a pixel identificam as transições, indicando as classes \"de\" e \"para\". Matrizes de tabulação cruzada (matrizes de confusão) quantificam as frequências de transição, revelando as trajetórias de mudança dominantes. O método requer esquemas de classificação consistentes entre as datas; a acurácia depende da qualidade da classificação em cada etapa temporal. Principais recursos: mapeamento direto das transições classe a classe; independência das classificações individuais; permite combinações de sensores heterogêneos; quantifica as frequências de transição; identifica pontos críticos de mudança. Casos de uso: monitoramento do desmatamento; mapeamento do crescimento urbano; acompanhamento do uso agrícola do solo; detecção da perda de áreas úmidas; avaliação da fragmentação de habitats. Interpretação da saída: as matrizes de transição mostram os valores sem mudança na diagonal e as frequências de transição fora da diagonal. Os mapas de mudança destacam os pixels alterados; a saída codificada por transição codifica tanto a classe de origem quanto a de destino, permitindo a interpretação. Alta acurácia requer classificações de qualidade; erros de classificação em qualquer das datas se propagam como erros de detecção de mudanças. A agregação das transições revela os padrões dominantes (por exemplo, floresta→agricultura, campo→urbano). Transições em nível subpixel não podem ser detectadas pelo método pós-classificação; mudanças em escala fina podem passar despercebidas.",
            "params": {
              "t1_classified": {
                "label": "T1 classificado",
                "description": "Caminho do raster classificado da data 1."
              },
              "t2_classified": {
                "label": "T2 classificado",
                "description": "Caminho do raster classificado da data 2."
              },
              "transition_scale": {
                "label": "Escala de transição",
                "description": "Fator de escala da codificação de transição (padrão 1000): código = classe1 * escala + classe2."
              },
              "t1_class_remap": {
                "label": "Remapeamento de classes T1",
                "description": "Tabela opcional de remapeamento das classes da data 1 como objeto {\"old\": new, ...}."
              },
              "t2_class_remap": {
                "label": "Remapeamento de classes T2",
                "description": "Tabela opcional de remapeamento das classes da data 2 como objeto {\"old\": new, ...}."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta t2_classified para o CRS de t1_classified quando necessário."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída codificado por transição."
              }
            }
          },
          "write_function_memory_insertion": {
            "name": "Inserção em memória de função de escrita",
            "description": "Cria uma composição RGB compactada para visualização de mudanças a partir de duas ou três datas de banda única.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Raster de banda única da primeira data."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Raster de banda única da segunda data."
              },
              "input3": {
                "label": "Entrada 3",
                "description": "Raster opcional de banda única da terceira data; se omitido, input2 é usado para o canal azul."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "brdf_normalization": {
            "name": "Normalização BRDF",
            "description": "Normalização BRDF de cena única usando a correção C ou a abordagem de Minnaert com a geometria de declividade/orientação do DEM.",
            "params": {
              "input_raster": {
                "label": "Raster de entrada",
                "description": "Raster de reflectância de entrada a normalizar (banda única ou pilha multibanda)."
              },
              "input_dem": {
                "label": "DEM de entrada",
                "description": "Raster DEM corregistrado com a entrada (mesma grade, ou será reamostrado para corresponder)."
              },
              "solar_zenith_deg": {
                "label": "Zênite solar (graus)",
                "description": "Ângulo zenital solar em graus no momento da aquisição."
              },
              "solar_azimuth_deg": {
                "label": "Azimute solar (graus)",
                "description": "Ângulo azimutal solar em graus (horário a partir do norte) no momento da aquisição."
              },
              "method": {
                "label": "Método",
                "description": "Método de correção: c_correction (padrão) ou minnaert."
              },
              "minnaert_k": {
                "label": "K de Minnaert",
                "description": "Coeficiente k de Minnaert em [0,1] (padrão 0.5). Usado apenas quando method=minnaert."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Exagero vertical para o cálculo de declividade/orientação do DEM (padrão 1.0)."
              },
              "output_prefix": {
                "label": "Prefixo de saída",
                "description": "Prefixo para os arquivos de saída (padrão brdf_normalized)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho de saída para o raster normalizado (substitui output_prefix no modo de saída única)."
              }
            }
          },
          "correct_vignetting": {
            "name": "Corrigir vinhetagem",
            "description": "A correção de vinhetagem da lente remove artefatos radiométricos causados pelas propriedades ópticas fora do eixo da lente, nas quais as bordas da imagem recebem menos luz do que o centro, criando gradientes de brilho artificiais independentes da variação da reflectância da superfície. A correção de vinhetagem aplica fatores multiplicativos espacialmente variáveis calculados a partir de modelos de perfil de vinhetagem (formulações gaussiana ou da lei do cosseno à quarta potência) calibrados de acordo com as características do sensor, restaurando uma resposta radiométrica uniforme em todo o campo de visão da imagem. Essa etapa de pré-processamento é fundamental para o sensoriamento remoto multiespectral e hiperespectral, em que a vinhetagem corromperia a análise espectral e introduziria erros sistemáticos nos fluxos de trabalho de classificação e detecção de mudanças. Os principais recursos incluem estimativa automática do perfil de vinhetagem a partir de estatísticas da imagem ou de parâmetros de calibração especificados pelo usuário, fatores de correção espacialmente variáveis aplicados por pixel sem artefatos de interpolação, mascaramento opcional de pixels periféricos sobrecorrigidos para evitar a amplificação de bordas ruidosas e correção específica por banda que trata a vinhetagem variável entre as bandas espectrais. As aplicações incluem pré-processamento para algoritmos de classificação espectral sensíveis à consistência radiométrica, preparação de mosaicos em que as fronteiras da vinhetagem causam descontinuidades visíveis, comparação radiométrica precisa em todo o quadro da imagem e análise hiperespectral que exige uma resposta de iluminação uniforme. As imagens corrigidas da vinhetagem apresentam brilho uniforme em todo o campo de visão. A saída apresenta a remoção do escurecimento das bordas, com resposta radiométrica uniforme do centro às bordas da imagem; os pixels periféricos podem apresentar ruído elevado se fortemente corrigidos; as imagens corrigidas se integram perfeitamente aos fluxos de trabalho de análise multiespectral sem artefatos radiométricos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Imagem raster de entrada."
              },
              "pp": {
                "label": "Ponto principal",
                "description": "Caminho do vetor de pontos (ou objeto vetorial tipado) contendo o ponto principal."
              },
              "focal_length": {
                "label": "Distância focal",
                "description": "Distância focal da câmera em mm (padrão 304.8)."
              },
              "image_width": {
                "label": "Largura da imagem",
                "description": "Distância entre as bordas esquerda e direita da imagem em mm (padrão 228.6)."
              },
              "n": {
                "label": "N",
                "description": "Expoente n do modelo de cosseno (padrão 4.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "dark_object_subtraction": {
            "name": "Subtração do objeto escuro",
            "description": "A subtração do objeto escuro (DOS) é uma heurística simples, porém eficaz, para a remoção da névoa atmosférica sem exigir dados meteorológicos auxiliares nem modelos complexos de transferência radiativa. A técnica explora o princípio de que uma reflectância zero deveria produzir um sinal de reflectância zero (desprezando o espalhamento Rayleigh); qualquer sinal observado em superfícies opticamente negras (águas profundas, sombra de floresta densa, asfalto urbano) é atribuído à radiância de trajetória atmosférica causada pelo espalhamento por aerossóis. Esta ferramenta identifica o número digital mínimo de cada banda na imagem, interpreta-o como névoa atmosférica e o subtrai de todos os pixels como um deslocamento constante por banda; variantes mais sofisticadas (DOS2, DOS3, DOS4) consideram o espalhamento Rayleigh e a profundidade óptica variável dos aerossóis usando índices de vegetação ou agrupamento de pixels escuros. As principais capacidades incluem análise de histograma para isolar objetos escuros e distinguir a névoa dependente da cena da verdadeira reflectância zero, mascaramento opcional de feições conhecidas de alta reflectância (áreas urbanas, neve, nuvens) que enviesariam a identificação de objetos escuros, correção da névoa específica por banda e cálculo rápido adequado para processamento em tempo real ou em grande escala. Os casos de uso incluem estimativas rápidas de reflectância, monitoramento da vegetação e da qualidade da água em que a calibração absoluta é menos crítica do que as mudanças relativas, mapeamento rápido para resposta a desastres e dados históricos arquivados para os quais não há informações precisas sobre aerossóis. A entrada compreende a reflectância no topo da atmosfera ou a radiância calibrada, máscaras opcionais de cobertura do solo para excluir feições brilhantes e os metadados da cena. A saída é a reflectância corrigida da névoa, as estimativas de radiância de trajetória atmosférica por banda e indicadores de qualidade que mostram a confiança na identificação de objetos escuros (por exemplo, poucos pixels escuros, cena dominada por áreas urbanas). Embora rudimentar em comparação com os modelos de transferência radiativa, a DOS continua prática para análises multitemporais e mapeamentos de cobertura global quando dados atmosféricos sofisticados não estão disponíveis.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Pilha de rasters de entrada (um ou mais rasters)."
              },
              "percentile": {
                "label": "Percentil",
                "description": "Percentil de objeto escuro por banda (padrão 1.0)."
              },
              "clamp_non_negative": {
                "label": "Limitar a não negativos",
                "description": "Se verdadeiro, limita os valores corrigidos abaixo de zero a zero (padrão true)."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta as entradas para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              },
              "output_diagnostic_offsets": {
                "label": "Saída de deslocamentos de diagnóstico",
                "description": "Caminho opcional do raster de saída para os diagnósticos de deslocamento de objeto escuro por banda."
              }
            }
          },
          "dn_to_toa_reflectance": {
            "name": "De ND para reflectância TOA",
            "description": "A conversão de número digital para reflectância no topo da atmosfera transforma os números digitais brutos do sensor em valores de reflectância espectral fisicamente significativos, aplicando coeficientes de calibração radiométrica por banda derivados dos metadados do satélite. A conversão aplica o reescalonamento radiométrico, a correção pela irradiância espectral solar exoatmosférica, a compensação do ângulo zenital solar e, opcionalmente, a normalização pela distância Terra-Sol, para produzir valores de reflectância diretamente comparáveis entre sensores, datas de aquisição e localizações geográficas. A reflectância no topo da atmosfera representa a proporção da energia solar incidente refletida pelos alvos da superfície terrestre no sensor antes dos efeitos atmosféricos, servindo como base para a análise quantitativa de sensoriamento remoto. Os principais recursos incluem aplicação de coeficientes de calibração por banda com leitura completa dos metadados dos produtos de satélite padrão, cálculo automático da geometria solar a partir da data/hora e do local de aquisição, correção opcional da distância Terra-Sol para a variabilidade sazonal e tratamento flexível de múltiplos tipos de sensores com formatos de coeficientes padronizados. As aplicações abrangem detecção quantitativa de mudanças usando unidades físicas consistentes, comparação radiométrica absoluta entre aquisições multitemporais e diferentes sensores, cálculo de índices espectrais de vegetação que exigem reflectância precisa e validação entre sensores em trabalhos com constelações de satélites. A reflectância TOA permite fluxos de trabalho de análise rigorosos e resultados cientificamente defensáveis. Os valores de reflectância de saída variam de 0-1 (às vezes expressos como 0-10000 para precisão inteira), representando proporções adimensionais; os metadados incorporam os coeficientes de calibração usados e os parâmetros de geometria do sensor; valores negativos indicam problemas de qualidade dos dados que exigem mascaramento antes da análise.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Pilha de rasters DN de entrada (um ou mais rasters)."
              },
              "reflectance_mult": {
                "label": "Multiplicador de reflectância",
                "description": "Coeficiente(s) multiplicativo(s) por banda, escalar ou matriz do tamanho de inputs."
              },
              "reflectance_add": {
                "label": "Adição de reflectância",
                "description": "Coeficiente(s) aditivo(s) por banda, escalar ou matriz do tamanho de inputs (padrão 0)."
              },
              "sensor_bundle_root": {
                "label": "Raiz do pacote do sensor",
                "description": "Raiz opcional do pacote Landsat/Sentinel-2 usada para derivar automaticamente os coeficientes quando os coeficientes explícitos são omitidos."
              },
              "sun_elevation_deg": {
                "label": "Elevação solar (graus)",
                "description": "Ângulo de elevação solar opcional em graus para a correção por cosseno. Derivado automaticamente dos metadados do pacote quando disponível."
              },
              "apply_solar_correction": {
                "label": "Aplicar correção solar",
                "description": "Se verdadeiro (padrão), divide por sin(sun_elevation)."
              },
              "clamp_unit_interval": {
                "label": "Limitar ao intervalo unitário",
                "description": "Se verdadeiro (padrão), limita as saídas a [0, 1]."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta as entradas para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "terrain_corrected_optical_analytics": {
            "name": "Analítica óptica corrigida pelo terreno",
            "description": "Correção C topográfica de bandas ópticas multiespectrais usando um DEM corregistrado. Gera a pilha de reflectância da superfície, o fator de correção, a máscara de nuvens/sombras e a confiança da qualidade.",
            "params": {
              "input_dem": {
                "label": "DEM de entrada",
                "description": "Raster DEM corregistrado com as bandas ópticas."
              },
              "bundle_root": {
                "label": "Raiz do pacote",
                "description": "Diretório raiz opcional do pacote do sensor óptico (atualmente Sentinel-2 SAFE, Landsat ou DIMAP SPOT/Pleiades) usado para resolver automaticamente as bandas necessárias, o QA quando disponível e os metadados solares quando as entradas explícitas são omitidas."
              },
              "input_red": {
                "label": "Vermelho de entrada",
                "description": "Raster da banda do vermelho (opcional quando bundle_root é fornecido)."
              },
              "input_nir": {
                "label": "NIR de entrada",
                "description": "Raster da banda NIR (opcional quando bundle_root é fornecido)."
              },
              "input_green": {
                "label": "Verde de entrada",
                "description": "Raster da banda do verde (opcional)."
              },
              "input_blue": {
                "label": "Azul de entrada",
                "description": "Raster da banda do azul (opcional). Resolvido automaticamente a partir dos metadados do pacote quando bundle_root é fornecido."
              },
              "solar_mode": {
                "label": "Modo solar",
                "description": "Modo de resolução dos ângulos solares: auto, manual, metadata, datetime_location."
              },
              "solar_zenith_deg": {
                "label": "Zênite solar (graus)",
                "description": "Ângulo zenital solar em graus (obrigatório no modo manual)."
              },
              "solar_azimuth_deg": {
                "label": "Azimute solar (graus)",
                "description": "Azimute solar em graus (horário a partir do norte, obrigatório no modo manual)."
              },
              "acquisition_datetime_utc": {
                "label": "Data e hora de aquisição (UTC)",
                "description": "Carimbo de tempo da aquisição em RFC3339 UTC para o modo datetime_location."
              },
              "latitude": {
                "label": "Latitude",
                "description": "Latitude opcional para o modo datetime_location."
              },
              "longitude": {
                "label": "Longitude",
                "description": "Longitude opcional para o modo datetime_location."
              },
              "profile": {
                "label": "Perfil",
                "description": "Perfil de processamento: conservative, balanced, fast."
              },
              "cloud_threshold": {
                "label": "Limiar de nuvem",
                "description": "Limiar de nuvem opcional nas unidades da banda de origem. Inferido automaticamente quando omitido."
              },
              "shadow_threshold": {
                "label": "Limiar de sombra",
                "description": "Limiar opcional de sombra de nuvem nas unidades da banda de origem. Inferido automaticamente quando omitido."
              },
              "qa_mask": {
                "label": "Máscara QA",
                "description": "Caminho opcional do raster de máscara QA."
              },
              "qa_mask_format": {
                "label": "Formato da máscara QA",
                "description": "Codificação da máscara QA: auto, landsat_qa_pixel, sentinel2_scl, sentinel2_qa60, binary."
              },
              "mask_strategy": {
                "label": "Estratégia de máscara",
                "description": "Estratégia de máscara: auto, qa_only, heuristic_only, qa_plus_heuristic."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Exagero vertical para declividade/orientação."
              },
              "output_prefix": {
                "label": "Prefixo de saída",
                "description": "Prefixo para todos os artefatos de saída."
              }
            }
          },
          "land_surface_temperature_single_channel": {
            "name": "Temperatura de superfície por canal único",
            "description": "A estimativa da temperatura da superfície terrestre a partir de um único canal infravermelho termal estima a temperatura radiativa da superfície por inversão da equação de transferência radiativa. Os números digitais do sensor são convertidos em radiância espectral usando coeficientes de calibração específicos do sensor; a radiância é invertida em temperatura de brilho pela função de Planck usando constantes termais específicas da banda; a temperatura de brilho é convertida em LST física por meio de correções empíricas de emissividade. A emissividade é derivada de índices de vegetação ou fornecida diretamente, corrigindo as variações de emissividade termal dependentes do material. Principais recursos: requer uma única banda termal; processamento radiométrico simples; cálculo rápido; sem necessidade de múltiplos canais; estimativa da emissividade por índice de vegetação; saída direta da temperatura física. Casos de uso: mapeamento de ilhas de calor urbanas; monitoramento do estresse por seca; detecção de feições geotermais; acompanhamento da assinatura termal de incêndios florestais; gestão da água na agricultura. Interpretação da saída: a saída é a temperatura radiativa da superfície em Kelvin (ou Celsius, se convertida). A estimativa com canal único não consegue remover totalmente os efeitos do vapor d'água atmosférico; o viés atmosférico residual é tipicamente de 2-5 K. Os erros de emissividade se propagam diretamente: um erro de emissividade de ±0.05 ≈ erro de temperatura de ±1-2 K. A emissividade baseada na vegetação varia com o NDVI; o solo exposto apresenta emissividade menor do que a vegetação. Séries temporais de LST revelam tendências de aquecimento/resfriamento; anomalias de LST > fundo ± 5K indicam feições termais.",
            "params": {
              "thermal_input": {
                "label": "Entrada térmica",
                "description": "Caminho do raster térmico (DN por padrão, ou temperatura de brilho se input_is_brightness_temp=true)."
              },
              "input_is_brightness_temp": {
                "label": "Entrada é temperatura de brilho",
                "description": "Se verdadeiro, thermal_input já é temperatura de brilho em Kelvin (padrão false)."
              },
              "emissivity_input": {
                "label": "Entrada de emissividade",
                "description": "Caminho opcional do raster de emissividade alinhado a thermal_input."
              },
              "emissivity_constant": {
                "label": "Constante de emissividade",
                "description": "Emissividade alternativa quando emissivity_input não é fornecido (padrão 0.98)."
              },
              "sensor_bundle_root": {
                "label": "Raiz do pacote do sensor",
                "description": "Raiz opcional do pacote Landsat usada para derivar a radiância térmica e as constantes de Planck."
              },
              "thermal_band_number": {
                "label": "Número da banda térmica",
                "description": "Número da banda térmica para consulta de metadados (padrão 10)."
              },
              "radiance_mult": {
                "label": "Multiplicador de radiância",
                "description": "Fator multiplicativo da radiância térmica para a conversão DN->radiância."
              },
              "radiance_add": {
                "label": "Adição de radiância",
                "description": "Fator aditivo da radiância térmica para a conversão DN->radiância."
              },
              "k1_constant": {
                "label": "Constante K1",
                "description": "Constante térmica K1 de Planck."
              },
              "k2_constant": {
                "label": "Constante K2",
                "description": "Constante térmica K2 de Planck."
              },
              "wavelength_um": {
                "label": "Comprimento de onda (µm)",
                "description": "Comprimento de onda térmico efetivo em micrômetros (padrão inferido por thermal_band_number)."
              },
              "output_units": {
                "label": "Unidades de saída",
                "description": "Unidades de saída: celsius (padrão) ou kelvin."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta emissivity_input para o CRS de thermal_input quando necessário."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "land_surface_temperature_split_window": {
            "name": "Temperatura de superfície por janela dividida",
            "description": "A estimativa de LST por split-window usa duas bandas do infravermelho termal para estimar simultaneamente a temperatura e a emissividade da superfície por inversão da equação de transferência radiativa. A absorção atmosférica diferencial entre as duas bandas (tipicamente na região de 10-12 μm) permite a correção do vapor d'água atmosférico, melhorando a acurácia em relação aos métodos de canal único. As temperaturas de brilho de ambas as bandas são invertidas com uma parametrização da emissividade baseada na fração de vegetação ou com grades de emissividade fornecidas pelo usuário. Principais recursos: requer duas bandas termais; correção atmosférica por absorção diferencial; estimativa simultânea de temperatura/emissividade; algoritmos publicados para sensores padrão; compensação atmosférica superior à do canal único. Casos de uso: mapeamento de ilhas de calor urbanas; detecção de secas agrícolas; detecção de feições geotermais; estudos de interação superfície-atmosfera; detecção de anomalias vulcânicas/termais. Interpretação da saída: a saída é a temperatura radiativa da superfície com correção atmosférica aprimorada. A estimativa por split-window reduz o viés do vapor d'água atmosférico para <1-2 K, em comparação com erros de 2-5 K do canal único. O compromisso entre temperatura e emissividade permanece: áreas com índice de vegetação alto apresentam baixa emissividade, exigindo interpretação cuidadosa. Superfícies heterogêneas (vegetação/solo mistos) apresentam valores intermediários. A consistência temporal melhora a confiabilidade da detecção de mudanças; tendências de LST > ±3K indicam mudanças termais significativas.",
            "params": {
              "thermal1_input": {
                "label": "Entrada térmica 1",
                "description": "Caminho do primeiro raster térmico (por exemplo, Landsat B10)."
              },
              "thermal2_input": {
                "label": "Entrada térmica 2",
                "description": "Caminho do segundo raster térmico (por exemplo, Landsat B11)."
              },
              "input_is_brightness_temp": {
                "label": "Entrada é temperatura de brilho",
                "description": "Se verdadeiro, as entradas térmicas já são temperaturas de brilho em Kelvin (padrão false)."
              },
              "emissivity_mean_input": {
                "label": "Entrada de emissividade média",
                "description": "Caminho opcional do raster de emissividade média."
              },
              "emissivity_delta_input": {
                "label": "Entrada de diferença de emissividade",
                "description": "Caminho opcional do raster de diferença de emissividade (epsilon1 - epsilon2)."
              },
              "emissivity_mean_constant": {
                "label": "Constante de emissividade média",
                "description": "Constante alternativa de emissividade média quando emissivity_mean_input está ausente (padrão 0.98)."
              },
              "emissivity_delta_constant": {
                "label": "Constante de diferença de emissividade",
                "description": "Constante alternativa de diferença de emissividade quando emissivity_delta_input está ausente (padrão 0.0)."
              },
              "sensor_bundle_root": {
                "label": "Raiz do pacote do sensor",
                "description": "Raiz opcional do pacote Landsat usada para derivar a radiância térmica e as constantes de Planck."
              },
              "thermal_band1_number": {
                "label": "Número da banda térmica 1",
                "description": "Número da banda para consulta de metadados de thermal1_input (padrão 10)."
              },
              "thermal_band2_number": {
                "label": "Número da banda térmica 2",
                "description": "Número da banda para consulta de metadados de thermal2_input (padrão 11)."
              },
              "radiance1_mult": {
                "label": "Multiplicador de radiância 1",
                "description": "Fator multiplicativo da radiância da banda 1."
              },
              "radiance1_add": {
                "label": "Adição de radiância 1",
                "description": "Fator aditivo da radiância da banda 1."
              },
              "k1_1": {
                "label": "K1 1",
                "description": "Constante K1 de Planck da banda 1."
              },
              "k2_1": {
                "label": "K2 1",
                "description": "Constante K2 de Planck da banda 1."
              },
              "radiance2_mult": {
                "label": "Multiplicador de radiância 2",
                "description": "Fator multiplicativo da radiância da banda 2."
              },
              "radiance2_add": {
                "label": "Adição de radiância 2",
                "description": "Fator aditivo da radiância da banda 2."
              },
              "k1_2": {
                "label": "K1 2",
                "description": "Constante K1 de Planck da banda 2."
              },
              "k2_2": {
                "label": "K2 2",
                "description": "Constante K2 de Planck da banda 2."
              },
              "coeff_a0": {
                "label": "Coeficiente A0",
                "description": "Coeficiente a0 da janela dividida (padrão 0.0)."
              },
              "coeff_a1": {
                "label": "Coeficiente A1",
                "description": "Coeficiente a1 da janela dividida para o termo T1 (padrão 1.0)."
              },
              "coeff_a2": {
                "label": "Coeficiente A2",
                "description": "Coeficiente a2 da janela dividida para o termo (T1-T2) (padrão 0.0)."
              },
              "coeff_a3": {
                "label": "Coeficiente A3",
                "description": "Coeficiente a3 da janela dividida para o termo (T1-T2)^2 (padrão 0.0)."
              },
              "coeff_a4": {
                "label": "Coeficiente A4",
                "description": "Coeficiente a4 da janela dividida para o termo (1-emissivity_mean) (padrão 0.0)."
              },
              "coeff_a5": {
                "label": "Coeficiente A5",
                "description": "Coeficiente a5 da janela dividida para o termo emissivity_delta (padrão 0.0)."
              },
              "output_units": {
                "label": "Unidades de saída",
                "description": "Unidades de saída: celsius (padrão) ou kelvin."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta os rasters suplementares para corresponder ao CRS de thermal1_input quando necessário."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "ndvi_based_emissivity": {
            "name": "Emissividade baseada em NDVI",
            "description": "A estimativa da emissividade da superfície terrestre baseada no NDVI deriva a emissividade termal de banda larga a partir da fração de vegetação calculada com o NDVI, permitindo correções de transferência radiativa termal para a estimativa da temperatura da superfície terrestre a partir de dados de satélite no infravermelho termal. O algoritmo calcula o NDVI a partir da reflectância do vermelho e do infravermelho próximo, transforma o NDVI em fração de vegetação e, em seguida, aplica relações empíricas entre a fração de vegetação e a emissividade validadas por medições de campo e simulações de transferência radiativa. A vegetação afeta significativamente a emissividade termal; mais vegetação aumenta a emissividade para cerca de ~0.99, enquanto a emissividade do solo exposto varia de ~0.90-0.98, dependendo da composição do solo e da rugosidade da superfície. Os principais recursos incluem cálculo automático da fração de vegetação a partir do NDVI sem calibração de campo, relações empíricas padrão fundamentadas na teoria física da transferência radiativa, análise de sensibilidade opcional que explora as variações de emissividade e compatibilidade direta com dados de satélite no infravermelho termal. As aplicações incluem estimativa da temperatura da superfície terrestre a partir de dados de satélites termais que exigem correções precisas da emissividade (Landsat, MODIS, Sentinel-3), análise de ilhas de calor urbanas com correção para a vegetação variável, modelagem termal em aplicações de recursos hídricos e agrícolas e aplicações climáticas que exigem conjuntos de dados termais globais consistentes. A emissividade baseada no NDVI permite uma correção termal precisa. A saída produz um raster de emissividade (0-1) adequado para a correção de transferência radiativa termal, um produto intermediário de fração de vegetação que permite a interpretação e metadados que documentam as relações empíricas e as propriedades do solo/superfície assumidas; os valores de emissividade orientam a incerteza da correção termal e a adequação para aplicações específicas.",
            "params": {
              "red_input": {
                "label": "Entrada vermelha",
                "description": "Caminho do raster da banda do vermelho."
              },
              "nir_input": {
                "label": "Entrada NIR",
                "description": "Caminho do raster da banda NIR."
              },
              "ndvi_soil": {
                "label": "NDVI do solo",
                "description": "Limiar de NDVI para a fração de solo exposto (padrão 0.2)."
              },
              "ndvi_vegetation": {
                "label": "NDVI da vegetação",
                "description": "Limiar de NDVI para a fração de vegetação plena (padrão 0.5)."
              },
              "emissivity_soil": {
                "label": "Emissividade do solo",
                "description": "Emissividade assumida do solo (padrão 0.97)."
              },
              "emissivity_vegetation": {
                "label": "Emissividade da vegetação",
                "description": "Emissividade assumida da vegetação (padrão 0.99)."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta nir_input para o CRS de red_input quando necessário."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "continuum_removal": {
            "name": "Remoção do contínuo",
            "description": "A remoção do contínuo normaliza espectros multiespectrais estimando a envoltória convexa superior (contínuo) que envolve o espectro e dividindo cada banda pelo valor correspondente do contínuo. Remove a inclinação espectral geral e as variações de brilho, permitindo uma visualização aprimorada das feições de absorção (bandas, profundidades). As profundidades e posições de absorção são padronizadas, permitindo a identificação de minerais/materiais por meio de bibliotecas espectrais. A linha do contínuo é calculada por um algoritmo de envoltória convexa que conecta os máximos locais ao longo da faixa espectral. Principais recursos: remove o contínuo espectral; realça as feições de absorção; normaliza as variações de brilho; permite a correspondência com bibliotecas espectrais; padroniza a forma espectral. Casos de uso: identificação de minerais; classificação de materiais; análise espectral da vegetação; detecção de anomalias espectrais; mapeamento de feições de absorção. Interpretação da saída: os espectros com contínuo removido apresentam feições de absorção (valores <1.0) que indicam bandas específicas do material. As profundidades de absorção indicam a intensidade da feição; feições rasas (<0.2) indicam componentes menores; feições profundas (>0.5) indicam absorções dominantes. As posições das feições no espaço de comprimentos de onda permitem a identificação de materiais por meio de bibliotecas de referência. Espectros planos com contínuo removido (próximos de 1.0) indicam materiais espectralmente neutros.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Pilha de rasters de entrada (um raster por banda)."
              },
              "wavelengths": {
                "label": "Comprimentos de onda",
                "description": "Matriz opcional de comprimentos de onda estritamente crescentes correspondendo ao comprimento de inputs."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster multibanda de saída."
              }
            }
          },
          "linear_spectral_unmixing": {
            "name": "Desmistura espectral linear",
            "description": "A desmistura espectral linear decompõe o vetor multiespectral de cada pixel como uma combinação linear não negativa de espectros de membros extremos (endmembers) que representam assinaturas de materiais puros. A otimização por mínimos quadrados não negativos resolve min ||y - Ax||² sujeito a x ≥ 0, em que y é o espectro do pixel, A contém as assinaturas dos membros extremos e x representa as frações de abundância. A restrição de soma igual a um é imposta, garantindo que os valores de abundância representem proporções físicas. Os membros extremos são derivados de dados de treinamento, bancos de dados de bibliotecas ou extraídos por algoritmos de extração de membros extremos. Principais recursos: estimativa de materiais em nível subpixel; interpretação física das frações de abundância; suporta múltiplos membros extremos; saída restrita a intervalos válidos [0,1]; permite a detecção de mudanças de materiais. Casos de uso: mapeamento da abundância da cobertura do solo; estimativa da composição mineral; inventário de materiais urbanos; frações de vegetação/solo/superfície impermeável; classificação baseada em bibliotecas espectrais. Interpretação da saída: os mapas de abundância de saída mostram as frações de materiais por pixel, que somam 1.0. Abundâncias <0.1 indicam componentes menores; abundâncias >0.7 indicam materiais dominantes. O erro residual indica a qualidade da desmistura; resíduos baixos indicam um bom ajuste espectral; resíduos altos indicam incompatibilidade dos membros extremos ou complexidade do pixel.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Pilha de rasters de entrada (um raster por banda)."
              },
              "endmembers": {
                "label": "Membros finais",
                "description": "Assinaturas dos membros finais como matriz de objetos {name, values} ou matrizes numéricas."
              },
              "sum_to_one": {
                "label": "Soma igual a um",
                "description": "Se verdadeiro (padrão), normaliza as frações não negativas para somarem um."
              },
              "iterations": {
                "label": "Iterações",
                "description": "Número de iterações do gradiente projetado (padrão 80)."
              },
              "step_size": {
                "label": "Tamanho do passo",
                "description": "Tamanho do passo do gradiente projetado (padrão 0.05)."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster multibanda de frações de saída."
              },
              "output_residual": {
                "label": "Saída de resíduo",
                "description": "Caminho opcional do raster de RMS residual de saída."
              }
            }
          },
          "minimum_noise_fraction": {
            "name": "Fração de ruído mínima",
            "description": "A fração mínima de ruído transforma dados hiperespectrais em um processo de duas etapas: estimativa da covariância do ruído seguida de branqueamento do ruído e análise de componentes principais. O branqueamento do ruído descorrelaciona o ruído entre as bandas; a PCA no espaço branqueado identifica as direções dominadas pelo sinal. Os componentes de saída são ordenados pela relação sinal-ruído, com os primeiros componentes representando o sinal e os posteriores, o ruído. Permite a redução de ruído por truncamento de componentes sem os artefatos convencionais de suavização. Principais recursos: separa o sinal do ruído; concentração do ruído nos últimos componentes; a seleção de componentes permite a filtragem do ruído; preserva a fidelidade espectral; permite a redução da dimensionalidade. Casos de uso: remoção de ruído de imagens hiperespectrais; redução da dimensionalidade para classificação; realce do sinal; caracterização do ruído; avaliação da qualidade da imagem. Interpretação da saída: os primeiros 1-3 componentes MNF normalmente contêm 70-90% do sinal; os componentes posteriores são progressivamente mais ruidosos. O truncamento de componentes (mantendo os primeiros N componentes) remove o ruído preservando as informações espectrais essenciais. As imagens dos componentes MNF permitem a avaliação visual do ruído; o desvio padrão dos últimos componentes indica o nível de ruído.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Pilha de rasters de entrada (um raster por banda)."
              },
              "num_components": {
                "label": "Número de componentes",
                "description": "Número de componentes MNF de saída (padrão: todas as bandas)."
              },
              "noise_mode": {
                "label": "Modo de ruído",
                "description": "Modo do estimador de ruído: 'difference_x' (padrão) ou 'difference_y'."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster multibanda de componentes MNF de saída."
              },
              "output_inverse": {
                "label": "Saída inversa",
                "description": "Caminho opcional do raster multibanda reconstruído a partir dos componentes MNF retidos."
              }
            }
          },
          "spectral_angle_mapper": {
            "name": "Mapeador de ângulo espectral",
            "description": "O mapeamento por ângulo espectral classifica pixels calculando os ângulos espectrais entre o espectro de cada pixel e os espectros de uma biblioteca de referência, atribuindo os pixels ao espectro da biblioteca com o menor ângulo, o que representa a máxima similaridade espectral independentemente da intensidade da iluminação. O SAM trata cada pixel e cada espectro de referência como vetores em um espaço espectral N-dimensional, calculando os ângulos entre os vetores por meio de produtos escalares e transformações de cosseno inverso. Essa classificação baseada no ângulo espectral é invariante aos efeitos de iluminação e topográficos que escalonam o brilho geral mas preservam a forma espectral, tornando-a robusta para terrenos complexos e condições de aquisição variáveis. Os principais recursos incluem definição automática do limiar de ângulo espectral permitindo uma confiança probabilística na classificação, importação de bibliotecas de referência com suporte a assinaturas espectrais fornecidas pelo usuário a partir de amostras de campo ou bibliotecas espectrais, invariância à iluminação que trata condições de iluminação variáveis preservando a discriminação espectral e cálculo rápido que permite a classificação em tempo real de imagens grandes. As aplicações comuns incluem identificação de materiais e mapeamento geológico usando as bibliotecas espectrais do USGS, classificação de espécies de vegetação combinando dados de satélite multiespectrais com espectros coletados em campo, prospecção mineral em levantamentos aerotransportados hiperespectrais e avaliação da acurácia comparando os espectros da imagem com assinaturas de referência coletadas em campo. A saída do SAM permite uma identificação confiável de materiais aproveitando as assinaturas de forma espectral. A saída da classificação produz uma imagem de banda única com rótulos inteiros de classe correspondentes às entradas da biblioteca; um raster de confiança registra opcionalmente os ângulos espectrais mínimos de cada pixel, permitindo a filtragem por limiar; a saída permite a identificação direta de materiais e a filtragem baseada na confiança.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Pilha de rasters de entrada (um raster por banda)."
              },
              "endmembers": {
                "label": "Membros finais",
                "description": "Assinaturas dos membros finais como matriz de objetos {name, values} ou matrizes numéricas."
              },
              "threshold_angle_deg": {
                "label": "Ângulo limiar (graus)",
                "description": "Ângulo espectral máximo opcional aceito em graus; pixels sem correspondência recebem a classe 0."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de classes de saída."
              },
              "output_angle": {
                "label": "Saída de ângulo",
                "description": "Caminho opcional do raster de saída para o ângulo espectral mínimo (graus)."
              }
            }
          },
          "spectral_library_matching": {
            "name": "Correspondência com biblioteca espectral",
            "description": "A correspondência com bibliotecas espectrais realiza a classificação comparando os espectros dos pixels da imagem com os espectros de uma biblioteca de referência usando múltiplas métricas de similaridade, incluindo o ângulo espectral (ângulo entre os vetores dos espectros), a distância euclidiana (diferença de magnitude) e a divergência de informação espectral. O algoritmo aceita uma biblioteca espectral de referência fornecida pelo usuário com espectros de materiais/classes conhecidos, calcula métricas de similaridade entre cada pixel da imagem e as entradas da biblioteca, identifica o espectro da biblioteca com a melhor correspondência (menor ângulo, menor distância ou menor divergência) e gera rótulos de classe com escores opcionais de confiança/similaridade. A correspondência com bibliotecas permite a identificação de materiais sem amostras de treinamento de campo, aproveitando espectros de referência do USGS, de levantamentos de campo ou de espectroscopia de laboratório. Os principais recursos incluem múltiplas métricas de similaridade que permitem selecionar a métrica para características espectrais e distribuições de classes específicas, flexibilidade na importação de bibliotecas com suporte a diversos formatos de bibliotecas espectrais, quantificação opcional da confiança/incerteza e saída direta de materiais identificáveis. As aplicações incluem mapeamento geológico usando a biblioteca espectral do USGS para mineralogia, classificação da vegetação usando bibliotecas espectrais de referência de plantas, identificação de materiais de construção em áreas urbanas e análise de levantamentos hiperespectrais aerotransportados. A correspondência com bibliotecas espectrais permite a identificação automatizada de materiais. A saída compreende um mapa classificado com os IDs das entradas da biblioteca como rótulos de classe, um raster de similaridade/confiança que quantifica a qualidade da correspondência e, opcionalmente, uma pilha completa de ângulos espectrais/distâncias para cada entrada da biblioteca, permitindo a filtragem por limiar; os metadados documentam a fonte da biblioteca de referência e a métrica de similaridade utilizada.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Pilha de rasters de entrada (um raster por banda)."
              },
              "library": {
                "label": "Biblioteca",
                "description": "Entradas da biblioteca espectral como matriz de objetos {name, values} ou matrizes numéricas."
              },
              "library_csv": {
                "label": "CSV da biblioteca",
                "description": "Caminho opcional da biblioteca espectral em CSV (linhas name,b1,b2,... ou b1,b2,...). Usado quando 'library' não é fornecido."
              },
              "metric": {
                "label": "Métrica",
                "description": "Métrica de correspondência: 'sam' (padrão), 'euclidean' ou 'sid'."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de classes de saída."
              },
              "output_score": {
                "label": "Saída de pontuação",
                "description": "Caminho opcional do raster de pontuação da melhor correspondência de saída (ângulo ou distância)."
              }
            }
          },
          "canny_edge_detection": {
            "name": "Detecção de bordas de Canny",
            "description": "Aplica a detecção de bordas multiestágio de Canny (desfoque gaussiano → gradiente de Sobel → supressão de não máximos → limiar duplo → histerese).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada (banda única ou RGB empacotado)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Desvio padrão do kernel de suavização gaussiana em pixels. Padrão: 0.5."
              },
              "low_threshold": {
                "label": "Limiar inferior",
                "description": "Limiar inferior de histerese (fração 0–1 do gradiente máximo). Padrão: 0.05."
              },
              "high_threshold": {
                "label": "Limiar superior",
                "description": "Limiar superior de histerese (fração 0–1 do gradiente máximo). Padrão: 0.15."
              },
              "add_back": {
                "label": "Adicionar de volta",
                "description": "Se verdadeiro, os pixels de borda são zerados na imagem original em vez de produzir um mapa binário de bordas. Padrão: false."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é mantido em memória."
              }
            }
          },
          "corner_detection": {
            "name": "Detecção de cantos",
            "description": "Identifica padrões de cantos em rasters binários usando modelos hit-and-miss.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "laplacian_filter": {
            "name": "Filtro laplaciano",
            "description": "O filtro laplaciano calcula a segunda derivada espacial da intensidade da imagem, proporcionando uma poderosa detecção de bordas por meio da medição isotrópica (em todas as direções) do gradiente. A implementação aplica um kernel fixo que aproxima o operador laplaciano (soma das segundas derivadas nas direções x e y), capturando as variações de intensidade independentemente da orientação da borda. Ao contrário dos filtros direcionais, essa abordagem trata todas as direções de borda igualmente, tornando-a ideal para a detecção de feições que exige independência da orientação. A base matemática está na aproximação discreta: ∇²I ≈ I(x+1,y) + I(x-1,y) + I(x,y+1) + I(x,y-1) - 4·I(x,y). Os principais recursos incluem a capacidade de detecção de cruzamentos por zero (as bordas verdadeiras ocorrem onde a saída cruza o zero), a insensibilidade à direção da borda e a capacidade de detectar transições de claro para escuro e de escuro para claro de forma idêntica. A filtragem laplaciana se destaca no mapeamento geológico, em que os limites das estruturas aparecem como cruzamentos por zero, na delimitação de limites da vegetação, na extração de redes viárias a partir de imagens de alta resolução e na detecção de contornos de edificações. A interpretação da saída centra-se na compreensão das transições de sinal: valores positivos fortes indicam mínimos escuros locais, valores negativos indicam máximos claros locais e os cruzamentos por zero marcam as bordas verdadeiras. A saída típica varia de -1000 a +1000 para imagens de origem de 8 bits, dependendo do contraste local. Uma magnitude de saída alta indica bordas nítidas e bem definidas; uma magnitude baixa sugere transições graduais. A detecção de cruzamentos por zero exige uma seleção cuidadosa do limiar. Observe que o laplaciano é sensível ao ruído (amplifica o ruído de alta frequência), por isso recomenda-se comumente uma pré-filtragem com suavização gaussiana antes da aplicação.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "variant": {
                "label": "Variante",
                "description": "Variante do kernel: 3x3(1), 3x3(2), 3x3(3), 3x3(4), 5x5(1), 5x5(2)."
              },
              "clip_amount": {
                "label": "Quantidade de corte",
                "description": "Percentual opcional de corte simétrico das caudas (0-40)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "laplacian_of_gaussians_filter": {
            "name": "Filtro laplaciano de gaussianas",
            "description": "Realiza o realce de bordas por laplaciano do gaussiano (LoG), combinando a suavização gaussiana com a detecção de bordas laplaciana. Aproximado computacionalmente por diferença de gaussianas (DoG). Primeiro suaviza a imagem (reduz o ruído) e depois aplica o laplaciano (detecta as bordas). Técnica clássica de detecção de bordas multiescala. A detecção de cruzamentos por zero na saída do LoG identifica as localizações precisas das bordas. O LoG é o padrão para a detecção de bordas no espaço de escalas: o gaussiano remove o ruído e o laplaciano amplifica as bordas. O parâmetro sigma controla a escala das bordas detectadas: sigma pequeno detecta bordas finas, sigma grande detecta bordas largas. O LoG é aproximado por DoG por eficiência. Múltiplos valores de sigma permitem a detecção de bordas multiescala (identificar feições em diferentes escalas). Aplicações: (1) detecção robusta de bordas (resistente ao ruído), (2) detecção de bordas multiescala (usar múltiplos sigma), (3) localização de bordas por cruzamentos por zero, (4) pré-processamento para segmentação, (5) detecção de blobs por cruzamentos por zero do LoG. Fluxo de trabalho: aplicar o LoG→identificar cruzamentos por zero→traçar as bordas→vetorização ou processamento adicional.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma gaussiano usado pelo kernel LoG (0.5-20.0, padrão 0.75)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "prewitt_filter": {
            "name": "Filtro de Prewitt",
            "description": "O operador de Prewitt realiza a detecção de bordas baseada em gradiente de forma semelhante ao Sobel, usando pesos de kernel alternativos otimizados para diferentes características de ruído. A implementação emprega dois kernels de convolução 3×3 que calculam as derivadas direcionais em x e y com ponderação uniforme na linha/coluna central e nas adjacentes, diferindo da abordagem do Sobel, que privilegia o centro. A magnitude do gradiente combina os componentes direcionais por √(Gx² + Gy²), proporcionando uma resposta uniforme quanto à direção. A base matemática está em aproximações de diferenciação discreta que ponderam igualmente todos os pixels contribuintes, em vez de enfatizar os centrais. Os principais recursos incluem uma resposta ao ruído ligeiramente diferente da do Sobel (às vezes superior em imagens extremamente ruidosas), decomposição real em magnitude/direção que permite uma análise sofisticada das bordas, eficiência computacional que exige apenas operações de convolução padrão e eficácia comprovada em imagens de radar, ópticas e termais. A filtragem de Prewitt se destaca na análise de imagens SAR, em que a ponderação uniforme reduz os artefatos de speckle melhor que o Sobel, na detecção de anomalias termais que enfatiza feições lineares e na extração de bordas multiespectrais que exige processamento independente da direção. A interpretação da saída é paralela à do Sobel: a magnitude indica a intensidade da borda (maior = mais nítida), e a direção calculada por atan2(Gy, Gx) fornece a orientação da borda em radianos. A magnitude típica varia de 0-256 para entradas de 8 bits; magnitudes acima de 80 geralmente indicam bordas significativas. Os valores de direção variam de -π a +π; 0 radiano indica bordas puramente horizontais e ±π/2 indica bordas puramente verticais. A ponderação uniforme do kernel normalmente produz respostas de gradiente ligeiramente mais suaves do que o Sobel, potencialmente melhores para feições esparsas ou finas da imagem. Aplique uma filtragem pela mediana complementar para reduzir falsos positivos induzidos por ruído. Combine a saída direcional com a seleção de limiares para fluxos de trabalho de ligação de bordas e extração de fronteiras, fundamentais para os pipelines de segmentação.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "clip_tails": {
                "label": "Cortar caudas",
                "description": "Percentual opcional de corte simétrico das caudas (0-40)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "roberts_cross_filter": {
            "name": "Filtro de cruz de Roberts",
            "description": "O filtro Roberts Cross é um dos primeiros operadores de detecção de bordas, empregando um padrão de kernel cruzado diagonal 2×2 simples, porém eficaz, para calcular os gradientes da imagem com uma sobrecarga computacional mínima. Esse operador usa duas matrizes 2×2 ortogonais giradas 45° em relação ao alinhamento horizontal-vertical, criando máscaras de convolução em forma de cruz que detectam bordas enfatizando cantos e transições diagonais. O filtro aplica kernels separados para os gradientes X e Y, calculando a magnitude pela soma dos valores absolutos ou pela norma euclidiana. Os principais recursos incluem excepcional eficiência computacional devido ao pequeno tamanho do kernel 2×2, requisitos mínimos de memória e processamento rápido em grandes conjuntos de dados raster. O Roberts Cross é particularmente eficaz para detectar feições de escala fina e transições abruptas em imagens de alta resolução. Os principais casos de uso incluem detecção rápida de bordas em aplicações com restrições de tempo, processamento de fluxos de vídeo em tempo real, detecção preliminar de fronteiras antes de algoritmos avançados e ambientes com recursos limitados. As aplicações abrangem pré-processamento de levantamentos aéreos, avaliação da qualidade de imagens de satélite, extração de feições para pipelines de aprendizado de máquina e implementações de SIG móvel. A interpretação da saída mostra as localizações das bordas como pixels de alta magnitude onde ocorrem variações espectrais na vizinhança 2×2. As regiões de fundo normalmente exibem valores próximos de zero; as bordas aparecem como feições lineares brilhantes que indicam os limites entre classes distintas de cobertura do solo. A saída é inerentemente esparsa, contendo bordas apenas onde os gradientes excedem os limiares de precisão computacional. Para imagens multiespectrais, aplique-o independentemente a cada banda ou calcule antes um índice de diferença normalizada. Um pós-processamento de afinamento de bordas costuma seguir a aplicação do Roberts para refinar a saída em fluxos de trabalho de conversão para vetor.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "clip_amount": {
                "label": "Quantidade de corte",
                "description": "Percentual opcional de corte simétrico das caudas (0-50)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "sobel_filter": {
            "name": "Filtro de Sobel",
            "description": "O operador de Sobel detecta bordas por meio da estimativa direcional do gradiente nas direções x (horizontal) e y (vertical), combinando kernels de derivadas ortogonais em uma representação unificada de magnitude. A implementação aplica dois kernels de convolução 3×3 independentemente (um que enfatiza bordas horizontais e outro que enfatiza bordas verticais) e, em seguida, combina os resultados pela norma euclidiana: magnitude = √(Gx² + Gy²). Essa abordagem separável reduz o custo computacional mantendo a precisão da detecção de bordas. A base matemática deriva de aproximações discretas dos gradientes da imagem, com pesos de kernel que privilegiam os pixels centrais para melhorar a robustez ao ruído. Os principais recursos incluem medição direcional do gradiente que permite determinar a orientação das bordas, sobrecarga computacional relativamente baixa, eficácia comprovada em imagens de satélite e aéreas e requisitos mínimos de ajuste de parâmetros. A filtragem de Sobel encontra ampla aplicação no cálculo da declividade e da orientação do terreno, na extração de limites de feições para fluxos de trabalho de detecção de objetos, na delimitação de redes fluviais a partir de dados de DEM e no mapeamento de infraestrutura (estradas, edificações, linhas de energia) a partir de imagens de alta resolução. A interpretação da saída revela que a magnitude indica a intensidade da borda (valores maiores = transições mais nítidas), enquanto os componentes direcionais (Gx, Gy) permitem a análise da orientação. As magnitudes típicas do gradiente variam de 0-256 para imagens de 8 bits; valores acima de 100 geralmente indicam bordas significativas. A razão Gx/Gy fornece informações sobre a orientação da borda: uma razão próxima de 1 indica bordas a 45 graus, uma razão >>1 indica feições horizontais e uma razão <<1 indica feições verticais. Falsos positivos ocorrem comumente em regiões ruidosas; a filtragem pela mediana ou operações morfológicas reduzem eficazmente as detecções espúrias. Combine com limiarização para obter máscaras binárias de bordas adequadas para pipelines de segmentação.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "variant": {
                "label": "Variante",
                "description": "Variante de tamanho do kernel: 3x3 (padrão) ou 5x5."
              },
              "clip_tails": {
                "label": "Cortar caudas",
                "description": "Percentual opcional de corte simétrico das caudas (0-40)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "balance_contrast_enhancement": {
            "name": "Realce de contraste balanceado",
            "description": "Reduz o viés de cor em uma imagem RGB compactada usando estiramentos parabólicos por canal.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "band_mean": {
                "label": "Média da banda",
                "description": "Brilho médio de saída desejado para cada canal (padrão 100.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "create_colour_composite": {
            "name": "Criar composição colorida",
            "description": "Cria uma composição colorida RGB compactada a partir de rasters vermelho, verde, azul e, opcionalmente, de opacidade.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "red": {
                "label": "Vermelho",
                "description": "Caminho do raster da banda do vermelho ou objeto raster tipado."
              },
              "green": {
                "label": "Verde",
                "description": "Caminho do raster da banda do verde ou objeto raster tipado."
              },
              "blue": {
                "label": "Azul",
                "description": "Caminho do raster da banda do azul ou objeto raster tipado."
              },
              "opacity": {
                "label": "Opacidade",
                "description": "Caminho opcional do raster de opacidade ou objeto raster tipado."
              },
              "enhance": {
                "label": "Realçar",
                "description": "Aplica o realce de contraste balanceado após a composição (padrão true)."
              },
              "treat_zeros_as_nodata": {
                "label": "Tratar zeros como nodata",
                "description": "Trata os valores zero das entradas RGB como nodata/fundo (padrão false)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "direct_decorrelation_stretch": {
            "name": "Realce por descorrelação direta",
            "description": "Melhora a saturação de cor de uma imagem RGB compactada reduzindo o componente acromático e estirando linearmente os canais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "achromatic_factor": {
                "label": "Fator acromático",
                "description": "Fator de redução do componente cinza de 0 a 1 (padrão 0.5)."
              },
              "clip_percent": {
                "label": "Percentual de corte",
                "description": "Percentual de corte das caudas para o reescalonamento linear pós-estiramento (padrão 1.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "false_colour_composite": {
            "name": "Composição em falsa cor",
            "description": "Gera um raster de composição em falsa cor (NIR/vermelho/verde) a partir de um pacote de sensor óptico compatível.",
            "params": {
              "wbe": {
                "label": "WBE",
                "description": "WBE"
              },
              "output": {
                "label": "Saída",
                "description": "Saída"
              }
            }
          },
          "gamma_correction": {
            "name": "Correção gama",
            "description": "A correção gama aplica um ajuste não linear de brilho por meio de uma transformação de lei de potência para otimizar o contraste da imagem, a fidelidade de exibição e a distribuição perceptual da luminância. A transformação matemática é I_corrected = I^(1/γ), em que γ (gama) é um expoente especificado pelo usuário que controla a direção e a magnitude do ajuste de brilho. Valores γ > 1 escurecem as imagens (compensação de telas claras), enquanto γ < 1 clareiam as imagens (compensação de telas escuras). A implementação opera independentemente em cada pixel ou banda espectral, preservando as relações espaciais enquanto ajusta a escala de intensidade. Os principais recursos incluem preservação da estrutura da imagem com redistribuição dos valores tonais, eficiência computacional que exige apenas tabelas de consulta, aplicabilidade a quaisquer dados radiométricos, incluindo imagens de 16/32 bits, e reversibilidade que permite a correção inversa. A correção gama tem aplicação essencial na preparação de imagens de satélite para interpretação visual, compensando as características do sensor, na normalização do brilho de ortofotos entre faixas de voo ou tipos de sensores, no realce de imagens termais para a visibilidade de feições e no pré-processamento de dados multiespectrais para pipelines de aprendizado de máquina, em que a normalização da entrada melhora a convergência. A interpretação da saída mostra que os valores corrigidos seguem uma escala de lei de potência: os tons médios sofrem o maior ajuste relativo, enquanto os extremos são menos comprimidos. Para entradas de 8 bits (0-255), um gama típico de 0.4-0.6 clareia significativamente as imagens; um gama de 1.4-1.6 escurece substancialmente. As formas dos histogramas se transformam de maneira previsível: histogramas com assimetria à esquerda (imagens escuras) se beneficiam de γ < 1, enquanto histogramas com assimetria à direita (imagens claras) se beneficiam de γ > 1. Verifique a saída corrigida por meio da visualização do histograma e da inspeção visual. Aplique de forma consistente em coleções de imagens que exigem pré-processamento uniforme. Um fluxo de trabalho comum encadeia a correção gama antes da seleção do limiar ou da classificação para garantir uma visibilidade equilibrada das feições.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Expoente gama em [0, 4], padrão 0.5."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "gaussian_contrast_stretch": {
            "name": "Realce de contraste gaussiano",
            "description": "Estira o contraste ajustando-o a uma distribuição de referência gaussiana.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "num_tones": {
                "label": "Número de tons",
                "description": "Número de tons de saída (padrão 256)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "histogram_equalization": {
            "name": "Equalização de histograma",
            "description": "Aplica a equalização de histograma para melhorar o contraste da imagem.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "num_tones": {
                "label": "Número de tons",
                "description": "Número de tons de saída (padrão 256)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "histogram_matching": {
            "name": "Casamento de histograma",
            "description": "Ajusta o histograma de uma imagem a um histograma de referência fornecido.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "histogram": {
                "label": "Histograma",
                "description": "Histograma de referência como [[valor, frequência], ...] ou [{x, y}, ...]."
              },
              "is_cumulative": {
                "label": "É cumulativo",
                "description": "Verdadeiro se os valores do histograma fornecido já forem cumulativos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "histogram_matching_two_images": {
            "name": "Casamento de histograma entre duas imagens",
            "description": "Ajusta o histograma de uma imagem de entrada ao histograma de uma imagem de referência.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "reference": {
                "label": "Referência",
                "description": "Caminho do raster de referência ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "ihs_to_rgb": {
            "name": "IHS para RGB",
            "description": "A transformação inversa IHS para RGB converte os componentes de intensidade-matiz-saturação de volta para o espaço de cores vermelho-verde-azul, permitindo recuperar a cor natural a partir de dados de sensoriamento remoto decompostos. As fórmulas inversas operam em coordenadas polares cilíndricas, convertendo o ângulo de matiz e a magnitude da saturação, juntamente com a intensidade, de volta para coordenadas RGB cartesianas, mantendo a estabilidade numérica e minimizando artefatos de quantização. Essa transformação é o complemento fundamental das operações RGB para IHS, especialmente em fluxos de trabalho de pan-sharpening em que a intensidade foi substituída por dados pancromáticos de alta resolução. Os principais recursos incluem inversão matemática exata da transformação direta, garantindo consistência em operações de ida e volta, tratamento automático de pixels acromáticos com matiz indefinido, evitando a propagação de artefatos numéricos, estabilidade numérica em valores extremos de saturação próximos de zero e eficiência computacional que permite uma integração perfeita a pipelines de processamento rápido. A transformação inversa completa os fluxos de trabalho de pan-sharpening recuperando imagens em cor natural após a substituição da intensidade por dados pancromáticos, permitindo a visualização em cores de dados com resolução aprimorada, suportando a reconstrução espectral a partir de componentes decompostos e validando a consistência da transformação em fluxos de trabalho de controle de qualidade. A saída IHS para RGB produz imagens em cor natural de três bandas com a resolução espacial herdada da banda de intensidade de entrada, adequadas para visualização direta e análises posteriores. As bandas de saída representam os canais vermelho, verde e azul na ordem padrão; as cores apresentam detalhes espaciais aprimorados se a intensidade tiver sido substituída por dados pancromáticos de maior resolução, preservando as características espectrais dos componentes originais de matiz e saturação.",
            "params": {
              "intensity": {
                "label": "Intensidade",
                "description": "Raster da banda de intensidade (0–1)."
              },
              "hue": {
                "label": "Matiz",
                "description": "Raster da banda de matiz (0–2π radianos)."
              },
              "saturation": {
                "label": "Saturação",
                "description": "Raster da banda de saturação (0–1)."
              },
              "red_output": {
                "label": "Saída vermelha",
                "description": "Caminho opcional de saída para a banda do vermelho."
              },
              "green_output": {
                "label": "Saída verde",
                "description": "Caminho opcional de saída para a banda do verde."
              },
              "blue_output": {
                "label": "Saída azul",
                "description": "Caminho opcional de saída para a banda do azul."
              }
            }
          },
          "min_max_contrast_stretch": {
            "name": "Realce de contraste mín-máx",
            "description": "Estira linearmente os valores entre o mínimo e o máximo especificados pelo usuário.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "min_val": {
                "label": "Valor mínimo",
                "description": "Valor mínimo de entrada para o escalonamento."
              },
              "max_val": {
                "label": "Valor máximo",
                "description": "Valor máximo de entrada para o escalonamento."
              },
              "num_tones": {
                "label": "Número de tons",
                "description": "Número de tons de saída (padrão 256)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "mosaic": {
            "name": "Mosaico",
            "description": "A criação de mosaicos combina múltiplos rasters sobrepostos em uma saída contínua por meio de registro geométrico, reamostragem para uma projeção e grade de pixels comuns e mesclagem das bordas para minimizar descontinuidades. O algoritmo registra os rasters usando coordenadas geográficas ou pontos de controle, reamostra para a resolução e a extensão de destino e aplica uma mesclagem ponderada (mesclagem Feather ou ponderação exponencial) nas regiões de sobreposição. Os pixels sobrepostos são mesclados usando uma média ponderada pela distância às bordas dos rasters, criando transições suaves e preservando a precisão dos pixels internos. Isso produz mosaicos raster contínuos em escala continental ou global, eliminando artefatos de borda e descontinuidades radiométricas. Os principais recursos incluem alinhamento geométrico de múltiplos rasters a uma projeção comum, seleção do método de reamostragem (bilinear, cúbica, vizinho mais próximo), mesclagem das bordas eliminando emendas, normalização radiométrica que compensa diferenças de sensor ou de iluminação e suporte a milhares de rasters de entrada. A ferramenta gerencia automaticamente a prioridade dos rasters, evitando lacunas por meio de estratégias inteligentes de preenchimento. As aplicações incluem produção de mosaicos continentais de imagens de satélite a partir de coleções de cenas, geração de modelos digitais de elevação contínuos a partir de múltiplas faixas de voo, criação de mosaicos ópticos compostos a partir de imagens multitemporais, construção de ortomosaicos a partir de levantamentos com veículos aéreos não tripulados (VANT) e produção de mapas base para grandes áreas a partir de cenas de satélite sobrepostas. A criação de mosaicos é essencial para fluxos de trabalho de análise continental e global. Interpretação da saída: os rasters de saída herdam a projeção e a resolução da entrada; as regiões de mesclagem mostram valores interpolados que equilibram os rasters de entrada. Artefatos de borda indicam sobreposição insuficiente ou normalização radiométrica deficiente; a avaliação examina as emendas e a consistência das cores ao longo dos limites do mosaico. O tratamento de NoData nas bordas do mosaico exige atenção aos valores de preenchimento e à definição da extensão. A avaliação da qualidade inclui verificação geométrica por meio de pontos de controle e avaliação radiométrica comparando os valores do mosaico com os rasters de entrada.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Lista de rasters de entrada como uma matriz de caminhos ou uma cadeia delimitada por vírgula/ponto e vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "method": {
                "label": "Método",
                "description": "Método de reamostragem: 'nn' (padrão), 'bilinear' ou 'cc'."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "mosaic_with_feathering": {
            "name": "Mosaico com suavização de bordas",
            "description": "Cria um mosaico de dois rasters e mescla com suavização as células sobrepostas usando pesos baseados na distância às bordas.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada."
              },
              "method": {
                "label": "Método",
                "description": "Método de reamostragem: 'cc' (padrão), 'nn' ou 'bilinear'."
              },
              "weight": {
                "label": "Peso",
                "description": "Expoente de ponderação por distância usado na suavização das sobreposições (padrão 4.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "normalized_difference_index": {
            "name": "Índice de diferença normalizada",
            "description": "Calcula (band1 - band2) / (band1 + band2) a partir de um raster multibanda.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "band1": {
                "label": "Banda 1",
                "description": "Índice (base 1) da primeira banda (padrão 1)."
              },
              "band2": {
                "label": "Banda 2",
                "description": "Índice (base 1) da segunda banda (padrão 2)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "panchromatic_sharpening": {
            "name": "Fusão pancromática",
            "description": "O pan-sharpening funde imagens pancromáticas de alta resolução com dados multiespectrais de menor resolução usando o método Brovey, uma técnica de multiplicação espectral que realça os detalhes espaciais preservando as informações espectrais. O método funciona primeiro reamostrando as bandas multiespectrais para corresponder à resolução pancromática e, em seguida, calculando a razão de intensidade entre a imagem pancromática e a intensidade multiespectral calculada para escalonar cada banda de acordo. Essa abordagem mantém a fidelidade espectral enquanto melhora drasticamente a resolução espacial. Os principais recursos incluem preservação das características espectrais originais, eficiência algébrica linear que permite o processamento rápido de imagens grandes, compatibilidade automática de reamostragem com entradas registradas por banda e normalização automática para consistência radiométrica entre sensores heterogêneos. A técnica é amplamente usada no realce de imagens de satélite para aplicações de mapeamento, incluindo planejamento urbano, monitoramento agrícola e exploração de recursos, em que tanto o detalhe espectral quanto o espacial são fundamentais. O pan-sharpening cria uma saída multiespectral realçada com definição espacial superior, adequada para interpretação visual e mapeamento detalhado. As bandas de saída mantêm a ordem original das bandas multiespectrais, mas com resolução de nível pancromático, permitindo uma integração perfeita a fluxos de trabalho padrão de análise de imagens e sistemas SIG. O aumento da resolução espacial corresponde à resolução pancromática de entrada, permitindo a extração de feições em escalas mais finas do que os dados multiespectrais originais.",
            "params": {
              "red": {
                "label": "Vermelho",
                "description": "Raster da banda do vermelho (obrigatório a menos que 'composite' seja fornecido)."
              },
              "green": {
                "label": "Verde",
                "description": "Raster da banda do verde (obrigatório a menos que 'composite' seja fornecido)."
              },
              "blue": {
                "label": "Azul",
                "description": "Raster da banda do azul (obrigatório a menos que 'composite' seja fornecido)."
              },
              "composite": {
                "label": "Composição",
                "description": "Composição multiespectral RGB empacotada (mutuamente exclusiva com red/green/blue)."
              },
              "pan": {
                "label": "Pancromática",
                "description": "Banda raster pancromática."
              },
              "method": {
                "label": "Método",
                "description": "Método de fusão: 'brovey' (padrão) ou 'ihs'."
              },
              "output_mode": {
                "label": "Modo de saída",
                "description": "Codificação de saída: 'packed' (padrão) ou 'bands' (raster RGB de 3 bandas)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "percentage_contrast_stretch": {
            "name": "Realce de contraste por porcentagem",
            "description": "O estiramento de contraste percentual realiza um realce linear do contraste removendo porcentagens especificadas de valores extremos (caudas) do histograma antes de estirar para toda a faixa dinâmica. Algoritmo: remove os valores dos percentis inferior e superior de cada banda independentemente, mapeia linearmente a faixa restante para a faixa de saída (tipicamente 0-255 ou a profundidade de bits completa) e elimina os extremos radiométricos que causam contraste deficiente. A seleção do percentil (comumente 2-3%) equilibra o realce do contraste com a preservação da integridade dos dados. Principais recursos: remove automaticamente os valores atípicos radiométricos, evita a compressão do contraste por valores anômalos, aplicável por banda ou globalmente, transformação linear computacionalmente eficiente, operação inversível. Capacidades: trata artefatos radiométricos, realça a visibilidade de feições sutis, acomoda faixas de entrada variáveis. Casos de uso: pré-processamento antes da classificação ou fusão, realce de uma faixa dinâmica subutilizada, preparação para exibição multiespectral, normalização radiométrica entre cenas. Aplicações: realce de imagens de satélite para interpretação visual, pré-processamento para detecção de deslizamentos de terra baseada em satélite, normalização pré-classificação, recuperação de imagens arquivadas. Interpretação da saída: as imagens realçadas exibem contraste melhorado; os valores extremos são cortados; feições sutis antes ocultas tornam-se visíveis; os valores de corte específicos por banda revelam a qualidade da distribuição radiométrica.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "clip": {
                "label": "Recortar",
                "description": "Percentual de corte por percentil (padrão 1.0)."
              },
              "tail": {
                "label": "Cauda",
                "description": "Modo de corte das caudas: both (padrão), upper ou lower."
              },
              "num_tones": {
                "label": "Número de tons",
                "description": "Número de tons de saída (padrão 256)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "piecewise_contrast_stretch": {
            "name": "Realce de contraste por partes",
            "description": "Realiza um estiramento de contraste linear por partes usando pontos de quebra especificados pelo usuário.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "function": {
                "label": "Função",
                "description": "Cadeia de instrução de pontos de quebra, por exemplo '(50,0.1);(120,0.6);(180,0.85)'."
              },
              "greytones": {
                "label": "Tons de cinza",
                "description": "Número de tons de saída para rasters não RGB (padrão 1024)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "resample": {
            "name": "Reamostrar",
            "description": "A reamostragem de imagens altera a resolução dos pixels usando métodos de interpolação que incluem as técnicas de vizinho mais próximo (a mais rápida, com menor suavização), bilinear (interpolação linear entre pixels adjacentes), bicúbica (ajuste de polinômio cúbico) e spline cúbica (interpolação contínua e suave). A reamostragem é essencial para o registro geométrico, para criar pilhas multiespectrais de resolução uniforme a partir de sensores com resoluções mistas e para integrar dados auxiliares em diferentes escalas. Cada método envolve o ajuste de kernels de interpolação locais aos valores originais dos pixels, a avaliação dos kernels nas novas posições dos pixels e o retorno dos valores interpolados. O vizinho mais próximo preserva os valores radiométricos (adequado para dados categóricos); os métodos de ordem superior suavizam as bordas e reduzem o aliasing, mas desfocam fronteiras nítidas. Os principais recursos incluem métodos de interpolação selecionáveis que otimizam o compromisso entre velocidade e precisão, especificação da resolução de saída por tamanho de pixel ou dimensões de destino, tratamento automático do valor de fundo para áreas fora da extensão de entrada e filtragem antialiasing opcional que reduz os artefatos de reamostragem. As aplicações incluem registro de imagens alinhando os dados a grades comuns, harmonização da resolução unificando pilhas multiespectrais com resoluções nativas diferentes, subamostragem reduzindo o volume de dados preservando os padrões espaciais e sobreamostragem melhorando o detalhe visual para visualização. A saída da reamostragem integra as imagens em uma resolução consistente. A resolução de saída corresponde à especificação do usuário; o método de interpolação afeta a definição das bordas (o vizinho mais próximo preserva as bordas; os métodos de ordem superior suavizam); as áreas de fundo (fora da extensão de entrada) recebem valores de preenchimento configuráveis; a saída se integra perfeitamente aos fluxos de trabalho de análise multiespectral.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Lista de rasters de entrada como uma matriz de caminhos ou uma cadeia delimitada por vírgula/ponto e vírgula."
              },
              "base": {
                "label": "Base",
                "description": "Raster base opcional que define a extensão e a grade de saída. Tem precedência sobre cell_size."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho de célula de saída opcional quando base não é fornecido."
              },
              "method": {
                "label": "Método",
                "description": "Método de reamostragem: 'cc' (padrão), 'nn' ou 'bilinear'."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "rgb_to_ihs": {
            "name": "RGB para IHS",
            "description": "A transformação de RGB para intensidade-matiz-saturação decompõe o espaço de cores vermelho-verde-azul em componentes perceptualmente relevantes: intensidade (brilho), matiz (cor) e saturação (pureza da cor). A decomposição usa fórmulas matemáticas padrão que convertem os valores tricromáticos RGB em coordenadas polares cilíndricas, nas quais a intensidade representa a luminância, o matiz codifica o ângulo da cor e a saturação mede a concentração da cor. Esse espaço de cores é particularmente útil para o sensoriamento remoto, porque a intensidade pode ser substituída por dados de alta resolução preservando as características de cor originais por meio da transformação inversa. Os principais recursos incluem uma formulação numericamente estável que trata casos extremos (pixels acromáticos) de forma robusta, retenção de toda a faixa dinâmica sem corte nem perda de informação, escalonamento automático das bandas para resultados consistentes entre diferentes faixas de entrada e eficiência computacional adequada para grandes pilhas multiespectrais. A técnica atende a múltiplas aplicações: fluxos de trabalho de pan-sharpening em que a intensidade é substituída por dados pancromáticos, realce da visualização em cores, pré-processamento espectral para algoritmos de classificação e conversões de cor para tons de cinza que retêm a informação perceptual. A transformação RGB para IHS é essencial para técnicas de fusão que combinam a resolução pancromática com a informação de cor multiespectral. A saída compreende três arquivos de banda única que representam os componentes de intensidade, matiz e saturação, utilizáveis independentemente em fluxos de trabalho de análise. A banda de intensidade aproxima a luminância; o matiz varia de 0-360 graus, codificando a informação de cor; a saturação varia de 0-100 por cento, indicando a pureza da cor.",
            "params": {
              "red": {
                "label": "Vermelho",
                "description": "Raster da banda do vermelho (mutuamente exclusivo com 'composite')."
              },
              "green": {
                "label": "Verde",
                "description": "Raster da banda do verde (mutuamente exclusivo com 'composite')."
              },
              "blue": {
                "label": "Azul",
                "description": "Raster da banda do azul (mutuamente exclusivo com 'composite')."
              },
              "composite": {
                "label": "Composição",
                "description": "Raster de composição RGB empacotada (mutuamente exclusivo com red/green/blue)."
              },
              "intensity_output": {
                "label": "Saída de intensidade",
                "description": "Caminho opcional de saída para a banda de intensidade."
              },
              "hue_output": {
                "label": "Saída de matiz",
                "description": "Caminho opcional de saída para a banda de matiz."
              },
              "saturation_output": {
                "label": "Saída de saturação",
                "description": "Caminho opcional de saída para a banda de saturação."
              }
            }
          },
          "sigmoidal_contrast_stretch": {
            "name": "Realce de contraste sigmoidal",
            "description": "Realiza um estiramento de contraste sigmoidal usando ganho e ponto de corte.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "cutoff": {
                "label": "Corte",
                "description": "Ponto médio da sigmoide em unidades normalizadas (padrão 0.0)."
              },
              "gain": {
                "label": "Ganho",
                "description": "Parâmetro de ganho da sigmoide (padrão 1.0)."
              },
              "num_tones": {
                "label": "Número de tons",
                "description": "Número de tons de saída (padrão 256)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "split_colour_composite": {
            "name": "Separar composição colorida",
            "description": "Divide um raster de composição colorida RGB compactada em três rasters separados de banda única que representam os canais vermelho, verde e azul. Algoritmo: esta ferramenta extrai as bandas de cor individuais de uma imagem composta em que os valores R, G e B estão compactados em um único raster (geralmente usando a codificação padrão RGB de 24 bits ou RGBA de 32 bits). A separação é realizada por operações bit a bit para isolar cada componente de canal de 8 bits. Principais recursos: preserva os valores radiométricos originais (0–255), trata composições RGB padrão e formatos estendidos, gera três rasters georreferenciados independentes. Casos de uso: análise espectral em que as bandas individuais devem ser processadas separadamente; criação de conjuntos de dados de entrada para o cálculo de índices de vegetação (NDVI, EVI); preparação de dados para operações de álgebra de bandas; viabilização de transformações de cor avançadas, como a conversão RGB para IHS; extração de bandas específicas para fluxos de trabalho de classificação supervisionada ou não supervisionada. Aplicações: análise de imagens de sensoriamento remoto, pré-processamento de dados de satélite, preparação para análise multiespectral, pipelines de realce de imagens. Interpretação da saída: são produzidos três rasters de banda única com extensão espacial, projeção e georreferenciamento idênticos aos da composição de entrada. Cada banda de saída contém valores radiométricos de 8 bits (0–255) que representam a intensidade daquele componente de cor na cena. As estatísticas da banda (mín, máx, média) refletem as características espectrais daquele canal de cor; os valores dominantes indicam a dominância da cor na imagem. Os rasters de saída são imediatamente adequados para cálculos de bandas, índices espectrais ou fluxos de trabalho adicionais de processamento multibanda.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster RGB empacotado de entrada."
              },
              "red_output": {
                "label": "Saída vermelha",
                "description": "Caminho opcional de saída para a banda do vermelho."
              },
              "green_output": {
                "label": "Saída verde",
                "description": "Caminho opcional de saída para a banda do verde."
              },
              "blue_output": {
                "label": "Saída azul",
                "description": "Caminho opcional de saída para a banda do azul."
              }
            }
          },
          "standard_deviation_contrast_stretch": {
            "name": "Realce de contraste por desvio padrão",
            "description": "Realiza um estiramento de contraste linear usando a média mais/menos um multiplicador do desvio padrão.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "clip": {
                "label": "Recortar",
                "description": "Multiplicador do desvio padrão usado para derivar os limites de corte (padrão 2.0)."
              },
              "num_tones": {
                "label": "Número de tons",
                "description": "Número de tons de saída (padrão 256)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "true_colour_composite": {
            "name": "Composição em cor verdadeira",
            "description": "Gera um raster de composição em cor verdadeira (RGB) a partir de um pacote de sensor óptico compatível.",
            "params": {
              "wbe": {
                "label": "WBE",
                "description": "WBE"
              },
              "output": {
                "label": "Saída",
                "description": "Saída"
              }
            }
          },
          "adaptive_filter": {
            "name": "Filtro adaptativo",
            "description": "O filtro adaptativo ajusta dinamicamente a intensidade da filtragem com base em estatísticas locais da imagem (média, variância, curtose), permitindo uma suavização sensível ao contexto que responde às características da cena. A implementação particiona as imagens em janelas móveis, calcula estatísticas locais (detectando regiões dominadas por ruído versus regiões dominadas por feições) e seleciona os parâmetros do filtro de acordo. Regiões planas são suavizadas agressivamente; regiões complexas são filtradas suavemente. A base matemática usa testes estatísticos para identificar o caráter local: regiões com variância abaixo do limiar são fortemente suavizadas; regiões acima do limiar preservam os detalhes. Os principais recursos incluem adaptação automática dos parâmetros (o usuário especifica os intervalos; o algoritmo seleciona localmente), aplicabilidade a qualquer kernel de filtro (gaussiano, mediana, morfológico) e eficácia em imagens ópticas e de radar. A filtragem adaptativa se destaca no pré-processamento de mosaicos de satélite heterogêneos (diferentes sensores, condições de aquisição), na suavização de nuvens de pontos LiDAR (preserva as bordas da vegetação em florestas; suaviza o solo em áreas abertas), na redução seletiva do speckle SAR respeitando tanto os alvos quanto o fundo e no empilhamento de imagens multitemporais. A interpretação da saída revela que as regiões homogêneas passam por uma filtragem intensiva (baixa variância local → forte suavização); as regiões complexas são filtradas de forma conservadora (alta variância → processamento mínimo). O raio de suavização se ajusta dinamicamente por região: áreas planas recebem filtragem com raio grande; áreas texturizadas recebem filtragem com raio pequeno ou nenhuma filtragem. As faixas de saída permanecem dentro das da entrada; examine o mapa espacial da intensidade de filtragem para validar a adaptação. As estatísticas se deslocam em direção às médias locais nas regiões suaves; as regiões complexas permanecem praticamente inalteradas. Artefatos comuns incluem possível suavização excessiva nos limites das regiões (normalmente aplica-se uma transição suave) e sensibilidade às relações entre ruído e variância. Verifique a adaptação analisando os mapas de variância local. Aplique em pipelines de pré-processamento automatizado que tratam dados de múltiplas fontes, quando uma filtragem uniforme é insuficiente.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da vizinhança em pixels (inteiro ímpar, padrão 11)."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da vizinhança em pixels (inteiro ímpar, padrão 11)."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Limiar absoluto de escore z para a substituição pela média (padrão 2.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "anisotropic_diffusion_filter": {
            "name": "Filtro de difusão anisotrópica",
            "description": "A filtragem por difusão anisotrópica implementa uma suavização iterativa que preserva as bordas por meio de processos de difusão direcional que distinguem entre bordas e regiões planas. O algoritmo atualiza iterativamente cada pixel com base em diferenças ponderadas com os vizinhos, usando uma função de condutância que reduz a difusão através de fronteiras de alto gradiente, permitindo ao mesmo tempo a suavização dentro de regiões homogêneas. A implementação resolve a equação diferencial parcial ∂I/∂t = div(c(|∇I|)∇I), em que a condutância c(·) se adapta à magnitude do gradiente local. Essa abordagem orientada pelos dados preserva transições nítidas enquanto reduz progressivamente o ruído em áreas uniformes. Os principais recursos incluem preservação real das bordas sem máscaras de borda explícitas, seleção automática da escala por meio do número de iterações, redução eficaz do ruído mantendo a nitidez das feições e aplicabilidade a dados de banda única e multiespectrais. A difusão anisotrópica se destaca na suavização de nuvens de pontos LiDAR preservando as quebras do terreno, na remoção de ruído de imagens de satélite para a detecção de feições geológicas sutis, na redução do speckle SAR mantendo as bordas dos alvos de radar e em imagens médicas/científicas em que a fidelidade das bordas é fundamental. A interpretação da saída requer compreender que as regiões suaves se homogeneízam progressivamente (os valores convergem para a média local), enquanto as bordas se acentuam até se estabilizarem. As primeiras iterações (t<5) produzem uma leve redução de ruído; as iterações intermediárias (t=5-20) proporcionam uma suavização substancial; iterações excessivas (t>50) arriscam um realce excessivo das fronteiras ou feições falsas. Os valores de saída permanecem nas faixas dos dados de origem; as estatísticas se deslocam em direção às médias regionais à medida que o processamento avança. Monitore a variância da saída para avaliar a completude da suavização. As métricas comuns incluem a melhoria da relação sinal-ruído e índices de nitidez das bordas. Aplique com cuidado em fluxos de trabalho multiescala em que a precisão da preservação das bordas afeta diretamente a acurácia da classificação ou da detecção de mudanças posteriores.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "iterations": {
                "label": "Iterações",
                "description": "Número de iterações de difusão (padrão 10)."
              },
              "kappa": {
                "label": "Kappa",
                "description": "Parâmetro de sensibilidade a bordas (padrão 20.0)."
              },
              "lambda": {
                "label": "Lambda",
                "description": "Passo de tempo em (0, 0.25], padrão 0.2."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "bilateral_filter": {
            "name": "Filtro bilateral",
            "description": "Suavização bilateral que preserva as bordas por meio de kernels espacial + de intensidade. Superior ao gaussiano na preservação de detalhes. Sigma_dist=raio, sigma_int=limiar de preservação das bordas. Compatível com RGB.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "sigma_dist": {
                "label": "Sigma de distância",
                "description": "Desvio padrão do kernel gaussiano espacial em pixels (0.5–20.0, padrão 0.75)."
              },
              "sigma_int": {
                "label": "Sigma de intensidade",
                "description": "Desvio padrão do kernel gaussiano de intensidade em unidades de valor do raster (padrão 1.0)."
              },
              "treat_as_rgb": {
                "label": "Tratar como RGB",
                "description": "Defina como verdadeiro para forçar o processamento HSI de RGB empacotado. Quando falso, o RGB empacotado ainda pode ser detectado automaticamente a partir dos metadados do raster."
              },
              "assume_three_band_rgb": {
                "label": "Assumir RGB de três bandas",
                "description": "Quando verdadeiro (padrão), rasters uint8/uint16 de 3 bandas podem ser tratados como RGB em filtros que suportam o processamento de intensidade RGB de 3 bandas."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "closing": {
            "name": "Fechamento",
            "description": "Realiza uma operação morfológica de fechamento usando um elemento estruturante retangular.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura ímpar da vizinhança (padrão 11)."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura ímpar da vizinhança (padrão igual a filter_size_x)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "conservative_smoothing_filter": {
            "name": "Filtro de suavização conservadora",
            "description": "A suavização conservadora implementa uma filtragem não linear substituindo cada pixel pela média dos vizinhos semelhantes (dentro de uma faixa de intensidade definida), preservando as bordas enquanto reduz o ruído. A implementação examina as vizinhanças, identifica os pixels dentro do limiar de intensidade em relação ao pixel central e calcula a média desses pixels de valor semelhante. Formulação matemática: F = (1/N) Σ(I_j : |I_j - I_center| < T), em que T é o limiar de similaridade e N é o número de pixels semelhantes. Os principais recursos incluem uma definição simples de similaridade baseada em limiar, eficácia em imagens ópticas e de radar, interpretabilidade dos parâmetros (o limiar controla a nitidez das bordas) e sobrecarga computacional mínima. A suavização conservadora se destaca no pré-processamento de imagens de satélite multiespectrais (reduz o ruído preservando os limites espectrais), no realce de imagens termais (suaviza o ruído radiométrico mantendo as descontinuidades de temperatura), na suavização de classificações LiDAR (preserva os limites entre vegetação e solo) e no pré-processamento de dados de levantamento ruidosos. A interpretação da saída mostra que as regiões homogêneas são completamente promediadas (todos os vizinhos são semelhantes); as bordas são minimamente filtradas (pixels semelhantes apenas do mesmo lado). O parâmetro de limiar controla a preservação das bordas: um limiar pequeno (similaridade estrita) produz uma suavização leve; um limiar grande (similaridade flexível) produz uma suavização agressiva, podendo perder bordas. Os valores de saída correspondem exatamente aos valores dos vizinhos de entrada (sem interpolação; a saída é a média de valores existentes). As estatísticas se deslocam em direção aos agrupamentos locais; as regiões heterogêneas mostram mudanças mínimas. Verifique a eficácia do limiar por inspeção visual e análise do histograma local. Artefatos comuns incluem suavização insuficiente se os limiares forem muito estritos e desfoque das bordas se forem muito flexíveis. O número de iterações permite uma filtragem progressiva: uma única passagem proporciona uma suavização suave; múltiplas passagens intensificam o efeito. Aplique antes da classificação quando for necessário reduzir a confusão de categorias causada pelo ruído mantendo nítidos os limites das classes.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da vizinhança em pixels (inteiro ímpar, padrão 3)."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da vizinhança em pixels (inteiro ímpar, padrão 3)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "diff_of_gaussians_filter": {
            "name": "Filtro de diferença de gaussianas",
            "description": "A filtragem por diferença de gaussianas (DoG) detecta bordas e feições finas por meio da subtração de duas versões desfocadas por gaussianas com raios diferentes, criando um filtro passa-banda que enfatiza as frequências espaciais intermediárias. A implementação calcula dois desfoques gaussianos (raio pequeno σ₁ e raio grande σ₂) e depois os subtrai: DoG = G(σ₁) - G(σ₂). Essa combinação não linear realça bordas e cristas enquanto suprime tanto o ruído fino quanto as tendências amplas de iluminação. Os principais recursos incluem resposta em frequência ajustável (a razão σ₂/σ₁ controla as características do passa-banda), saída centrada em zero (bipolar: valores positivos e negativos), aplicabilidade à detecção de bordas e à extração de feições e eficiência computacional pela reutilização dos gaussianos. A diferença de gaussianas se destaca na detecção de estruturas geológicas (falhas e lineamentos aparecem como alta resposta DoG), na extração de edificações a partir de ortofotos, no realce de texturas finas em mosaicos de sensoriamento remoto e em modelos de processamento inspirados na neurociência. A interpretação da saída mostra que as bordas produzem respostas de pico (positivas no lado claro, negativas no lado escuro), com cruzamento por zero exatamente nas transições. A detecção de cruzamentos por zero revela as bordas verdadeiras independentemente da direção. A magnitude do DoG indica a intensidade da borda; a faixa típica vai de -1000 a +1000 para entradas de 8 bits, dependendo do contraste local. A razão σ₂/σ₁ determina o centro do passa-banda: razão~2 enfatiza feições muito finas; razão~5 enfatiza feições intermediárias; razão~10 enfatiza feições mais grosseiras. Distribuições de saída bimodais (picos nos extremos positivo e negativo) indicam boa separação das bordas. Artefatos comuns incluem halos em torno de bordas fortes e possível resposta insuficiente se a banda de frequência não corresponder à escala das feições. Combine com limiarização da magnitude para a extração de bordas. Aplique antes do pós-processamento morfológico para uma extração robusta de feições a partir de imagens de satélite ruidosas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Sigma gaussiano menor (0.25-20.0, padrão 2.0)."
              },
              "sigma2": {
                "label": "Sigma 2",
                "description": "Sigma gaussiano maior (0.5-20.0, padrão 4.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "diversity_filter": {
            "name": "Filtro de diversidade",
            "description": "Calcula a diversidade em janela móvel como o número de valores/classes únicos dentro da vizinhança. Mede a heterogeneidade local: alta diversidade = terreno/classes variados, baixa diversidade = homogêneo. Revela textura, fragmentação e diversidade de padrões. Frequentemente aplicado a imagens classificadas ou categóricas para identificar zonas de transição/borda.\n\nO filtro de diversidade cria uma métrica de variação local independente dos valores específicos. Útil para ecologia da paisagem (diversidade de habitats, métricas de fragmentação), avaliação da qualidade da classificação (alta diversidade = áreas mistas/incertas) e análise de textura. Aplicado a dados de elevação, a diversidade indica a rugosidade na escala da vizinhança. Aplicado a classificações, identifica zonas mistas/de ecótono/de limite.\n\nAplicações: (1) mapeamento da fragmentação da paisagem (alta diversidade = mosaico diverso, baixa diversidade = manchas uniformes), (2) avaliação da confiança/incerteza da classificação (alta diversidade = área incerta), (3) análise de textura (mapeamento da heterogeneidade), (4) detecção de bordas/limites por picos de diversidade, (5) diversidade de habitats para análise ecológica (a adequação depende da diversidade local).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da janela em pixels (inteiro ímpar, padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da janela em pixels (inteiro ímpar, padrão = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "edge_preserving_mean_filter": {
            "name": "Filtro de média com preservação de bordas",
            "description": "O filtro de média com preservação de bordas realiza uma promediação seletiva dos pixels calculando médias locais e excluindo os pixels atípicos que provavelmente representam bordas ou ruído. A implementação ordena as vizinhanças de pixels, remove os valores extremos (o mais baixo e o mais alto, ou valores que excedem um limiar estatístico) e calcula a média dos valores restantes. Essa abordagem robusta equilibra a suavização com a preservação da nitidez. As variantes incluem média ponderada que enfatiza os pixels centrais e seleção adaptativa do limiar com base em estatísticas locais. Os principais recursos incluem controle simples dos parâmetros (número de exclusões ou limiar), eficiência computacional pela ordenação de pequenas vizinhanças, redução eficaz do ruído sem desfocar os detalhes e aplicabilidade a dados ópticos, de radar e termais. A filtragem de média com preservação de bordas se destaca no pré-processamento de imagens de satélite ópticas para o cálculo de índices de vegetação (remove sombras e nuvens sem desfocar as feições), na suavização de DEMs preservando as quebras de declividade, na remoção de ruído de imagens termais mantendo a nitidez dos limites e na preparação de ortofotos para digitalização manual. A interpretação da saída revela que os valores atípicos removidos se concentram nas bordas e nas regiões de ruído; os valores restantes são promediados, criando uma suavização local. Os parâmetros de exclusão controlam a nitidez das bordas: excluir um único extremo remove o ruído sal e pimenta; excluir múltiplos extremos produz resultados mais suaves com transições de borda mais graduais. As faixas de saída permanecem dentro das da entrada; as estatísticas se deslocam em direção às médias dos valores não atípicos. Monitore a diferença entre a saída e a entrada para identificar as regiões filtradas (normalmente áreas de alta variância). A qualidade da preservação das bordas depende da precisão da identificação dos valores atípicos; verifique visualmente se as feições permanecem nítidas. Artefatos comuns incluem suavização inadequada se os limiares forem muito estritos e filtragem excessiva se o número de exclusões for muito alto. O número de iterações permite uma filtragem progressiva; uma única passagem proporciona uma suavização suave. Aplique antes da classificação baseada em limiares para reduzir a classificação incorreta de categorias causada pelo ruído, mantendo os limites das feições.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size": {
                "label": "Tamanho do filtro",
                "description": "Tamanho da vizinhança quadrada em pixels (inteiro ímpar, padrão 11)."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Diferença absoluta máxima do vizinho para inclusão na média local (padrão 15.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "emboss_filter": {
            "name": "Filtro de relevo",
            "description": "O filtro de relevo (emboss) realça as feições de borda por meio de sombreamento direcional, criando uma aparência distintiva de relevo tridimensional na qual as bordas aparecem como superfícies elevadas ou rebaixadas, dependendo da simulação de iluminação direcional. Esse filtro aplica um kernel 3×3 que combina a detecção de bordas com iluminação unidirecional, normalmente simulando luz do quadrante superior esquerdo, criando um contraste visual marcante nos limites e preservando as regiões suaves. A transformação emboss subtrai valores ponderados dos vizinhos em direções específicas, produzindo uma saída em que realces e sombras acentuam as descontinuidades topográficas e das feições. Os principais recursos incluem controle direcional intuitivo que permite ajustar a direção da luz simulada (variantes em oito direções), incorporação natural da percepção 3D que melhora a interpretação visual e desempenho robusto em diversas condições de iluminação nas imagens de origem. O filtro emboss atende a aplicações de garantia de qualidade, visualização interpretativa e ênfase nos limites das feições. Os casos de uso incluem realce visual para interpretação geológica, em que os limites minerais se tornam visíveis como padrões de relevo, interpretação de fotografias aéreas melhorando a visibilidade de limites sutis, produção cartográfica em que modelos digitais de elevação em relevo geram mapas de relevo impressionantes e detecção de feições arqueológicas em que estruturas enterradas aparecem como variações topográficas sutis. A interpretação da saída trata os valores altos como superfícies iluminadas e os valores baixos como sombras, criando uma profundidade perceptual que o olho humano interpreta naturalmente como relevo. A saída em relevo normalmente requer escalonamento para a faixa de visualização 0-255; a saída bruta frequentemente contém valores negativos que representam as áreas de sombra. O efeito é puramente visual — o emboss não calcula a iluminação real nem cria derivadas de elevação. Para imagens multiespectrais, aplique aos componentes principais ou a bandas selecionadas conforme os objetivos analíticos. O pós-processamento frequentemente inclui realce de contraste ou mapeamento de tons para otimizar o impacto visual.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "direction": {
                "label": "Direção",
                "description": "Direção do relevo: n,s,e,w,ne,nw,se,sw."
              },
              "clip_amount": {
                "label": "Quantidade de corte",
                "description": "Percentual opcional de corte simétrico das caudas (0-40)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "fast_almost_gaussian_filter": {
            "name": "Filtro gaussiano rápido aproximado",
            "description": "O filtro Fast Almost Gaussian proporciona uma suavização rápida por aproximação gaussiana por meio de filtragem iterativa separável por caixa (média), obtendo uma resposta de desfoque quase gaussiana com complexidade computacional O(N) independentemente do raio de desfoque. A implementação aplica convoluções sucessivas por caixa (cada uma calculando médias locais dos pixels) para aproximar a distribuição gaussiana cumulativa; N iterações aproximam kernels gaussianos cada vez maiores. A base matemática usa o teorema central do limite: a convolução repetida de funções caixa aproxima-se assintoticamente da distribuição gaussiana. Os principais recursos incluem velocidade computacional que permite suavização com kernels grandes em imagens volumosas, implementação separável que reduz os requisitos de memória, controle dos parâmetros pelo número de iterações (controla o raio de desfoque) e eficácia em qualquer tipo de dado. A filtragem Fast Almost Gaussian se destaca em pirâmides de imagens rápidas para análise multiescala, navegação em tempo real por imagens de satélite, pré-processamento de enormes conjuntos de dados de sensoriamento remoto antes da classificação e visualizadores de imagens interativos que exigem uma suavização responsiva. A interpretação da saída mostra que o número de iterações está diretamente relacionado ao raio de desfoque: N=1 produz uma suavização mínima; N=3-5 proporciona um desfoque moderado; N>10 cria uma suavização forte que aproxima gaussianos de kernel grande. Os valores de saída se deslocam progressivamente em direção à média local à medida que as iterações aumentam; a redução da variância segue padrões previsíveis. Os valores restantes permanecem dentro das faixas dos dados de entrada. A comparação com a filtragem gaussiana verdadeira mostra uma aproximação aceitável, com erro de 2-5% na maioria das aplicações. O ganho de velocidade em relação à filtragem gaussiana verdadeira aumenta drasticamente em raios grandes: 5-20× mais rápido para raios >20 pixels. Artefatos menores incluem uma leve ondulação ao longo das bordas (artefatos de caixa que se acumulam entre as iterações) e um tratamento das bordas ligeiramente diferente do gaussiano. Monitore os histogramas de saída em busca de distribuições multimodais que indiquem suavização suficiente. Aplique em pipelines de pré-processamento de imagens em que a velocidade justifica pequenos erros de aproximação.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma gaussiano aproximado (>=1.8 recomendado, padrão 1.8)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "flip_image": {
            "name": "Inverter imagem",
            "description": "Espelha uma imagem verticalmente, horizontalmente ou em ambos os sentidos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "direction": {
                "label": "Direção",
                "description": "Direção da inversão: vertical (padrão), horizontal ou both."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "frangi_filter": {
            "name": "Filtro de Frangi",
            "description": "Realiza o realce multiescala de vasos de Frangi (vesselness) para detectar estruturas semelhantes a vasos (tubulares) em múltiplas escalas. Baseado na análise dos autovalores da matriz hessiana. Responde fortemente a feições lineares (vasos, estradas, rios) e fracamente a estruturas em forma de blob. A análise multiescala (experimente múltiplos valores de sigma) detecta automaticamente vasos de diferentes larguras. Amplamente usado em imagens médicas e sensoriamento remoto para a detecção de feições lineares. O vesselness de Frangi usa as curvaturas principais (autovalores da hessiana) para classificar a estrutura local: vesselness alto para feições lineares, baixo para platôs ou blobs. A implementação multiescala aplica o filtro em múltiplos valores de sigma (largura) e combina as respostas. Excelente para detectar estradas, rios e redes de vasos. Custo computacional moderado para múltiplas escalas. Saída altamente interpretável — responde a feições reconhecíveis. Aplicações: (1) detecção de estradas em imagens de satélite, (2) extração de redes fluviais/de cursos d'água, (3) detecção de feições lineares em geral, (4) detecção de vasos (imagens médicas), (5) detecção de estruturas multiescala.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "scales": {
                "label": "Escalas",
                "description": "Lista de escalas de tipo gaussiano em pixels (padrão [1.0, 2.0, 3.0])."
              },
              "beta": {
                "label": "Beta",
                "description": "Parâmetro beta de Frangi para supressão de blobs (padrão 0.5)."
              },
              "c": {
                "label": "C",
                "description": "Parâmetro c de Frangi para sensibilidade a estruturas (padrão 15.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "gabor_filter_bank": {
            "name": "Banco de filtros de Gabor",
            "description": "Realiza a filtragem de resposta de Gabor em múltiplas orientações — análise direcional de textura. Aplica um banco de filtros de Gabor em múltiplas orientações (tipicamente 0°, 45°, 90°, 135°) para extrair feições de textura direcionais. As respostas de Gabor indicam a intensidade e a orientação da textura. Útil para detecção de feições direcionais, caracterização de texturas e análise de padrões orientados. Cada orientação é gerada separadamente. A filtragem de Gabor extrai a textura direcional por convolução com wavelets específicas de cada orientação. Cada orientação revela as feições alinhadas com aquela direção. Gera múltiplas bandas (uma por orientação) que revelam a direção e a intensidade locais da textura. As respostas de Gabor são fundamentais para a extração de feições de textura e a detecção de objetos em visão computacional. O banco de filtros permite uma análise direcional abrangente. Aplicações: (1) análise direcional de textura, (2) detecção de feições orientadas (cristas, vales, estruturas lineares), (3) mapeamento direcional de erosão/deposição, (4) detecção de estradas/cursos d'água (feições lineares), (5) classificação baseada em textura.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma do envelope gaussiano em pixels (padrão 2.0)."
              },
              "frequency": {
                "label": "Frequência",
                "description": "Frequência espacial da senoide em ciclos/pixel (padrão 0.2)."
              },
              "orientations": {
                "label": "Orientações",
                "description": "Número de orientações no banco de filtros (padrão 6)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "gaussian_filter": {
            "name": "Filtro gaussiano",
            "description": "Suavização gaussiana matematicamente ideal com kernel ponderado pela distância. Fundamental para análise multiescala, detecção de bordas e filtragem passa-banda. O parâmetro sigma controla a intensidade da suavização; compatível com RGB.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Desvio padrão gaussiano em pixels (0.5-20.0, padrão 0.75)."
              },
              "treat_as_rgb": {
                "label": "Tratar como RGB",
                "description": "Defina como verdadeiro para forçar o comportamento no espaço de intensidade RGB."
              },
              "assume_three_band_rgb": {
                "label": "Assumir RGB de três bandas",
                "description": "Quando verdadeiro (padrão), rasters uint8/uint16 de 3 bandas podem ser tratados como RGB se faltarem metadados explícitos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "glcm_texture": {
            "name": "Textura GLCM",
            "description": "O analisador de textura por matriz de coocorrência de níveis de cinza (GLCM) extrai medidas estatísticas de textura de segunda ordem que quantificam as relações espaciais entre os níveis de cinza dos pixels em distâncias e direções de deslocamento especificadas, permitindo uma classificação de texturas sofisticada que distingue padrões de vegetação agrícola, estruturas do ambiente construído e formações geológicas. A GLCM calcula matrizes de probabilidade que capturam a frequência com que pares de níveis de cinza ocorrem em deslocamentos fixos, calculando quatro estatísticas canônicas de Haralick: contraste (mede a variação local), correlação (mede a dependência linear), homogeneidade (mede a proximidade da diagonal) e energia (mede a uniformidade). A ferramenta suporta oito deslocamentos direcionais (0°, 45°, 90°, 135° e seus opostos), permitindo sensibilidade direcional da textura — detectando padrões orientados como fileiras de cultivo, alinhamentos de edificações ou estruturas geológicas. Os principais recursos incluem análise multidirecional que revela propriedades anisotrópicas da textura, ajuste do parâmetro de deslocamento que otimiza a sensibilidade à escala, cálculo simultâneo de múltiplas medidas de textura que reduz a sobrecarga de processamento e capacidade inerente de distinguir propriedades de superfície visualmente sutis. Os casos de uso abrangem agricultura de precisão (classificação de tipos de cultura, detecção de limites de talhões, avaliação do estresse das culturas), análise urbana (mapeamento da densidade de edificações, extração de superfícies impermeáveis) e sensoriamento remoto geológico (discriminação de tipos de rocha, reconhecimento de padrões estruturais). As aplicações incluem classificação da cobertura do solo combinando feições espectrais e texturais, análise de imagens baseada em objetos melhorando a acurácia da classificação, controle de qualidade detectando artefatos instrumentais em imagens de satélite e detecção de mudanças isolando alterações significativas do ruído do sensor. A interpretação da saída exige compreender o significado de cada estatística: contraste alto indica texturas rugosas/variadas; correlação alta indica padrões lineares; homogeneidade alta indica texturas uniformes; energia alta indica padrões repetitivos ordenados. As bandas de saída podem ser combinadas em índices de textura (por exemplo, a homogeneidade GLCM dividida pelo contraste realça as áreas homogêneas). Os modos de agregação direcional (média/mín/máx/separado) afetam a dimensionalidade e a interpretação da saída. A análise de textura típica usa múltiplas medidas GLCM simultaneamente para uma classificação robusta.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de banda única de entrada."
              },
              "window_size": {
                "label": "Tamanho da janela",
                "description": "Tamanho ímpar da janela móvel em pixels (padrão 7)."
              },
              "distance": {
                "label": "Distância",
                "description": "Distância em pixels para os deslocamentos dos pares de coocorrência (padrão 1)."
              },
              "angles": {
                "label": "Ângulos",
                "description": "Ângulos separados por vírgula entre 0,45,90,135 (padrão '0,45,90,135')."
              },
              "features": {
                "label": "Feições",
                "description": "Feições separadas por vírgula: contrast,dissimilarity,homogeneity,asm,energy,entropy,mean,variance,correlation."
              },
              "direction_aggregation": {
                "label": "Agregação de direções",
                "description": "Modo de agregação de direções: mean (padrão), min, max, range, separate."
              },
              "levels": {
                "label": "Níveis",
                "description": "Número de níveis de quantização (padrão 32; intervalo 8-128)."
              },
              "symmetric": {
                "label": "Simétrico",
                "description": "Se verdadeiro (padrão), constrói GLCMs simétricas."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída (GeoTIFF multibanda)."
              }
            }
          },
          "guided_filter": {
            "name": "Filtro guiado",
            "description": "O filtro guiado implementa uma suavização que preserva as bordas restringindo as saídas do filtro a relações localmente lineares com uma imagem-guia, normalmente a original ou uma camada de referência relacionada. A implementação divide a imagem em regiões retangulares sobrepostas, calculando parâmetros de regressão linear dentro de cada região para impor a suavidade da saída respeitando a estrutura da imagem-guia. A formulação matemática minimiza ||Fᵢ - a·Gᵢ - b||² + ε||a||², em que Fᵢ é a saída filtrada, Gᵢ é a imagem-guia e (a, b) são os parâmetros localmente lineares. Os principais recursos incluem flexibilidade (a imagem-guia pode ser independente da imagem filtrada), eficiência computacional por meio de uma implementação separável O(N), controle dos parâmetros que permite ajustar a intensidade da preservação das bordas e eficácia com guias de banda única ou multiespectrais. A filtragem guiada se destaca em fluxos de trabalho de fusão multissensor em que dados ópticos guiam a remoção de ruído de SAR, no refinamento de classificações LiDAR usando ortofotos coincidentes, na remoção de sombras/nuvens em mosaicos de satélite usando imagens de referência temporais e no realce de detalhes em tarefas de regularização de mapas. A interpretação da saída revela que as regiões filtradas permanecem localmente semelhantes à estrutura da imagem-guia, enquanto a promediação da intensidade ocorre dentro das regiões homogêneas. O raio de suavização controla a extensão espacial (raio maior = maior suavização); o parâmetro de regularização ε equilibra suavidade e fidelidade à estrutura (ε maior = mais suave, ε menor = mais detalhes). As faixas de saída correspondem às da entrada; a comparação visual com a imagem-guia valida a fidelidade da preservação das bordas. Artefatos comuns incluem suavização excessiva em descontinuidades fortes (selecione parâmetros adequados) e suavização insuficiente em regiões pobres na guia (verifique a qualidade da imagem-guia). Monitore a correlação cruzada entre a saída filtrada e a imagem-guia para avaliar a qualidade do alinhamento. Aplique estrategicamente em fluxos de trabalho de fusão, aumento de nitidez e reconstrução de imagens, em que a informação de bordas de uma fonte guia a filtragem de outra.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "radius": {
                "label": "Raio",
                "description": "Raio da janela do filtro guiado em pixels (padrão 4)."
              },
              "epsilon": {
                "label": "Epsilon",
                "description": "Parâmetro de regularização para a variância local (padrão 0.01)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "high_pass_bilateral_filter": {
            "name": "Filtro bilateral passa-alta",
            "description": "Calcula um resíduo passa-alta subtraindo a suavização bilateral do raster de entrada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "sigma_dist": {
                "label": "Sigma de distância",
                "description": "Desvio padrão do kernel gaussiano espacial (distância), em pixels (0.5–20.0, padrão 0.75)."
              },
              "sigma_int": {
                "label": "Sigma de intensidade",
                "description": "Desvio padrão do kernel gaussiano de intensidade, em unidades de valor do raster (padrão 1.0)."
              },
              "treat_as_rgb": {
                "label": "Tratar como RGB",
                "description": "Defina como verdadeiro para forçar a filtragem de intensidade HSI em rasters RGB empacotados antes da diferenciação passa-alta."
              },
              "assume_three_band_rgb": {
                "label": "Assumir RGB de três bandas",
                "description": "Quando verdadeiro (padrão), e sem metadados de cor explícitos, permite a interpretação RGB de uint8/uint16 de 3 bandas."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "high_pass_filter": {
            "name": "Filtro passa-alta",
            "description": "O filtro passa-alta isola os componentes espaciais de alta frequência nas imagens subtraindo uma versão de baixa frequência (suavizada) da imagem original. Matematicamente, isso é obtido convoluindo a imagem com um kernel projetado para enfatizar gradientes e suprimir variações tonais amplas. A implementação usa convolução direta ou processamento no domínio da frequência, dependendo do tamanho do kernel e das dimensões da imagem. O filtro realça bordas, detalhes finos de textura e variações de pequena escala, removendo tendências de iluminação de grande escala. Os principais recursos distintivos incluem preservação do contraste das bordas sem artefatos de fronteira, atenuação seletiva de frequências com base no raio do kernel e aplicabilidade direta a imagens em tons de cinza e multiespectrais. A filtragem passa-alta é inestimável para a análise do terreno, quando feições topográficas sutis precisam ser realçadas, para aumentar a nitidez de imagens de satélite para interpretação visual, para detectar estruturas geológicas de pequena escala e para pré-processar dados para classificação por aprendizado de máquina. Também é essencial na preparação de ortofotos para detecção de mudanças e no realce de produtos derivados de LiDAR. A interpretação da saída exige compreender que valores positivos indicam máximos locais (bordas claras) e valores negativos indicam mínimos locais (bordas escuras). A faixa típica é de ±100 para imagens de 8 bits; uma saída de média zero indica extração bem-sucedida das altas frequências. Artefatos comuns incluem oscilações (ringing) em descontinuidades fortes e ruído amplificado se as imagens de origem forem ruidosas. A interpretação da escala depende do raio do kernel: kernels menores realçam texturas finas (pixels individuais), enquanto kernels maiores enfatizam feições de escala moderada (variações do terreno ao longo de dezenas de pixels). Monitore as estatísticas da saída; uma centralização excessiva em zero indica possível processamento excessivo. Aplique com os resultados complementares de passa-baixa para reconstruir a original ou em fluxos de trabalho de decomposição multiescala.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da janela em pixels (inteiro ímpar, padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da janela em pixels (inteiro ímpar, padrão = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "high_pass_median_filter": {
            "name": "Filtro de mediana passa-alta",
            "description": "Realiza uma filtragem passa-alta subtraindo a mediana local dos valores centrais: output = pixel - median_neighborhood. Combina a filtragem passa-alta (realça detalhes) com a robustez da mediana (remove ruído). Saída centrada em zero (negativo = mais escuro que o entorno, positivo = mais claro). Robusto a valores atípicos em comparação com o passa-alta baseado em gaussiano. O resíduo passa-alta revela os desvios locais em relação à tendência da mediana. Particularmente robusto para dados ruidosos — a mediana é mais estável que a média diante de valores atípicos. A saída enfatiza a variação em escala fina. Frequentemente aplicado a versões suavizadas por gaussiano (cria um filtro passa-banda). Útil para o realce de texturas e a extração de feições a partir de imagens ruidosas. Aplicações: (1) realce de texturas a partir de dados ruidosos, (2) extração de detalhes antes da classificação, (3) detecção robusta de feições, (4) pré-processamento para segmentação baseada em textura, (5) pré-processamento de SAR.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da vizinhança em pixels (inteiro ímpar, padrão 11)."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da vizinhança em pixels (inteiro ímpar, padrão 11)."
              },
              "sig_digits": {
                "label": "Dígitos significativos",
                "description": "Dígitos significativos usados na classificação do histograma (padrão 2)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "integral_image_transform": {
            "name": "Transformada de imagem integral",
            "description": "Calcula uma transformação de área somada (imagem integral) para cada banda.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "k_nearest_mean_filter": {
            "name": "Filtro de média dos K vizinhos",
            "description": "Realiza uma suavização pela média dos k vizinhos mais próximos com preservação de bordas: ordena a vizinhança pela distância ao valor central e calcula a média dos k valores mais próximos. Abordagem híbrida que preserva as bordas por ponderação por similaridade. O pixel central e os k-1 vizinhos mais semelhantes são promediados. Mais sofisticado que o k-NN simples (considera tanto a similaridade espacial quanto a de intensidade). Computacionalmente eficiente em comparação com o bilateral. A abordagem dos k mais próximos seleciona os vizinhos de forma adaptativa: os valores de pixel próximos ao central são promediados e os pixels dissimilares são ignorados. O parâmetro k controla a suavização: k=1 (sem suavização), k=n (todos os vizinhos = filtro de média). Tipicamente k=n/2 (metade da vizinhança). Alternativa eficiente ao filtro bilateral — preservação de bordas semelhante com menor custo computacional. Particularmente útil para imagens com fortes descontinuidades de intensidade. Aplicações: (1) suavização com preservação de bordas (alternativa ao bilateral), (2) pré-processamento rápido para classificação, (3) pré-processamento em que a eficiência é crítica, (4) filtragem de imagens multibanda. Parâmetros típicos: k=neighborhood_size/2 a 3/4.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da vizinhança em pixels (inteiro ímpar, padrão 3)."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da vizinhança em pixels (inteiro ímpar, padrão 3)."
              },
              "k": {
                "label": "K",
                "description": "Número de vizinhos mais próximos a promediar (padrão 5)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "kuwahara_filter": {
            "name": "Filtro de Kuwahara",
            "description": "O filtro de Kuwahara implementa uma suavização não linear que preserva as bordas dividindo a vizinhança de cada pixel em quatro quadrantes, calculando estatísticas dentro de cada quadrante e selecionando o quadrante de menor variância como valor de saída. A implementação particiona uma janela (2k+1)×(2k+1) em quatro subjanelas k×k sobrepostas, calcula a média e a variância de cada quadrante e gera a média do quadrante com variância mínima. Essa abordagem baseada em postos suaviza as regiões homogêneas e acentua as bordas simultaneamente. Os principais recursos incluem preservação real das bordas pela seleção de quadrantes (as bordas entre quadrantes suprimem o desfoque da saída), simplicidade computacional que exige apenas cálculos de média/variância, controle dos parâmetros pelo tamanho do quadrante k e eficácia em imagens ópticas, de radar e termais. A filtragem de Kuwahara se destaca na suavização de DEMs derivados de LiDAR preservando escarpas e terraços, na extração de redes viárias a partir de imagens de alta resolução mantendo a nitidez das linhas centrais, na delimitação de contornos de edificações a partir de fotos aéreas e na detecção de limites de derramamentos de óleo em imagens SAR. A interpretação da saída revela que as regiões homogêneas geram o quadrante que naturalmente faz a média (menor variância); as bordas geram o quadrante que contém a estrutura uniforme mais próxima da borda, ancorando efetivamente a saída ao lado mais limpo. O tamanho do quadrante k controla a preservação dos detalhes: k=1 (suavização mínima) preserva bordas finas; k=3-4 proporciona um equilíbrio entre suavização e preservação das bordas; k>5 arrisca a perda de detalhes. Os valores de saída correspondem exatamente aos valores dos pixels de entrada dos quadrantes selecionados (sem interpolação). Monitore os histogramas de saída em busca de distribuições bimodais (bordas e regiões homogêneas claramente separadas); distribuições unimodais sugerem desfoque das bordas. Aplique um aumento de nitidez complementar se ocorrer suavização excessiva. Artefatos comuns incluem viés direcional dependente do alinhamento dos quadrantes e efeito de blocos perto de bordas fracas. Use no pré-processamento para segmentação, em que a preservação das bordas garante uma extração precisa dos limites.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "radius": {
                "label": "Raio",
                "description": "Raio do quadrante de Kuwahara em pixels (padrão 2)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "lee_filter": {
            "name": "Filtro de Lee",
            "description": "O filtro de Lee realiza a redução do speckle SAR usando o modelo multiplicativo de Lee, assumindo que os retornos de radar seguem um ruído multiplicativo: I = S·N, em que S é o sinal e N é o ruído multiplicativo. A implementação calcula médias e variâncias locais, estima a variância do speckle e, em seguida, filtra por: F = μ + (1 - σₙ²/σ_I²)·(I - μ), em que σₙ² é a variância do speckle e σ_I² é a variância total. Essa abordagem baseada em modelo preserva as feições de alta coerência enquanto suprime o speckle. Os principais recursos incluem um modelo de ruído específico para SAR (multiplicativo em vez de gaussiano), preservação de alvos pontuais e bordas, interpretação simples dos parâmetros (o tamanho da janela controla a medição da coerência) e eficácia comprovada em SAR de polarização única e múltipla. A filtragem de Lee se destaca no pré-processamento de SAR para monitoramento agrícola, classificação florestal, monitoramento da superfície oceânica e fluxos de trabalho de mapeamento de inundações. A interpretação da saída mostra que as regiões de alta coerência (alvos pontuais, bordas fortes) são minimamente filtradas; as regiões de baixa coerência (ruído speckle, limites fracos) são filtradas agressivamente. A estimativa da variância do speckle afeta a saída: uma estimativa precisa requer pixels homogêneos suficientes; uma variância subestimada produz suavização insuficiente; uma variância superestimada causa suavização excessiva. O tamanho da janela controla a resolução da medição da coerência: janelas pequenas (3×3) preservam detalhes finos; janelas grandes (7×7) melhoram a estimativa da variância, mas arriscam a perda de detalhes. A escala da saída corresponde à da entrada; a visualização logarítmica melhora a visibilidade. A redução típica do ruído alcança uma diminuição de variância de 5-10 dB, dependendo do número de looks. Monitore o histograma de saída em busca de assinaturas residuais de speckle; distribuições suaves sugerem filtragem adequada. Os artefatos incluem possível desfoque das bordas em regiões de baixa coerência e viés direcional em feições lineares. Aplique estrategicamente na classificação SAR que exige supressão do speckle mantendo a integridade das feições de classificação.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da vizinhança em pixels (inteiro ímpar, padrão 11)."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da vizinhança em pixels (inteiro ímpar, padrão 11)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Semilargura de inclusão de intensidade em torno do valor central (padrão 10.0)."
              },
              "m_value": {
                "label": "Valor M",
                "description": "Contagem mínima de amostras dentro do intervalo antes da média alternativa (padrão 5.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "line_detection_filter": {
            "name": "Filtro de detecção de linhas",
            "description": "O filtro de detecção de linhas é um detector de bordas especializado, projetado para realçar feições lineares — estradas, rios, linhas de energia e lineamentos geológicos — em quatro direções principais (horizontal, vertical e ambas as diagonais), aplicando kernels de convolução direcionais otimizados para a conectividade e a continuidade das linhas. Esse filtro emprega kernels 3×3 que enfatizam as estruturas lineares alinhadas com cada direção principal, suprimindo o ruído perpendicular e as variações aleatórias das feições. A abordagem direcional separa as detecções por orientação, permitindo que as aplicações posteriores distingam a infraestrutura horizontal (dutos, limites de talhões) das estruturas verticais (fileiras de árvores, corredores de serviços públicos). Os principais recursos incluem decomposição multidirecional que gera bandas separadas de magnitude e direção, ajuste adaptativo da sensibilidade às variações de largura e contraste das linhas e desempenho excepcional em feições lineares sutis inseridas em terrenos complexos. Os casos de uso abrangem mapeamento de infraestrutura (estradas, ferrovias, linhas de energia), extração de feições naturais (cursos d'água, cristas, falhas) e delimitação de limites de uso do solo. As aplicações incluem pré-processamento para conversão vetorial na digitalização cadastral, extração de redes de transporte a partir de ortofotografias, mapeamento de estruturas geológicas a partir de imagens de satélite e reconhecimento de padrões em análises de sensoriamento remoto. A interpretação da saída exige compreender que cada componente direcional revela a intensidade das linhas naquela orientação específica — examine as quatro saídas direcionais para identificar as direções predominantes das feições. Valores de magnitude mais altos indicam maior continuidade das linhas; valores baixos sugerem ruído ou interrupções. A saída é naturalmente esparsa, destacando apenas os pixels que representam feições lineares; as áreas de fundo permanecem próximas de zero. A saída multidirecional permite uma pós-classificação em que as estradas (tipicamente horizontais/verticais em áreas construídas) são distinguidas dos lineamentos naturais (orientação arbitrária). Combine os componentes direcionais para gerar um mapa de linhas unificado ou analise cada direção separadamente para mapear estruturas orientadas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "variant": {
                "label": "Variante",
                "description": "Variante de direção da linha: v, h, 45 ou 135."
              },
              "abs_values": {
                "label": "Valores absolutos",
                "description": "Se verdadeiro, emite valores absolutos de resposta."
              },
              "clip_tails": {
                "label": "Cortar caudas",
                "description": "Percentual opcional de corte simétrico das caudas (0-40)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "line_thinning": {
            "name": "Afinamento de linhas",
            "description": "Reduz as feições conectadas de um raster binário a linhas de esqueleto com largura de uma célula.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "lidar_ground_point_filter": {
            "name": "Filtro de pontos de solo LiDAR",
            "description": "Separa o terreno dos pontos acima do solo: classificação/filtragem baseada na declividade usando a geometria de planos locais e limiares de altura. Segmentação eficiente do solo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio de busca da vizinhança (padrão 2.0)."
              },
              "min_neighbours": {
                "label": "Mínimo de vizinhos",
                "description": "Número mínimo alvo de vizinhos (padrão 0)."
              },
              "slope_threshold": {
                "label": "Limiar de declividade",
                "description": "Limiar de declividade em graus (padrão 45.0, máx. 88)."
              },
              "height_threshold": {
                "label": "Limiar de altura",
                "description": "Separação vertical mínima para sinalizar como fora do terreno (padrão 1.0)."
              },
              "classify": {
                "label": "Classificar",
                "description": "Se verdadeiro, classifica os pontos (solo=2, fora do terreno=1); caso contrário, filtra os pontos fora do terreno."
              },
              "slope_norm": {
                "label": "Normalização de declividade",
                "description": "Se verdadeiro, aplica a normalização de terreno por cartola antes do teste de declividade (padrão true)."
              },
              "height_above_ground": {
                "label": "Altura acima do solo",
                "description": "Se verdadeiro, emite os valores z como altura local acima do vizinho inferior mais próximo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída para o modo de entrada única."
              }
            }
          },
          "majority_filter": {
            "name": "Filtro de maioria",
            "description": "Calcula a moda em janela móvel (valor/classe mais frequente) para cada pixel. Filtro não linear que preserva os limites categóricos e os padrões dominantes. Particularmente útil para imagens classificadas, em que a saída deve permanecer dentro do conjunto original de classes (ao contrário do filtro de média, que cria valores interpolados). Essencial para a limpeza morfológica de saídas de classificação.\n\nA filtragem por maioria é o equivalente baseado na moda da filtragem pela mediana. Para dados categóricos (imagens classificadas, cobertura do solo), a maioria preserva as definições das classes enquanto suaviza o ruído. Para dados contínuos, a maioria pode revelar picos locais na distribuição dos valores. Frequentemente seguida da eliminação de classes minoritárias (limpeza pós-classificação) para remover artefatos de classificação do tipo \"sal e pimenta\".\n\nAplicações: (1) suavização pós-classificação (remove pequenas manchas espúrias de classes), (2) mapa da classe majoritária a partir de múltiplas saídas classificadas, (3) limpeza de dados vetoriais (desagregação de classes), (4) supressão de ruído em imagens limiarizadas, (5) suavização de atributos em saídas de segmentação. Fluxo de trabalho típico: classificar→filtro de maioria→eliminação de minorias→mapa final limpo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da janela em pixels (inteiro ímpar, padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da janela em pixels (inteiro ímpar, padrão = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "maximum_filter": {
            "name": "Filtro de máximo",
            "description": "Calcula o valor máximo em janela móvel, revelando picos e cristas locais. Operador de dilatação no processamento morfológico de imagens. Útil para detectar picos, linhas de cumeada e feições de amplitude máxima. Sensível a um único valor atípico (um valor alto na janela produz uma saída alta).\n\nO filtro de máximo é o operador morfológico de \"dilatação\" — expande as regiões claras e encolhe as regiões escuras. Quando aplicado repetidamente (dilatação em múltiplas passagens), cria picos suavizados e as feições isoladas crescem até preencher suas vizinhanças. Combinado com o filtro de mínimo, permite o fechamento (dilatação seguida de erosão) e a abertura (erosão seguida de dilatação). Essencial para a detecção morfológica de feições e a análise multiescala.\n\nAplicações: (1) dilatação morfológica para filtragem baseada em tamanho, (2) fechamento por dilatação→erosão para preencher pequenos buracos, (3) identificação de picos/cristas no terreno e em imagens, (4) nível de teto local em batimetria/DEM, (5) análise de feições multiescala (comparar a dilatação entre escalas). Fluxo de trabalho típico: máximo→comparação com o mínimo→fechamento ou abertura, dependendo do tipo de feição.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da janela em pixels (inteiro ímpar, padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da janela em pixels (inteiro ímpar, padrão = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "mean_filter": {
            "name": "Filtro de média",
            "description": "Calcula a média em janela móvel para cada pixel. Operação de suavização fundamental que reduz o ruído local enquanto desfoca transições nítidas. A saída representa a tendência central local. Amplamente usado para pré-processamento, redução de ruído e análise multiescala.\n\nA filtragem pela média é a operação de suavização passa-baixa mais comum. Altamente sensível a valores atípicos (valores extremos podem distorcer os resultados), o que torna o filtro de mediana preferível para dados ruidosos. Computacionalmente eficiente. O tamanho do filtro controla a extensão da suavização: pequeno (3×3) preserva os detalhes, grande (31×31+) cria uma superfície fortemente suavizada. Frequentemente aplicado de forma iterativa ou em múltiplas escalas para análise multirresolução.\n\nAplicações: (1) redução básica de ruído, (2) pré-processamento antes da detecção de feições (suaviza falsos positivos), (3) análise multiescala (aplicar em 3×3, 11×11, 31×31), (4) suavização temporal (combinação de cenas), (5) linha de base para outras operações estatísticas. Compare com a mediana (não linear, preserva as bordas) para uma melhor preservação das bordas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da janela em pixels (inteiro ímpar, padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da janela em pixels (inteiro ímpar, padrão = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "median_filter": {
            "name": "Filtro de mediana",
            "description": "Calcula o valor da mediana em janela móvel para cada pixel, substituindo-o pelo percentil 50 da vizinhança. Filtro de ruído robusto que preserva as bordas (não linear). Particularmente eficaz para a remoção de ruído impulsivo (sal e pimenta) mantendo limites nítidos. Os valores de saída são valores reais de pixels da vizinhança (não interpolados).\n\nA filtragem pela mediana é não linear — uma vantagem fundamental sobre a filtragem pela média para a redução de ruído, pois não cria novos valores nem desfoca as bordas. Tamanhos de filtro grandes suavizam fortemente enquanto preservam transições nítidas. Amplamente usada em sensoriamento remoto, imagens médicas e processamento de imagens SAR. O custo computacional aumenta com o tamanho do filtro, mas geralmente é mais rápido que os filtros bilateral ou guiado.\n\nAplicações: (1) redução do speckle em imagens SAR (especialmente eficaz para a coerência de fase), (2) remoção de ruído sal e pimenta, (3) pré-processamento antes da detecção de bordas (reduz bordas falsas), (4) preservação de limites no pré-processamento para classificação, (5) correção radiométrica de valores atípicos. Fluxo de trabalho típico: aplicar a mediana→saída com bordas realçadas→limiar para extração de feições.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da janela em pixels (inteiro ímpar, padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da janela em pixels (inteiro ímpar, padrão = filter_size_x). Alias: filtery."
              },
              "sig_digits": {
                "label": "Dígitos significativos",
                "description": "Número de dígitos significativos usados na filtragem por posto quantizada (padrão 2)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "minimum_filter": {
            "name": "Filtro de mínimo",
            "description": "Calcula o valor mínimo em janela móvel, revelando baixios e depressões locais. Operador de erosão no processamento morfológico de imagens. Útil para detectar fundos de vale, depressões e feições de altitude mínima. Sensível a um único valor atípico (um valor baixo na janela produz uma saída baixa).\n\nO filtro de mínimo é o operador morfológico de \"erosão\" — encolhe as regiões claras e expande as regiões escuras. Quando aplicado repetidamente (erosão em múltiplas passagens), cria vales suavizados e as feições isoladas desaparecem. Combinado com o filtro de máximo (dilatação), permite as operações de abertura (erosão seguida de dilatação) e fechamento (dilatação seguida de erosão). Frequentemente usado na decomposição multiescala: compare o mínimo em 3×3, 11×11, 31×31 para identificar as escalas das feições.\n\nAplicações: (1) erosão morfológica para filtragem baseada em tamanho, (2) abertura por erosão→dilatação para remover pequenos objetos de ruído, (3) identificação de depressões/vales no terreno, (4) nível de fundo local em batimetria/DEM, (5) análise de feições multiescala (comparar a erosão entre escalas). Fluxo de trabalho típico: mínimo→comparação com o máximo→abertura ou fechamento, dependendo do tipo de feição.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da janela em pixels (inteiro ímpar, padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da janela em pixels (inteiro ímpar, padrão = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "non_local_means_filter": {
            "name": "Filtro de médias não locais",
            "description": "A filtragem por médias não locais (non-local means) realiza uma poderosa remoção de ruído calculando a média de patches semelhantes identificados em toda a imagem, em vez de pixels vizinhos, explorando a autossimilaridade da imagem para suprimir o ruído preservando as estruturas. A implementação identifica patches semelhantes a cada patch-alvo pela distância euclidiana no espaço de patches, pondera exponencialmente os patches semelhantes pela similaridade e calcula a média dos patches ponderados. O algoritmo calcula: Fᵢ = (1/Z) Σⱼ exp(-d(Pᵢ, Pⱼ)²/h²) · Iⱼ, em que d mede a distância entre patches, h controla a largura de banda e Z normaliza. Os principais recursos incluem remoção de ruído superior pela busca por similaridade em vez de apenas pela proximidade espacial, eficácia em texturas complexas e detalhes finos, aplicabilidade a qualquer tipo de dado e desempenho comprovado em imagens médicas, de satélite e fotográficas. A filtragem por médias não locais se destaca na restauração detalhada de imagens de satélite preservando texturas e estruturas finas, na promediação de pilhas multitemporais para a preparação da detecção de mudanças, na remoção de ruído de dados de levantamento muito ruidosos (ultrassônicos, hiperespectrais) e no realce de imagens de levantamentos arqueológicos/aéreos. A interpretação da saída exige compreender que regiões semelhantes em toda a imagem contribuem para cada pixel de saída; regiões localmente dissimilares contribuem de forma desprezível. O tamanho do patch controla a preservação das feições (patches maiores = resultados mais suaves, patches menores = mais detalhes); a largura de banda h controla a ponderação por similaridade (h maior = mais patches incluídos, h menor = exigências de similaridade mais estritas). As faixas de saída correspondem às da entrada; as estatísticas se deslocam em direção às médias regionais enquanto as estruturas finas permanecem. O custo computacional cresce com o tamanho da imagem e o raio do patch; a execução típica exige um tempo de processamento considerável para imagens grandes. Monitore a progressão da filtragem por PSNR ou inspeção visual. Artefatos comuns incluem suavização excessiva de texturas finas (aumente o tamanho do patch com cuidado) e suavização insuficiente em regiões de muito ruído (aumente a largura de banda). Aplique estrategicamente em fluxos de trabalho que exigem a máxima redução de ruído preservando as feições de escala fina.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da janela de busca em pixels (padrão 5)."
              },
              "patch_radius": {
                "label": "Raio do patch",
                "description": "Raio do patch em pixels (padrão 1)."
              },
              "h": {
                "label": "H",
                "description": "Parâmetro de intensidade da filtragem (padrão 10.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "opening": {
            "name": "Abertura",
            "description": "Realiza uma operação morfológica de abertura usando um elemento estruturante retangular.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura ímpar da vizinhança (padrão 11)."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura ímpar da vizinhança (padrão igual a filter_size_x)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "olympic_filter": {
            "name": "Filtro olímpico",
            "description": "O filtro olímpico implementa uma suavização baseada em postos removendo o maior e o menor valor de cada vizinhança de pixel e calculando a média dos pixels restantes. Essa abordagem de filtragem robusta elimina os valores atípicos extremos (provavelmente ruído ou valores espúrios) preservando a tendência central. Formulação matemática: F = (1/(N-2)) Σ(I_sorted[2:N-1]), em que os valores ordenados da vizinhança excluem o maior e o menor. A implementação requer a ordenação de pequenas vizinhanças (computacionalmente eficiente), mas produz uma redução de ruído eficaz. Os principais recursos incluem uma estratégia simples de remoção de valores atípicos, redução eficaz do ruído sal e pimenta, filtragem sensível às bordas (as bordas frequentemente aparecem como extremos) e aplicabilidade a qualquer tipo de dado. A filtragem olímpica se destaca no pré-processamento de imagens de satélite ópticas (remove pixels isolados de nuvens claras e sombras escuras), na suavização de DEMs reduzindo artefatos de ruído de levantamento, na remoção de ruído de imagens termais (remove valores atípicos do sensor) e no pré-processamento de imagens de radar. A interpretação da saída revela que distribuições de ruído simétricas (números iguais de valores atípicos altos/baixos) são filtradas simetricamente; distribuições assimétricas (mais altos ou mais baixos) produzem uma filtragem direcional. O tamanho da vizinhança controla a extensão da suavização: uma janela 3×3 remove 2 extremos de 9 pixels (filtragem leve); janelas maiores filtram de forma mais agressiva. Os valores de saída permanecem dentro da faixa de entrada (a saída é a média de valores reais da vizinhança). As estatísticas mostram uma redução controlada da variância, direcionada especificamente aos valores atípicos. As imagens de diferença (original - filtrada) destacam os valores atípicos removidos; regiões concentradas de valores altos indicam um isolamento eficaz do ruído. Artefatos comuns incluem suavização insuficiente se a frequência de valores atípicos for baixa e desfoque das bordas se os pixels de borda forem classificados consistentemente como extremos. Múltiplas iterações permitem uma suavização progressiva: uma única passagem proporciona redução de ruído; passagens repetidas intensificam a suavização. Aplique em fluxos de trabalho de redução rápida de ruído que exigem uma filtragem simples e interpretável, particularmente eficaz para ruído sal e pimenta em mosaicos multissensor.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da vizinhança em pixels (inteiro ímpar, padrão 11)."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da vizinhança em pixels (inteiro ímpar, padrão 11)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "percentile_filter": {
            "name": "Filtro de percentil",
            "description": "Calcula o posto percentil local da elevação/valor da célula central dentro de uma janela móvel (0-100%). Análogo ao Elevation Percentile para dados raster genéricos. Mede a posição relativa: output=0 indica um mínimo local, output=100 indica um máximo local e output=50 indica a mediana. Revela a posição local na distribuição independentemente dos valores absolutos.\n\nA filtragem por percentil permite uma análise relativa à posição. Útil para análise em camadas: células com percentil alto (>80) em todas as bandas indicam feições \"claras\"; percentil baixo (<20) indica feições \"escuras\". Particularmente útil no pré-processamento para classificação — separa a posição do terreno/textura em vez de apenas a magnitude. Frequentemente combinado com filtros estatísticos para uma caracterização com múltiplas métricas.\n\nAplicações: (1) classificação relativa de claridade/escuridão, (2) caracterização de texturas (alta variância do percentil = rugoso, baixa variância = liso), (3) realce do contraste local (normalização baseada em percentil), (4) identificação de formas de relevo, semelhante ao percentil de elevação, (5) análise de textura multibanda (aplicar o percentil a cada banda e comparar os padrões).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da janela em pixels (inteiro ímpar, padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da janela em pixels (inteiro ímpar, padrão = filter_size_x). Alias: filtery."
              },
              "sig_digits": {
                "label": "Dígitos significativos",
                "description": "Número de dígitos significativos usados na filtragem por posto quantizada (padrão 2)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "range_filter": {
            "name": "Filtro de amplitude",
            "description": "Calcula a amplitude em janela móvel (máximo - mínimo), revelando a dispersão local dos valores independentemente do nível médio. Métrica simples de heterogeneidade: amplitude alta = valores diversos, amplitude baixa = valores uniformes. Mais simples que o desvio padrão, mas igualmente informativa para muitas aplicações e mais robusta à forma da distribuição.\n\nA amplitude é computacionalmente eficiente (requer apenas duas comparações). Particularmente útil para detectar transições/limites, onde picos de amplitude indicam zonas de contraste. Menos sensível à forma da distribuição que o desvio padrão (o desvio padrão enfatiza os valores atípicos, a amplitude usa apenas os extremos). A amplitude normalizada (amplitude/média) permite a comparação entre bandas, assim como o coeficiente de variação permite a comparação entre escalas.\n\nAplicações: (1) mapeamento de textura/contraste (interpretação fácil: amplitude alta = rugoso/contrastado), (2) detecção de limites por picos de amplitude, (3) alternativa computacionalmente eficiente ao desvio padrão, (4) controle de qualidade (fundo uniforme com amplitude baixa, áreas de feições com amplitude alta), (5) rugosidade/variabilidade em dados genéricos. Fluxo de trabalho típico: calcular a amplitude→aplicar limiar para identificar zonas de transição→vetorizar os limites de amplitude alta.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da janela em pixels (inteiro ímpar, padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da janela em pixels (inteiro ímpar, padrão = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "remove_spurs": {
            "name": "Remover esporões",
            "description": "Remove artefatos de ramificações curtas das feições de rasters binários por poda iterativa.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "max_iterations": {
                "label": "Máximo de iterações",
                "description": "Número máximo de iterações de poda (padrão 10)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "savitzky_golay_2d_filter": {
            "name": "Filtro Savitzky-Golay 2D",
            "description": "Realiza uma suavização 2D de Savitzky-Golay — filtro baseado em ajuste polinomial que preserva as feições polinomiais locais. Ajusta um polinômio local à vizinhança e substitui o centro pelo valor ajustado. Preserva picos/vales melhor que o gaussiano. Útil para dados ruidosos em que a preservação das feições é importante. Menos desfoque que o gaussiano para polinômios de baixa ordem; a suavização aumenta com a ordem do polinômio. A filtragem de Savitzky-Golay ajusta um polinômio local (tipicamente quadrático/cúbico) por mínimos quadrados à vizinhança. O valor central é substituído pelo valor do polinômio. Diferente da mediana/gaussiano — preserva feições que aparecem como estruturas polinomiais (picos, vales, cristas). Computacionalmente simples, porém mais lento que a convolução simples. A ordem do polinômio controla o compromisso entre suavização e preservação. Aplicações: (1) suavizar dados ruidosos preservando estruturas de picos, (2) processamento de grades de elevação (preserva a topografia de cristas/vales), (3) suavização de dados espectrais (preserva as feições de absorção), (4) pré-processamento com preservação de feições.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "window_size": {
                "label": "Tamanho da janela",
                "description": "Tamanho ímpar da janela (padrão 5). Atualmente suporta 5 para polinômio de ordem 2."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "scharr_filter": {
            "name": "Filtro de Scharr",
            "description": "O filtro de Scharr é um operador de detecção de bordas que aprimora o filtro de Sobel usando coeficientes de kernel otimizados, projetados especificamente para reduzir o viés direcional e proporcionar invariância à rotação superior. O operador de Scharr emprega kernels de convolução 3×3 com coeficientes inteiros (3, 10, 3) otimizados empiricamente para as direções de borda de 0°, 45°, 90° e 135°, fornecendo uma estimativa de gradiente mais precisa do que os filtros de Sobel tradicionais, especialmente para feições circulares e bordas rotacionadas. O filtro calcula simultaneamente a componente horizontal e a magnitude do gradiente, permitindo uma localização robusta das bordas. As principais vantagens incluem precisão superior para gradientes direcionais, menor viés rotacional em comparação com o Sobel e cálculo eficiente com kernel 3×3 que exige sobrecarga mínima de memória. A saída inclui a magnitude e, opcionalmente, os componentes direcionais. O filtro de Scharr se destaca em fluxos de trabalho de extração de feições, detecção de limites e garantia de qualidade que exigem alta precisão direcional. Os casos de uso incluem extração de contornos de edificações a partir de imagens aéreas, detecção de redes viárias, delimitação de limites de corpos d'água com distorção mínima e identificação de lineamentos geológicos em dados de satélite. O filtro tem desempenho excepcional em mapeamento urbano, detecção de limites agrícolas e aplicações de navegação autônoma. A interpretação da saída exige compreender que os valores de magnitude representam a intensidade da borda — valores mais altos indicam transições mais nítidas entre classes espectrais distintas. Os componentes direcionais revelam a orientação predominante das bordas (horizontal, diagonal ou vertical), útil para a análise de lineamentos. Para rasters multibanda, aplique separadamente a cada banda ou use um índice calculado. Os valores de fundo aparecem escuros na saída; as bordas fortes aparecem claras. A comparação do RMSE com bordas de referência valida o desempenho do filtro. Escalone a saída para 0-255 para visualização padrão ou preserve o ponto flutuante para análise quantitativa.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "clip_tails": {
                "label": "Cortar caudas",
                "description": "Percentual opcional de corte simétrico das caudas (0-40)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "standard_deviation_filter": {
            "name": "Filtro de desvio padrão",
            "description": "Calcula o desvio padrão em janela móvel, medindo a variação/dispersão local dos valores. Desvio padrão alto = valores diversos (rugoso/heterogêneo), desvio padrão baixo = valores uniformes (liso/homogêneo). Revela padrões de textura, rugosidade e variabilidade. Fundamental para a quantificação da incerteza e a avaliação da qualidade.\n\nO desvio padrão é mais robusto que a amplitude para caracterizar a variação local (não é enviesado por um único valor atípico). Permite a classificação de áreas por textura: encostas íngremes (desvio padrão alto), encostas suaves (desvio padrão baixo); florestas (desvio padrão alto), campos (desvio padrão baixo). Frequentemente normalizado (coeficiente de variação = desvio padrão/média) para permitir a comparação entre dados com diferentes faixas de valores. Pode ser calculado a partir do histograma (variância = média_dos_quadrados - quadrado_da_média).\n\nAplicações: (1) mapeamento de textura (análise de rugosidade/heterogeneidade), (2) quantificação da incerteza em dados ruidosos, (3) avaliação da qualidade (fundo uniforme = desvio padrão baixo, áreas ricas em feições = alto), (4) confiança da classificação (desvio padrão alto = classes mistas/incertas), (5) heterogeneidade multibanda (empilhar os desvios padrão de cada banda). Fluxo de trabalho típico: calcular o desvio padrão em múltiplas escalas→comparar as mudanças de padrão entre escalas→identificar as escalas características.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da janela em pixels (inteiro ímpar, padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da janela em pixels (inteiro ímpar, padrão = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "thicken_raster_line": {
            "name": "Espessar linhas raster",
            "description": "Engrossa segmentos de linha diagonais de um raster para evitar vazamentos pelas diagonais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "tophat_transform": {
            "name": "Transformada de cartola",
            "description": "Realiza uma transformação morfológica top-hat branca ou preta.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura ímpar da vizinhança (padrão 11)."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura ímpar da vizinhança (padrão igual a filter_size_x)."
              },
              "variant": {
                "label": "Variante",
                "description": "Variante de cartola: white (padrão) ou black."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "total_filter": {
            "name": "Filtro de soma",
            "description": "Calcula a soma em janela móvel (total) dos valores dos pixels na vizinhança. Integra a intensidade local do sinal. As aplicações dependem da semântica dos dados: para contagens/densidades, o total revela padrões de densidade local; para precipitação, o total revela a acumulação na escala da bacia; para reflectância, o total é proporcional ao tamanho local do alvo.\n\nA filtragem pelo total tem interpretações diferentes conforme o domínio. Em dados de contagem/população, o total revela agrupamentos e pontos críticos. Em dados de elevação, o total raramente é usado (a soma não tem significado geomorfológico). Na análise espectral, o total pode revelar a intensidade do sinal multibanda. Frequentemente usado como etapa intermediária (por exemplo, dividir pelo número de células da vizinhança para calcular a média, ou comparar com os totais vizinhos para detectar a heterogeneidade local).\n\nAplicações: (1) detecção de pontos críticos em dados de contagem (total alto = agrupamentos), (2) modelos de acumulação por bacia/bacia hidrográfica, (3) integração de medições distribuídas, (4) cálculo intermediário (total/N = média), (5) agregação da intensidade do sinal em mosaicos multissensor.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da janela em pixels (inteiro ímpar, padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da janela em pixels (inteiro ímpar, padrão = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "unsharp_masking": {
            "name": "Máscara de nitidez",
            "description": "A máscara de nitidez (unsharp masking) aumenta a nitidez da imagem subtraindo uma versão suavizada (passa-baixa) da imagem original, realçando bordas e detalhes finos. A transformação matemática é I_sharp = I_original + w·(I_original - I_smooth), em que w é o peso de nitidez que controla a intensidade do realce. O processo isola os componentes de alta frequência e os amplifica, separando efetivamente os detalhes da variação tonal ampla. Os principais recursos incluem controle flexível dos parâmetros (raio de desfoque e peso que permitem controlar os detalhes), eficiência computacional pela reutilização da suavização gaussiana, realce interpretável (peso=0 resulta na original; peso=1 resulta em um passa-alta verdadeiro; peso>1 proporciona um aumento de nitidez agressivo) e eficácia em dados multiespectrais. A máscara de nitidez se destaca na preparação de imagens de satélite para interpretação manual (realça terreno, vegetação e infraestrutura sutis), no realce de produtos derivados de LiDAR (aumenta a nitidez de DEMs e métricas de vegetação), na melhoria da qualidade de ortofotos para a visibilidade das feições e no realce de imagens arqueológicas/de levantamento. A interpretação da saída exige compreender que os valores realçados se concentram nas bordas; as regiões homogêneas permanecem inalteradas. O parâmetro de peso controla a magnitude do realce: w=0.5-1.0 proporciona um realce sutil; w=1.0-2.0 proporciona um aumento de nitidez moderado; w>2.0 produz resultados agressivos, potencialmente carregados de artefatos. O raio de desfoque controla a escala das feições: um raio menor (3-5 pixels) realça texturas finas; um raio maior (10-20 pixels) realça feições moderadas. Os valores de saída podem exceder a faixa de entrada; normalmente é necessário um corte. Os artefatos incluem halos em torno de bordas fortes (peso ou raio maior = mais pronunciados), ruído amplificado se a origem for ruidosa e possíveis cores falsas no aumento de nitidez multiespectral. Verifique o realce por meio de imagens de diferença. Aplique seletivamente em fluxos de trabalho de visualização; evite usar antes de análises automatizadas sensíveis a mudanças na faixa de saída.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma gaussiano usado pela máscara de desfoque (0.5-20.0, padrão 0.75)."
              },
              "amount": {
                "label": "Quantidade",
                "description": "Multiplicador da quantidade de nitidez aplicado ao resíduo (padrão 100.0)."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Resíduo absoluto mínimo a realçar (padrão 0.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "user_defined_weights_filter": {
            "name": "Filtro de pesos definidos pelo usuário",
            "description": "O filtro de pesos definidos pelo usuário oferece máxima flexibilidade para análises de convolução personalizadas, aceitando coeficientes ponderados arbitrários para os pixels da vizinhança e permitindo a implementação de operadores especializados, kernels específicos do domínio e algoritmos de nível de pesquisa sem exigir modificações na ferramenta nem software especializado. Os usuários especificam as dimensões do kernel (tipicamente 3×3 ou 5×5), atribuem pesos de ponto flutuante a cada posição e, opcionalmente, definem os métodos de tratamento das bordas (reflexão, envolvimento, preenchimento constante). Esse filtro aplica o kernel personalizado a todo o raster por meio da matemática de convolução padrão: cada pixel de saída é igual à soma dos vizinhos ponderados, permitindo tanto filtros tradicionais de processamento de imagens quanto kernels analíticos personalizados. Os principais recursos incluem personalização completa para aplicações de pesquisa, suporte a operações de realce e de análise, compatibilidade com kernels normalizados e não normalizados e preservação da precisão de ponto flutuante durante todo o cálculo. Os casos de uso abrangem filtragem espacial avançada para índices espectrais especializados, implementação de operadores experimentais para validação de algoritmos, kernels personalizados de análise de textura, agregações ponderadas de vizinhança para análise multicritério e aplicação padronizada de kernels em diversos conjuntos de dados. As aplicações incluem prototipagem de pesquisa acadêmica, avaliação de algoritmos na indústria, personalização regional de pipelines de processamento e estudos de comparação de desempenho. A interpretação da saída depende inteiramente dos coeficientes definidos pelo usuário; kernels diferentes produzem resultados fundamentalmente diferentes. Kernels normalizados (soma dos pesos igual a 1.0) preservam as faixas de valores, úteis para suavização; kernels não normalizados (tipicamente com soma zero) enfatizam diferenças, úteis para a detecção de bordas/derivadas. Os usuários devem validar as propriedades do kernel — sinal, magnitude e soma dos coeficientes — antes da aplicação em produção. A documentação das especificações do kernel é essencial para fluxos de trabalho reprodutíveis. As faixas de valores de saída dependem do projeto do kernel; a documentação deve especificar as características de saída esperadas e os requisitos de escalonamento.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "weights": {
                "label": "Pesos",
                "description": "Pesos do kernel 2D como matrizes aninhadas."
              },
              "kernel_center": {
                "label": "Centro do kernel",
                "description": "Modo do centro do kernel: center, upper-left, upper-right, lower-left, lower-right."
              },
              "normalize_weights": {
                "label": "Normalizar pesos",
                "description": "Se verdadeiro, normaliza pela soma local dos pesos ativos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "wiener_filter": {
            "name": "Filtro de Wiener",
            "description": "O filtro de Wiener realiza uma redução adaptativa de ruído minimizando o erro quadrático médio entre a saída filtrada e o sinal verdadeiro, assumindo o conhecimento das propriedades estatísticas do sinal e do ruído. A implementação estima as variâncias locais do sinal e do ruído dentro de janelas móveis, calculando coeficientes de filtro que equilibram a supressão do ruído e a preservação dos detalhes: F = μ + (σ² - σₙ²)/σ² · (I - μ), em que μ é a média local, σ² é a variância do sinal e σₙ² é a variância do ruído. Essa adaptação orientada pelos dados garante que a intensidade da filtragem responda às características locais da imagem. Os principais recursos incluem adaptação automática às estatísticas locais (regiões planas são suavizadas agressivamente; regiões detalhadas preservam a estrutura), eficácia comprovada em imagens ópticas e SAR, parâmetros interpretáveis baseados nas hipóteses do modelo de ruído e viabilidade computacional por meio de aproximações separáveis. A filtragem de Wiener se destaca no pré-processamento de imagens de satélite em que o ruído varia espacialmente, na redução do speckle SAR preservando alvos pontuais, em dados multiespectrais sem speckle para o mapeamento da vegetação e na remoção de ruído na fusão radar-óptico. A interpretação da saída mostra que as regiões de alta variância (detalhadas) são minimamente filtradas, enquanto as regiões de baixa variância (ruidosas) são filtradas agressivamente. A estimativa da variância do ruído afeta a saída: uma variância do ruído subestimada produz suavização insuficiente; uma variância superestimada causa suavização excessiva e perda de detalhes. As faixas de saída se aproximam das faixas de entrada; examine as imagens de diferença (original - filtrada) para verificar a redução do ruído. A relação sinal-ruído de pico (PSNR) e o índice de similaridade estrutural (SSIM) quantificam a eficácia da filtragem. Os limiares de variância local indicam o impacto do processamento: regiões com razão de variância detectada > 5 são filtradas substancialmente; razões < 1 são filtradas minimamente. As armadilhas comuns incluem uma estimativa imprecisa da variância do ruído (realize uma análise de quadro escuro ou de regiões homogêneas para a estimativa) e a seleção do tamanho da janela, que afeta a localização. Aplique antes da classificação ou da extração de feições para reduzir a classificação incorreta de categorias causada pelo ruído.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "radius": {
                "label": "Raio",
                "description": "Raio da janela local de Wiener em pixels (padrão 2)."
              },
              "noise_variance": {
                "label": "Variância do ruído",
                "description": "Variância opcional do ruído aditivo. Se omitida, é estimada a partir do mapa de variância local."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "cloude_pottier_decomposition": {
            "name": "Decomposição de Cloude-Pottier",
            "description": "A decomposição de Cloude-Pottier diagonaliza a matriz de coerência de dados SAR quad-polarimétricos, extraindo autovalores e autovetores que caracterizam os mecanismos de espalhamento. A entropia, a anisotropia e o ângulo alfa médio, calculados a partir dos autovetores, caracterizam respectivamente a desordem do espalhamento, a dominância do mecanismo e o tipo de espalhamento. O espaço de parâmetros H-alfa permite a classificação física dos mecanismos de espalhamento independentemente das variações de amplitude, explorando a informação de fase polarimétrica. Principais recursos: decomposição de SAR quad-polarimétrico; exploração da informação de fase; parâmetros de espalhamento fisicamente significativos; separa os mecanismos de espalhamento; robusto ao speckle de amplitude; permite a classificação e a interpretação de alvos. Casos de uso: reconhecimento de alvos SAR; estimativa da biomassa florestal; caracterização de áreas úmidas; detecção de navios/veículos; classificação da cobertura do solo; interpretação de dados SAR polarimétricos. Interpretação da saída: a saída inclui a entropia (grau de desordem; 0=espalhamento ordenado, 1=aleatório), a anisotropia (dominância do mecanismo, 0-1) e o ângulo alfa (tipo de espalhamento: ~45°=dipolo, ~30°=superfície, ~60°=volume). Os gráficos de dispersão H-alfa revelam padrões de agrupamento que indicam os tipos de espalhamento. O duplo salto (urbano) apresenta alfa alto; o espalhamento de superfície (água) apresenta alfa baixo; o espalhamento volumétrico (floresta) apresenta valores intermediários.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Rasters da matriz: diag3 [m11,m22,m33], full3x3 compacto [m11,m22,m33,m12,m13,m23] ou 9 rasters completos em ordem de linha."
              },
              "matrix_format": {
                "label": "Formato da matriz",
                "description": "Formato da matriz de entrada: diag3 (padrão com 3 rasters) ou full3x3."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Raster opcional de saída de 3 bandas [H, A, alpha_deg]."
              }
            }
          },
          "enhanced_lee_filter": {
            "name": "Filtro de Lee aprimorado",
            "description": "O filtro de Lee aprimorado combina o modelo multiplicativo de Lee com uma estimativa refinada da variância e processamento multiescala, alcançando uma redução superior do speckle enquanto preserva detalhes finos e bordas em imagens SAR. A implementação emprega estatísticas locais calculadas em janelas de tamanho adaptativo, incorpora detecção de bordas baseada no laplaciano e aplica parâmetros de filtro espacialmente variáveis. A formulação aprimorada aplica: F = μ + w·(I - μ), em que w se adapta à proximidade das bordas: w→0 perto das bordas (filtragem mínima), w→1 em regiões homogêneas (filtragem agressiva). Os principais recursos incluem processamento adaptativo às bordas (preservando os limites), adaptação multiescala dos parâmetros, melhor preservação dos alvos em comparação com o Lee padrão e eficácia em SAR de alto ruído. A filtragem de Lee aprimorada se destaca em cenas SAR complexas com numerosas feições, em aplicações de mapeamento de inundações em que a localização das bordas é fundamental, na detecção de edificações a partir de SAR urbano e na análise de mudanças multitemporais. A interpretação da saída revela a preservação das bordas pela filtragem reduzida perto das transições: os pixels de limite retêm maior variância do que os pixels distantes. A adaptação multiescala torna-se evidente pela análise do histograma, que mostra picos pronunciados correspondentes às classes da cena. As faixas de saída correspondem às da entrada; a comparação com o Lee padrão mostra menor desfoque das bordas e manutenção da nitidez dos alvos. A qualidade da detecção de bordas afeta diretamente a saída: bordas fortes permitem uma boa preservação dos limites; bordas fracas podem induzir suavização excessiva. As estatísticas mostram uma redução controlada da variância, equilibrando a supressão do ruído e a preservação dos detalhes. Artefatos comuns incluem possível aparência em blocos se as transições multiescala se tornarem visíveis e preservação excessiva se a detecção de bordas for muito agressiva. Monitore a qualidade do mapa de bordas para validar o comportamento da filtragem. Aplique em pipelines abrangentes de análise SAR em que múltiplas feições devem ser preservadas e as bordas devem permanecer nítidas, o que é particularmente importante no pré-processamento para aprendizado de máquina que exige dados de treinamento com limites de feições claros.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da vizinhança em pixels (inteiro ímpar, padrão 11)."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da vizinhança em pixels (inteiro ímpar, padrão 11)."
              },
              "enl": {
                "label": "ENL",
                "description": "Parâmetro de número equivalente de looks para a ponderação por razão sigma (padrão 4.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "freeman_durden_decomposition": {
            "name": "Decomposição de Freeman-Durden",
            "description": "A decomposição de Freeman-Durden quantifica as contribuições dos mecanismos de espalhamento em SAR quad-polarimétrico por meio de uma decomposição em base ortogonal nos componentes de reflexão de superfície, duplo salto (urbano/diedro) e volume (vegetação/meios aleatórios). A otimização por mínimos quadrados não negativos restringe as frações de potência, garantindo a realizabilidade física e a interpretabilidade. Os mapas de potência de saída estão diretamente ligados às propriedades do terreno: alta dominância de superfície indica solo exposto/água, alto duplo salto indica estruturas urbanas e alto volume indica floresta/vegetação. Principais recursos: componentes de espalhamento fisicamente interpretáveis; assinaturas específicas do terreno; otimização restrita; suporta SAR quad-polarimétrico; robusto ao speckle; permite a classificação específica por alvo. Casos de uso: classificação urbano-rural; estimativa da biomassa florestal; detecção da umidade do solo; detecção de inundações; monitoramento da fenologia das culturas; mapeamento da cobertura do solo. Interpretação da saída: a potência de superfície indica reflexão especular de terreno seco/água; a potência de duplo salto indica estruturas artificiais/áreas urbanas; a potência de volume indica vegetação/floresta. As combinações de componentes permitem a discriminação da cobertura do solo: volume alto + duplo salto baixo indica floresta; duplo salto alto + volume baixo indica área urbana; superfície/volume equilibrados indicam terreno misto.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Rasters da matriz: diag3 [m11,m22,m33], full3x3 compacto [m11,m22,m33,m12,m13,m23] ou 9 rasters completos em ordem de linha."
              },
              "matrix_format": {
                "label": "Formato da matriz",
                "description": "Formato da matriz de entrada: diag3 (padrão com 3 rasters) ou full3x3."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Raster opcional de saída de 3 bandas [surface, double_bounce, volume]."
              },
              "output_clip_mask": {
                "label": "Máscara de corte de saída",
                "description": "Raster opcional de máscara de corte de saída (1 onde ocorreu corte/renormalização não física)."
              }
            }
          },
          "frost_filter": {
            "name": "Filtro de Frost",
            "description": "O filtro de Frost implementa a redução do speckle SAR usando um modelo de ruído multiplicativo e estatísticas locais adaptativas, projetado especificamente para imagens de radar em que o speckle segue uma distribuição Gama em vez de ruído gaussiano. A implementação calcula a média e a variância locais e, em seguida, aplica uma ponderação multiplicativa adaptativa: F = I · exp(-variance/(2·mean²)·distance²), em que distance mede o desvio do pixel em relação à média local. Essa formulação reduz a intensidade do speckle na razão inversa da coerência estimada. Os principais recursos incluem adaptação específica para SAR (modelo de ruído multiplicativo em vez de aditivo), preservação de alvos pontuais e bordas (feições coerentes), adaptação orientada pela variância local que permite ajustar a intensidade e eficácia comprovada em dados SAR de polarização única e múltipla. A filtragem de Frost se destaca no pré-processamento de imagens SAR para classificação (monitoramento agrícola, mapeamento do uso do solo), na fusão SAR-óptico ponderada pela coerência, no mapeamento de inundações a partir de radar durante a cobertura de nuvens e em fluxos de trabalho de detecção de mudanças com radar de abertura sintética. A interpretação da saída mostra que as regiões de alta variância (potencialmente alvos coerentes) são minimamente filtradas; as regiões de baixa variância (dominadas pelo speckle) são filtradas agressivamente. As faixas de saída típicas correspondem às da entrada; um escalonamento logarítmico (decibéis) é frequentemente aplicado antes ou depois da filtragem para visualização. A razão variância/média controla diretamente a intensidade do filtro: razão > 0.5 indica provável speckle; razão < 0.1 sugere alvos coerentes. Os artefatos de saída incluem possível perda de detalhes se a estimativa da variância não for confiável e viés direcional em feições orientadas. A verificação por mapas de coerência confirma a preservação das bordas em zonas de alta coerência. Monitore as estatísticas da saída: a média deve se estabilizar ao longo das iterações de filtragem; a variância deve diminuir substancialmente. Aplique antes da classificação para melhorar a acurácia categórica. Combine com pós-processamento morfológico para refinar os limites dos objetos e remover fragmentos residuais de speckle.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "radius": {
                "label": "Raio",
                "description": "Raio da janela local em pixels (padrão 2)."
              },
              "damping_factor": {
                "label": "Fator de amortecimento",
                "description": "Fator de amortecimento de Frost que controla o decaimento exponencial (padrão 2.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "gamma_map_filter": {
            "name": "Filtro Gamma MAP",
            "description": "O filtro Gamma Map realiza a redução do speckle SAR usando o modelo estatístico da distribuição Gama, levando em conta explicitamente as características multiplicativas do speckle do sinal de radar por meio de adaptação paramétrica. A implementação estima os parâmetros locais da distribuição Gama (forma α e escala β) a partir das estatísticas da imagem e, em seguida, filtra por meio de uma função de ponderação que respeita a distribuição: F = I · [1 - (1-L/N)/(1 + L/N)·√(1 + N/L²)], em que L é o número equivalente de looks (medida de coerência) e N é o parâmetro estimado. Os principais recursos incluem estatística SAR teoricamente rigorosa (a distribuição Gama é o padrão para radar), estimativa automática do número de looks que exige mínima entrada do usuário, preservação das bordas superior à dos filtros uniformes e aplicabilidade a SAR de look único e múltiplos looks. A filtragem Gamma Map se destaca na remoção de ruído de pilhas SAR multitemporais para detecção de mudanças em séries temporais, no realce da coerência de fase de SAR interferométrico (InSAR), no pré-processamento para decomposição de SAR polarimétrico e na normalização do retroespalhamento SAR em aplicações florestais. A interpretação da saída revela que a intensidade do filtro se adapta à coerência da cena: regiões de alta coerência (α grande) são filtradas suavemente, preservando os alvos; regiões de baixa coerência (α pequeno) são filtradas agressivamente, suprimindo o speckle. O número equivalente de looks L indica a eficácia da filtragem: L=1 (filtragem mínima) preserva todos os detalhes; L>5 produz uma suavização substancial. A escala da saída permanece nas unidades de entrada; a conversão logarítmica facilita a visualização. As reduções típicas da variância da saída variam de 50-80%, dependendo do caráter da cena e da seleção do número de looks. Monitore os histogramas de saída em busca de assinaturas residuais de speckle; distribuições bimodais sugerem uma boa separação dos componentes da cena. Os artefatos incluem possível listramento em feições orientadas ou leve degradação da textura se L for superestimado. Valide a filtragem com dados de verdade de campo em áreas de treinamento. Aplique estrategicamente na classificação de SAR polarimétrico ou na filtragem de fase InSAR que exigem realce ponderado pela coerência.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "radius": {
                "label": "Raio",
                "description": "Raio da janela local em pixels (padrão 2)."
              },
              "enl": {
                "label": "ENL",
                "description": "Número equivalente de looks (padrão 1.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "h_alpha_wisart_classification": {
            "name": "Classificação H-Alpha Wisart",
            "description": "A classificação H/α/A-Wishart combina o zoneamento não supervisionado por particionamento do espaço de parâmetros H/α/A com o agrupamento estatístico de Wishart para classificar automaticamente dados SAR polarimétricos em 9 zonas fisicamente significativas, correspondentes a classes de mecanismos de espalhamento. O algoritmo recebe os parâmetros de entropia (H), anisotropia (A) e alfa (α) da decomposição de Cloude-Pottier e particiona o espaço de feições 3D (H,A,α) em 9 regiões usando limiares fixos: a zona 1 (H baixo, α~20°) representa a reflexão de Bragg em superfícies secas; a zona 5 (H~0.7, α~45°) indica espalhamento volumétrico isotrópico em florestas; a zona 9 (H alto, α~80°) representa o espalhamento diedro (duplo salto) de estruturas urbanas. Dentro de cada zona, o agrupamento de Wishart refina opcionalmente a classificação calculando distâncias estatísticas no espaço polarimétrico multivariado, melhorando a discriminação de mecanismos semelhantes. Os principais recursos incluem classificação automática e não supervisionada que não exige amostras de treinamento; 9 classes fisicamente interpretáveis com definições padronizadas que permitem comparabilidade global; operação opcional em modo duplo (apenas limiares para velocidade, limiares+Wishart para acurácia); e métricas de confiança integradas baseadas na distância aos limites das zonas e na verossimilhança de Wishart. A ferramenta aceita imagens (H,A,α) pré-calculadas ou chama automaticamente a decomposição de Cloude-Pottier se forem fornecidas matrizes brutas. Os principais casos de uso abrangem segmentação de imagens SAR e geração de mapas a partir de dados polarimétricos, classificação não supervisionada de tipos de cobertura do solo (água, agricultura, floresta, área urbana) diretamente a partir de matrizes de coerência SAR, avaliação rápida da qualidade dos dados polarimétricos por meio das distribuições de ocupação das zonas e detecção de mudanças revelando transições de mecanismos de espalhamento que indicam alteração da cobertura do solo. Interpretação da saída: o mapa de 9 classes corresponde diretamente aos tipos de terreno; as zonas podem ser agregadas em categorias mais amplas (água/especular = zonas 1-2, vegetação/volume = zonas 4-6, urbano/diedro = zonas 7-9). Pixels não classificados (classe 0) indicam assinaturas polarimétricas incomuns que exigem investigação.",
            "params": {
              "h_raster": {
                "label": "Raster H",
                "description": "Raster de entropia (H) de entrada da decomposição de Cloude-Pottier (intervalo 0-1)."
              },
              "alpha_raster": {
                "label": "Raster Alpha",
                "description": "Raster alpha (α) de entrada da decomposição de Cloude-Pottier (graus, 0-90)."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta alpha para corresponder a H quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos."
              },
              "output": {
                "label": "Saída",
                "description": "Raster opcional de saída com rótulos de 9 classes (1-9)."
              }
            }
          },
          "kuan_filter": {
            "name": "Filtro de Kuan",
            "description": "Realiza a filtragem de speckle de Kuan para imagens SAR/radar usando uma abordagem paramétrica que estima médias e variância locais. Ponderação adaptativa baseada na variância do ruído e na variância local da imagem. Semelhante ao Lee, mas com hipóteses estatísticas diferentes. Método de processamento SAR operacional amplamente utilizado. Equilíbrio entre eficiência computacional e bons resultados em dados SAR variados. A filtragem de Kuan assume estatística gaussiana com modelo de speckle multiplicativo. Adapta-se à variância local — distingue entre a variação do sinal e o speckle. Particularmente eficaz para imagens SAR heterogêneas (feições claras e escuras misturadas). Custo computacional razoável. Representa um compromisso prático entre sofisticação e custo computacional. Padrão em muitos sistemas de processamento SAR. Aplicações: (1) remoção operacional do speckle SAR, (2) pré-processamento de SAR com retroespalhamento misto, (3) pré-processamento de RadarSat/Sentinel-1, (4) processamento SAR de rotina. Parâmetros típicos: filter_size=5×7 a 7×7.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "radius": {
                "label": "Raio",
                "description": "Raio da janela local em pixels (padrão 2)."
              },
              "enl": {
                "label": "ENL",
                "description": "Número equivalente de looks (padrão 1.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "refined_lee_filter": {
            "name": "Filtro de Lee refinado",
            "description": "O filtro de Lee refinado aprimora a filtragem de Lee padrão por meio de uma estimativa aprimorada da coerência e de adaptações que preservam as bordas, usando estatísticas locais refinadas e análise direcional para uma redução superior do speckle. A implementação estende o modelo de Lee detectando a orientação das bordas, aplicando janelas direcionais alinhadas com os limites e calculando estimativas refinadas da coerência. Matematicamente: F = μ + √(σ_p²/(σ_I²))·(I - μ), com cálculo da variância alinhado direcionalmente. Esse refinamento melhora a preservação das bordas mantendo a supressão do speckle. Os principais recursos incluem sensibilidade direcional (adapta a direção da filtragem às estruturas da imagem), estimativa aprimorada da coerência (usa janelas anisotrópicas), preservação das bordas superior à do Lee padrão e eficácia em cenas SAR complexas. A filtragem de Lee refinada se destaca na detecção de mudanças que exige limites nítidos, na preparação de mapas de coerência InSAR, no processamento de SAR polarimétrico em que a preservação dos alvos é fundamental e na análise SAR florestal que distingue árvores do fundo. A interpretação da saída revela que a filtragem respeita a orientação das bordas: bordas horizontais são filtradas horizontalmente; bordas verticais são filtradas verticalmente; bordas diagonais são filtradas diagonalmente. Essa adaptação direcional minimiza a filtragem através dos limites verdadeiros. As estimativas de coerência costumam ser mais precisas que as do Lee padrão, reduzindo os artefatos de filtragem. As faixas de saída correspondem às da entrada; a adaptação direcional torna-se evidente por inspeção visual (as bordas permanecem mais nítidas que no Lee padrão). As estatísticas mostram maior preservação das regiões de alto contraste. Os componentes direcionais revelam a orientação da estrutura da cena; um forte viés direcional indica a orientação predominante das feições. Os artefatos comuns diminuem em relação ao Lee padrão, particularmente perto de bordas e feições complexas. Os artefatos incluem possível adaptação excessiva se a estimativa direcional falhar e artefatos de janela direcional em limites fracos. Monitore os mapas de coerência para validar a precisão da detecção de bordas. Aplique estrategicamente na classificação SAR em que estruturas direcionais (por exemplo, florestas, talhões agrícolas alinhados) devem ser preservadas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura da vizinhança em pixels (inteiro ímpar, padrão 11)."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura da vizinhança em pixels (inteiro ímpar, padrão 11)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "wisart_iterative_clustering": {
            "name": "Agrupamento iterativo Wisart",
            "description": "O agrupamento iterativo de Wishart realiza a classificação não supervisionada de dados SAR polarimétricos refinando iterativamente os centros dos agrupamentos com a métrica de distância estatística complexa de Wishart, que mede a similaridade entre distribuições de probabilidade polarimétricas multivariadas. O algoritmo é inicializado a partir das zonas da decomposição H/α (fornecendo 9 agrupamentos-semente com interpretação física conhecida) e então entra em um laço semelhante a expectativa-maximização: (1) calcula a distância de Wishart da matriz de coerência estimada de cada pixel até cada protótipo de agrupamento; (2) reatribui os pixels ao agrupamento mais próximo; (3) atualiza os protótipos dos agrupamentos calculando a média das matrizes dos pixels atribuídos; (4) itera até a convergência (taxa de reatribuição de pixels <convergence_threshold) ou até atingir max_iterations. Os principais recursos incluem uma estrutura estatística de valores complexos que trata adequadamente a estrutura dos dados polarimétricos, ao contrário da distância euclidiana; inicialização automática a partir de zonas H/α interpretáveis, reduzindo a dependência de sementes aleatórias; monitoramento da convergência por pixel, permitindo um direcionamento adaptativo das iterações; entrada opcional de (H,α) pré-calculados ou cálculo automático das matrizes a partir de entradas de coerência brutas; e robustez integrada ao speckle de look único por meio da compatibilidade com o processamento multilook. A ferramenta suporta formatos de matriz convencionais e compactos. Os principais casos de uso abrangem classificação de imagens SAR polarimétricas produzindo mapas de cobertura do solo refinados além da partição H/α em 9 zonas, refinamento iterativo de uma classificação não supervisionada inicial para cartografia, avaliação automatizada da qualidade dos dados polarimétricos por meio de métricas de estabilidade dos agrupamentos e classificação SAR em séries temporais que permite a detecção de mudanças temporais pela análise de transições entre agrupamentos. Interpretação da saída: mapa de agrupamentos refinado (tipicamente 3-9 classes, dependendo da convergência) mostrando grupos de mecanismos de espalhamento bem separados. O histórico de convergência fornece uma métrica de confiança — uma convergência inicial rápida indica uma separação estável das classes; uma convergência lenta sugere pixels ambíguos que se beneficiariam de uma análise multivisada ou de detecção de mudanças. A integração com as zonas H/α permite a elaboração da legenda: mantenha a correspondência com as zonas H/α sempre que possível para preservar a interpretabilidade.",
            "params": {
              "h_raster": {
                "label": "Raster H",
                "description": "Raster de entropia (H) de entrada (intervalo 0-1)."
              },
              "alpha_raster": {
                "label": "Raster Alpha",
                "description": "Raster alpha (α) de entrada (graus, 0-90)."
              },
              "max_iterations": {
                "label": "Máximo de iterações",
                "description": "Número máximo de iterações do agrupamento (padrão 10)."
              },
              "convergence_threshold": {
                "label": "Limiar de convergência",
                "description": "Critério de convergência: fração de pixels inalterados (padrão 0.99)."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta alpha para corresponder a H quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos."
              },
              "output": {
                "label": "Saída",
                "description": "Raster opcional de saída de rótulos de agrupamento."
              }
            }
          },
          "yamaguchi_4component_decomposition": {
            "name": "Decomposição de Yamaguchi de 4 componentes",
            "description": "A decomposição SAR de 4 componentes de Yamaguchi decompõe dados de radar de abertura sintética de dupla polarização em componentes fisicamente interpretáveis que representam o espalhamento de superfície, o espalhamento de duplo salto (volume), o espalhamento em hélice e o espalhamento volumétrico, usando análise polarimétrica baseada em modelos com incorporação opcional de DEM. A decomposição separa os diferentes mecanismos de retroespalhamento por meio da análise de autovalores das matrizes de covariância polarimétricas, interpretando os componentes como reflexão de superfície (espalhamento de Bragg), reflexão de duplo salto em refletores de canto, rotação helicoidal da polarização (incomum) e espalhamento volumétrico difuso da vegetação ou de superfícies rugosas. A incorporação de um DEM externo estima a contribuição topográfica do espalhamento, permitindo uma melhor discriminação entre o espalhamento volumétrico verdadeiro e os efeitos topográficos. Os principais recursos incluem interpretação física baseada em modelos, permitindo a extração de parâmetros geofísicos significativos, correção topográfica opcional baseada em DEM que melhora a precisão dos componentes em terrenos acidentados, restrições de não negatividade dos componentes que evitam resultados de decomposição fisicamente impossíveis e tratamento automático de lacunas nos dados e regiões de layover. As aplicações incluem estimativa da biomassa florestal a partir do componente de espalhamento volumétrico, mapeamento urbano explorando a dominância do duplo salto em áreas construídas, estimativa da umidade do solo a partir do comportamento do espalhamento de superfície e detecção de deslizamentos/mudanças por meio de variações nas razões entre componentes. A saída da decomposição de Yamaguchi permite a interpretação geofísica. A saída compreende imagens de quatro componentes (potência de espalhamento de superfície, duplo salto, hélice e volume), métricas de qualidade da decomposição que quantificam a precisão do ajuste, índices médios de tipo de espalhamento que facilitam a caracterização da cobertura do solo e diagnósticos opcionais de coerência/entropia que orientam a avaliação da qualidade dos dados.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Rasters da matriz: 6 compactos [m11,m22,m33,m12,m13,m23] ou 9 elementos da matriz complexa 3x3 completa em ordem de linha."
              },
              "matrix_format": {
                "label": "Formato da matriz",
                "description": "Formato da matriz de entrada: full3x3 (padrão) para matrizes hermitianas com partes real/imaginária."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional da reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Raster opcional de saída de 4 bandas [surface, double_bounce, volume, helix]."
              }
            }
          },
          "ascii_to_las": {
            "name": "ASCII para LAS",
            "description": "Conversão de formato: processamento em lote de CSV→LAS. Lê arquivos de texto delimitados por espaço/vírgula/tabulação (x,y,z,intensity,class,returns,angle,time) e os converte para LAS com metadados EPSG.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de caminhos de arquivos ASCII de entrada."
              },
              "pattern": {
                "label": "Padrão",
                "description": "Padrão de campos, por exemplo 'x,y,z,i,c,rn,nr,sa'."
              },
              "epsg_code": {
                "label": "Código EPSG",
                "description": "Código EPSG para os metadados de CRS do LAS de saída."
              },
              "output_directory": {
                "label": "Diretório de saída",
                "description": "Diretório de saída opcional para os arquivos LAS gerados."
              }
            }
          },
          "las_to_ascii": {
            "name": "LAS para ASCII",
            "description": "Conversão de formato: saída de LAS→CSV. Exporta todos os atributos dos pontos para texto delimitado, para importação em planilhas/bancos de dados ou uso em scripts.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho opcional do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do CSV de saída (apenas no modo de entrada única)."
              }
            }
          },
          "las_to_shapefile": {
            "name": "LAS para shapefile",
            "description": "Converte nuvens de pontos LAS/LAZ em shapefiles vetoriais de pontos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho opcional do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída para o modo de entrada única."
              },
              "output_multipoint": {
                "label": "Saída multiponto",
                "description": "Se verdadeiro, emite uma geometria multiponto com uma única feição; caso contrário, emite uma feição pontual por ponto."
              }
            }
          },
          "lidar_colourize": {
            "name": "Colorir LiDAR",
            "description": "Atribui cores aos pontos a partir de uma imagem: amostra a ortofoto/imagem georreferenciada sobreposta na posição de cada ponto e armazena o valor como RGB. Renderização fotorrealista de nuvens de pontos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "image": {
                "label": "Imagem",
                "description": "Caminho do raster de imagem de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "lidar_join": {
            "name": "Juntar LiDAR",
            "description": "Mescla múltiplos arquivos LiDAR: concatena nuvens de pontos preservando os atributos e a consistência do cabeçalho. Processamento em lote em coleções de ladrilhos.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de caminhos LiDAR de entrada ou objetos LiDAR tipados."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "lidar_shift": {
            "name": "Deslocar LiDAR",
            "description": "Translada as coordenadas da nuvem de pontos: deslocamentos x/y/z para mudanças de datum, correções de registro ou transformações de sistema de coordenadas. Ajuste de coordenadas em massa.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "x_shift": {
                "label": "Deslocamento X",
                "description": "Deslocamento a adicionar às coordenadas x."
              },
              "y_shift": {
                "label": "Deslocamento Y",
                "description": "Deslocamento a adicionar às coordenadas y."
              },
              "z_shift": {
                "label": "Deslocamento Z",
                "description": "Deslocamento a adicionar às coordenadas z."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "lidar_tile": {
            "name": "Ladrilhar LiDAR",
            "description": "Divide a nuvem de pontos em ladrilhos de grade regular: particiona pela extensão x/y com dimensões configuráveis e limiar mínimo de pontos. Distribuição e processamento de dados padrão.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "tile_width": {
                "label": "Largura do ladrilho",
                "description": "Largura do ladrilho em unidades x (padrão 1000)."
              },
              "tile_height": {
                "label": "Altura do ladrilho",
                "description": "Altura do ladrilho em unidades y (padrão 1000)."
              },
              "origin_x": {
                "label": "Origem X",
                "description": "Coordenada x da origem da grade (padrão 0)."
              },
              "origin_y": {
                "label": "Origem Y",
                "description": "Coordenada y da origem da grade (padrão 0)."
              },
              "min_points_in_tile": {
                "label": "Mínimo de pontos por ladrilho",
                "description": "Mínimo de pontos necessários para gravar um ladrilho (padrão 2)."
              },
              "output_laz_format": {
                "label": "Formato LAZ de saída",
                "description": "Se verdadeiro, grava saídas .laz; caso contrário, .las (padrão true)."
              },
              "output_directory": {
                "label": "Diretório de saída",
                "description": "Diretório opcional para gravar os ladrilhos de saída; o padrão é <input_dir>/<input_stem>/."
              }
            }
          },
          "lidar_tophat_transform": {
            "name": "Transformada de cartola LiDAR",
            "description": "Extrai a altura acima do solo por top-hat branco morfológico: erosão + dilatação aproximam o solo local, e o resíduo = altura. Normalização sem classificação prévia do solo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança usado para erosão e dilatação."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "recover_flightline_info": {
            "name": "Recuperar informações de linhas de voo",
            "description": "Reconstrói os IDs de linha de voo a partir de lacunas no tempo GPS: infere os limites das linhas de voo e os marca em point-source-ID/user-data/RGB. Recuperação da trajetória de voo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "max_time_diff": {
                "label": "Diferença máxima de tempo",
                "description": "Lacuna máxima de tempo GPS dentro da linha de voo antes de iniciar uma nova linha de voo."
              },
              "pt_src_id": {
                "label": "ID da fonte do ponto",
                "description": "Se verdadeiro, grava os IDs de linha de voo inferidos em point_source_id."
              },
              "user_data": {
                "label": "Dados do usuário",
                "description": "Se verdadeiro, grava os IDs de linha de voo inferidos em user_data (módulo 256)."
              },
              "rgb": {
                "label": "RGB",
                "description": "Se verdadeiro, atribui uma cor aleatória por linha de voo inferida."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "select_tiles_by_polygon": {
            "name": "Selecionar ladrilhos por polígono",
            "description": "Seleção de ladrilhos em lote: copia ladrilhos LAS/LAZ de um diretório para a saída quando os pontos de amostra do ladrilho interceptam os limites do polígono. Extração de dados baseada na área de interesse.",
            "params": {
              "input_directory": {
                "label": "Diretório de entrada",
                "description": "Diretório de entrada contendo os ladrilhos LiDAR."
              },
              "output_directory": {
                "label": "Diretório de saída",
                "description": "Diretório de saída para os ladrilhos LiDAR selecionados."
              },
              "polygons": {
                "label": "Polígonos",
                "description": "Caminho do vetor de polígonos de entrada ou objeto vetorial tipado."
              }
            }
          },
          "sort_lidar": {
            "name": "Ordenar LiDAR",
            "description": "Ordena os pontos por múltiplos critérios: x/y/z com tamanhos de intervalo, além de atributos derivados. Otimiza a coerência espacial para compressão e processamento de ladrilhos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "sort_criteria": {
                "label": "Critérios de ordenação",
                "description": "Expressão de critérios de ordenação, por exemplo 'x 100, y 100, z 10, scan_angle'."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "split_lidar": {
            "name": "Dividir LiDAR",
            "description": "Particiona os pontos em arquivos separados por atributo: agrupa por classe, ID de fonte, janela de tempo, célula espacial ou contagem de pontos. Estratificação e distribuição de dados.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "split_criterion": {
                "label": "Critério de divisão",
                "description": "Critério de agrupamento: num_pts, x, y, z, intensity, class, user_data, point_source_id, scan_angle ou time."
              },
              "interval": {
                "label": "Intervalo",
                "description": "Tamanho da classe para critérios numéricos; para num_pts é o número de pontos por arquivo de saída."
              },
              "min_pts": {
                "label": "Mínimo de pontos",
                "description": "Mínimo de pontos necessários antes de gravar um arquivo de saída dividido (padrão 5)."
              },
              "output_directory": {
                "label": "Diretório de saída",
                "description": "Diretório opcional para as saídas divididas."
              }
            }
          },
          "classify_buildings_in_lidar": {
            "name": "Classificar edificações no LiDAR",
            "description": "Marca os pontos dentro dos contornos de edificações: atribui a classe 6 a todos os pontos espacialmente dentro dos limites dos polígonos. Extração de edificações baseada em vetores.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "buildings": {
                "label": "Edificações",
                "description": "Caminho do vetor de polígonos de contornos de edificações de entrada ou objeto vetorial tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "classify_lidar": {
            "name": "Classificar LiDAR",
            "description": "Classificação automática de pontos: solo, vegetação e edificações por meio da geometria local (linearidade, planaridade) e ajuste de planos RANSAC. Segmentação baseada na geometria.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança (padrão 2.5)."
              },
              "grd_threshold": {
                "label": "Limiar GRD",
                "description": "Altura acima do mínimo local considerada solo (padrão 0.1)."
              },
              "oto_threshold": {
                "label": "Limiar OTO",
                "description": "Altura acima do mínimo local considerada objeto fora do terreno (padrão 1.0)."
              },
              "linearity_threshold": {
                "label": "Limiar de linearidade",
                "description": "Limiar de linearidade usado na triagem final de não classificados (padrão 0.5)."
              },
              "planarity_threshold": {
                "label": "Limiar de planaridade",
                "description": "Limiar de planaridade usado na segmentação e no refinamento (padrão 0.85)."
              },
              "num_iter": {
                "label": "Número de iterações",
                "description": "Número de iterações RANSAC locais para as estimativas de planaridade/linearidade (padrão 30)."
              },
              "facade_threshold": {
                "label": "Limiar de fachada",
                "description": "Distância de vizinhos usada ao rotular fachadas de edificações (padrão 0.5)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "classify_overlap_points": {
            "name": "Classificar pontos de sobreposição",
            "description": "Identifica sobreposições de linhas de voo: detecta células da grade com múltiplos IDs de fonte do ponto e sinaliza ou remove os pontos sobrepostos. Controle de qualidade para validação da aquisição.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Tamanho da célula da grade usado para a análise de sobreposição."
              },
              "overlap_criterion": {
                "label": "Critério de sobreposição",
                "description": "ângulo de varredura máximo, não o ID de fonte do ponto mínimo, não o tempo mínimo, ou múltiplos IDs de fonte do ponto."
              },
              "filter": {
                "label": "Filtro",
                "description": "Se verdadeiro, remove os pontos de sobreposição; caso contrário, classifica os pontos de sobreposição como classe 12."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "clip_lidar_to_polygon": {
            "name": "Recortar LiDAR por polígono",
            "description": "Subconjunto espacial da nuvem de pontos: mantém os pontos dentro dos limites dos polígonos. Seleção de pontos baseada em vetores para extração da área de estudo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "polygons": {
                "label": "Polígonos",
                "description": "Caminho do vetor de polígonos de entrada ou objeto vetorial tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "erase_polygon_from_lidar": {
            "name": "Apagar polígono do LiDAR",
            "description": "Remove os pontos LiDAR que estão dentro da geometria dos polígonos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "polygons": {
                "label": "Polígonos",
                "description": "Caminho do vetor de polígonos de entrada ou objeto vetorial tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "filter_lidar": {
            "name": "Filtrar LiDAR",
            "description": "Remove pontos por expressão: lógica booleana sobre atributos (class, elevation, return_number, scan_angle, noise_flag etc.). Seleção flexível de pontos.",
            "params": {
              "statement": {
                "label": "Instrução",
                "description": "Expressão booleana, por exemplo '!is_noise && class == 2' ou 'NOT is_noise AND class == 2'."
              },
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída para o modo de entrada única."
              }
            }
          },
          "filter_lidar_by_percentile": {
            "name": "Filtrar LiDAR por percentil",
            "description": "Seleciona o ponto de posto percentil por célula: mantém um ponto por bloco da grade no percentil de elevação especificado. Decimação por amostra representativa.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "percentile": {
                "label": "Percentil",
                "description": "Percentil em [0, 100] (0=mais baixo, 100=mais alto)."
              },
              "block_size": {
                "label": "Tamanho do bloco",
                "description": "Tamanho do bloco da grade para a seleção de percentil local (padrão 1.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "filter_lidar_by_reference_surface": {
            "name": "Filtrar LiDAR por superfície de referência",
            "description": "Extrai pontos em relação a uma superfície de referência: z<superfície, z>superfície ou dentro de um limiar. Identifica a vegetação acima do DTM ou pontos abaixo da superfície.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "ref_surface": {
                "label": "Superfície de referência",
                "description": "Caminho do raster de referência ou objeto raster tipado."
              },
              "query": {
                "label": "Consulta",
                "description": "Tipo de consulta: within, <, <=, >, >= (padrão within)."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Limiar absoluto de distância z usado por query=within."
              },
              "classify": {
                "label": "Classificar",
                "description": "Se verdadeiro, classifica os pontos; caso contrário, filtra e mantém apenas as correspondências."
              },
              "true_class_value": {
                "label": "Valor da classe verdadeira",
                "description": "Valor de classe atribuído aos pontos correspondentes no modo de classificação."
              },
              "false_class_value": {
                "label": "Valor da classe falsa",
                "description": "Valor de classe atribuído aos pontos não correspondentes no modo de classificação."
              },
              "preserve_classes": {
                "label": "Preservar classes",
                "description": "Se verdadeiro, preserva as classes não correspondentes no modo de classificação."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "filter_lidar_classes": {
            "name": "Filtrar classes LiDAR",
            "description": "Remove pontos por classificação: filtra classes LAS indesejadas (ruído, água, edificações etc.). Pré-processamento essencial para fluxos de trabalho de condicionamento do terreno.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "excluded_classes": {
                "label": "Classes excluídas",
                "description": "Classes a excluir (matriz ou cadeia delimitada por vírgula)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "filter_lidar_noise": {
            "name": "Filtrar ruído LiDAR",
            "description": "Remove as classes de ruído ASPRS: filtra a classe 7 (ruído baixo) e a classe 18 (ruído alto). Limpeza padrão de nuvens de pontos para dados compatíveis com LAS 1.4.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "filter_lidar_scan_angles": {
            "name": "Filtrar ângulos de varredura LiDAR",
            "description": "Remove retornos LiDAR oblíquos: filtra os pontos por um limiar de ângulo de varredura. Melhora a precisão vertical removendo retornos de ângulo rasante com erro posicional.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Ângulo de varredura absoluto máximo (unidades inteiras LAS; 1 unidade = 0.006°). Obrigatório."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "height_above_ground": {
            "name": "Altura acima do solo",
            "description": "Normaliza pela geometria da nuvem de pontos: calcula a altura de cada ponto acima do vizinho mais próximo de classe solo situado abaixo dele. Superfície local do terreno sem referência raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "improved_ground_point_filter": {
            "name": "Filtro de pontos de solo aprimorado",
            "description": "Pipeline de filtragem de pontos de solo em múltiplos estágios.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada."
              },
              "block_size": {
                "label": "Tamanho do bloco",
                "description": "Tamanho da célula da grade em unidades xy."
              },
              "max_building_size": {
                "label": "Tamanho máximo da edificação",
                "description": "Largura máxima esperada das edificações em unidades xy."
              },
              "slope_threshold": {
                "label": "Limiar de declividade",
                "description": "Declividade mínima da borda em graus."
              },
              "elev_threshold": {
                "label": "Limiar de elevação",
                "description": "Limiar de distância de elevação."
              },
              "classify": {
                "label": "Classificar",
                "description": "Classifica em vez de filtrar os pontos."
              },
              "preserve_classes": {
                "label": "Preservar classes",
                "description": "Preserva as classes existentes no modo de classificação."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "individual_tree_segmentation": {
            "name": "Segmentação de árvores individuais",
            "description": "Segmenta os pontos de vegetação em copas de árvores: agrupamento mean-shift com largura de banda adaptativa a partir da geometria local do dossel. Delimitação de árvores em nível de inventário.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "only_use_veg": {
                "label": "Usar apenas vegetação",
                "description": "Se verdadeiro, processa apenas as classes de vegetação (padrão true)."
              },
              "veg_classes": {
                "label": "Classes de vegetação",
                "description": "Classes de vegetação como texto delimitado por vírgula ou matriz de inteiros (padrão '3,4,5')."
              },
              "min_height": {
                "label": "Altura mínima",
                "description": "Altura mínima dos pontos para a segmentação (padrão 2.0)."
              },
              "max_height": {
                "label": "Altura máxima",
                "description": "Altura máxima opcional dos pontos."
              },
              "bandwidth_min": {
                "label": "Largura de banda mínima",
                "description": "Largura de banda horizontal mínima (padrão 1.0)."
              },
              "bandwidth_max": {
                "label": "Largura de banda máxima",
                "description": "Largura de banda horizontal máxima (padrão 6.0)."
              },
              "adaptive_bandwidth": {
                "label": "Largura de banda adaptativa",
                "description": "Estima a largura de banda horizontal por semente a partir da geometria local da copa (padrão true)."
              },
              "adaptive_neighbors": {
                "label": "Vizinhos adaptativos",
                "description": "Contagem de vizinhos usada para a escala adaptativa de densidade local (padrão 24)."
              },
              "adaptive_sector_count": {
                "label": "Número de setores adaptativos",
                "description": "Número de setores angulares para a estimativa local do raio da copa (padrão 8)."
              },
              "grid_acceleration": {
                "label": "Aceleração por grade",
                "description": "Usa a aproximação por grade no estilo MeanShift++ para atualizações de moda mais rápidas (padrão false)."
              },
              "grid_cell_size": {
                "label": "Tamanho da célula da grade",
                "description": "Tamanho da célula da grade para as atualizações de moda aceleradas (padrão 0.5)."
              },
              "grid_refine_exact": {
                "label": "Refinamento exato da grade",
                "description": "Executa um breve refinamento por vizinhos exatos após a aceleração por grade (padrão false)."
              },
              "grid_refine_iterations": {
                "label": "Iterações de refinamento da grade",
                "description": "Limite de iterações do refinamento exato após as atualizações de moda por grade (padrão 2)."
              },
              "tile_size": {
                "label": "Tamanho do ladrilho",
                "description": "Tamanho opcional do ladrilho para o agendamento de sementes; <=0 desativa o ladrilhamento (padrão 0.0)."
              },
              "tile_overlap": {
                "label": "Sobreposição de ladrilhos",
                "description": "Largura de sobreposição dos ladrilhos para o agendamento de sementes ladrilhado (padrão 0.0)."
              },
              "vertical_bandwidth": {
                "label": "Largura de banda vertical",
                "description": "Largura de banda do kernel vertical (padrão 5.0)."
              },
              "max_iterations": {
                "label": "Máximo de iterações",
                "description": "Número máximo de iterações de mean-shift por semente (padrão 30)."
              },
              "convergence_tol": {
                "label": "Tolerância de convergência",
                "description": "Tolerância de convergência para a magnitude do deslocamento (padrão 0.05)."
              },
              "min_cluster_points": {
                "label": "Mínimo de pontos por agrupamento",
                "description": "Mínimo de pontos por agrupamento de árvore retido (padrão 50)."
              },
              "mode_merge_dist": {
                "label": "Distância de mesclagem de modas",
                "description": "Limiar de distância para a mesclagem de modas convergidas (padrão 0.8)."
              },
              "threads": {
                "label": "Threads",
                "description": "Substituição do número de threads (0 usa o pool padrão do Rayon)."
              },
              "simd": {
                "label": "SIMD",
                "description": "Ativa a aritmética assistida por SIMD nos laços de ponderação (padrão true)."
              },
              "output_id_mode": {
                "label": "Modo de ID de saída",
                "description": "Codificação do ID de segmento de saída {rgb|user_data|point_source_id|rgb+user_data|rgb+point_source_id} (padrão rgb)."
              },
              "output_sidecar_csv": {
                "label": "CSV auxiliar de saída",
                "description": "Se verdadeiro, grava um CSV point_index,segment_id ao lado da saída lidar."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente determinística para o mapeamento de cores (padrão 1)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "lidar_classify_subset": {
            "name": "Classificar subconjunto LiDAR",
            "description": "Transfere a classificação: marca os pontos base que correspondem às posições da nuvem de subconjunto. Permite a reclassificação espacial com base em conjuntos de pontos auxiliares.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Caminho do LiDAR base ou objeto LiDAR tipado."
              },
              "subset": {
                "label": "Subconjunto",
                "description": "Caminho do LiDAR do subconjunto ou objeto LiDAR tipado."
              },
              "subset_class_value": {
                "label": "Valor da classe do subconjunto",
                "description": "Valor de classificação atribuído aos pontos do subconjunto correspondidos (0-18)."
              },
              "nonsubset_class_value": {
                "label": "Valor da classe fora do subconjunto",
                "description": "Classe opcional para os pontos não correspondentes (0-18). Use 255 para preservar as classes existentes."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Tolerância de correspondência por vizinho mais próximo 3D em unidades do mapa."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "lidar_elevation_slice": {
            "name": "Fatia de elevação LiDAR",
            "description": "Extrai pontos por faixa de elevação: filtra ou reclassifica os pontos dentro de um intervalo de z. Isola camadas específicas (solo, sub-bosque, dossel) ou zonas de elevação.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "minz": {
                "label": "Z mínimo",
                "description": "Limite inferior da fatia de elevação (padrão -infinito)."
              },
              "maxz": {
                "label": "Z máximo",
                "description": "Limite superior da fatia de elevação (padrão +infinito)."
              },
              "classify": {
                "label": "Classificar",
                "description": "Se verdadeiro, reclassifica os pontos em vez de filtrá-los (padrão false)."
              },
              "in_class_value": {
                "label": "Valor da classe de entrada",
                "description": "Classificação atribuída aos pontos dentro da fatia quando classify=true (padrão 2)."
              },
              "out_class_value": {
                "label": "Valor da classe de saída",
                "description": "Classificação atribuída aos pontos fora da fatia quando classify=true (padrão 1)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "lidar_remove_outliers": {
            "name": "Remover outliers LiDAR",
            "description": "Detecta pontos atípicos por resíduos locais de elevação: compara cada ponto com a média/mediana da vizinhança e sinaliza as anomalias. Remove erros grosseiros e ruído.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança para o cálculo do resíduo local (padrão 2.0)."
              },
              "elev_diff": {
                "label": "Diferença de elevação",
                "description": "Limiar absoluto de resíduo de elevação para a detecção de outliers (padrão 50.0)."
              },
              "use_median": {
                "label": "Usar mediana",
                "description": "Usa a mediana em vez da média de elevação da vizinhança."
              },
              "classify": {
                "label": "Classificar",
                "description": "Se verdadeiro, classifica os outliers como classe 7/18 em vez de removê-los."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "lidar_segmentation": {
            "name": "Segmentação LiDAR",
            "description": "Particiona a nuvem de pontos: ajuste de planos RANSAC + crescimento de regiões cria componentes conectados. Atribui IDs de segmento armazenados em RGB. Agrupamento de pontos baseado na forma.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança para o crescimento de regiões."
              },
              "num_iterations": {
                "label": "Número de iterações",
                "description": "Número de iterações RANSAC usadas para detectar modelos planares locais."
              },
              "num_samples": {
                "label": "Número de amostras",
                "description": "Número de pontos amostrados por ajuste de modelo RANSAC local."
              },
              "inlier_threshold": {
                "label": "Limiar de inliers",
                "description": "Limiar de resíduo usado para classificar pontos como inliers do plano local."
              },
              "acceptable_model_size": {
                "label": "Tamanho aceitável do modelo",
                "description": "Número mínimo de inliers necessário para um modelo de plano local aceito."
              },
              "max_planar_slope": {
                "label": "Declividade planar máxima",
                "description": "Declividade planar máxima aceita em graus."
              },
              "norm_diff_threshold": {
                "label": "Limiar de diferença de normais",
                "description": "Diferença angular máxima (graus) entre normais planares vizinhas durante o crescimento."
              },
              "max_z_diff": {
                "label": "Diferença Z máxima",
                "description": "Diferença Z máxima permitida ao crescer um segmento."
              },
              "classes": {
                "label": "Classes",
                "description": "Se verdadeiro, não cruza limites de classe ao crescer os segmentos."
              },
              "ground": {
                "label": "Solo",
                "description": "Se verdadeiro, atribui class=2 ao maior segmento e class=1 aos demais pontos segmentados."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "lidar_segmentation_based_filter": {
            "name": "Filtro baseado em segmentação LiDAR",
            "description": "Filtragem do solo por segmentação de baixo relevo: expande componentes conectados a partir de regiões localmente planas e separa o terreno da vegetação. Separação robusta do solo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança para o crescimento de componentes conectados."
              },
              "norm_diff_threshold": {
                "label": "Limiar de diferença de normais",
                "description": "Parâmetro de compatibilidade para as verificações legadas de ângulo entre normais."
              },
              "max_z_diff": {
                "label": "Diferença Z máxima",
                "description": "Diferença máxima de elevação para o crescimento conectado."
              },
              "classify_points": {
                "label": "Classificar pontos",
                "description": "Se verdadeiro, classifica os pontos em vez de filtrar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "modify_lidar": {
            "name": "Modificar LiDAR",
            "description": "Atualiza os atributos dos pontos por meio de atribuições: z=z+offset, class=reclassify_expr, intensity=scale_factor. Transformações flexíveis em nível de ponto.",
            "params": {
              "statement": {
                "label": "Instrução",
                "description": "Uma ou mais expressões de atribuição separadas por ponto e vírgula, por exemplo 'z = z + 1; class = if(z > 5, 2, class)'."
              },
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída para o modo de entrada única."
              }
            }
          },
          "normalize_lidar": {
            "name": "Normalizar LiDAR",
            "description": "Converte elevações LiDAR absolutas em altura acima do solo: subtrai o DTM (DEM raster) dos valores z dos pontos. Cria uma nuvem de pontos normalizada para análise estrutural.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "dtm": {
                "label": "DTM",
                "description": "Caminho do raster DTM de entrada ou objeto raster tipado."
              },
              "no_negatives": {
                "label": "Sem negativos",
                "description": "Limita as alturas normalizadas negativas a zero."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "remove_duplicates": {
            "name": "Remover duplicatas",
            "description": "Remove duplicatas da nuvem de pontos: remove pontos com x/y idênticos (opcionalmente z). Trata sobreposições de múltiplas varreduras e melhora a eficiência do processamento.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "include_z": {
                "label": "Incluir Z",
                "description": "Se verdadeiro, a detecção de duplicatas inclui z; caso contrário, usa apenas x/y."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "flightline_overlap": {
            "name": "Sobreposição de linhas de voo",
            "description": "Detecta sobreposições de aquisição: conta os IDs de fonte do ponto distintos por célula. Visualização de sobreposições baseada em grade para avaliar a cobertura das linhas de voo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho opcional do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Resolução da grade usada para contar linhas de voo distintas por célula."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "lidar_block_maximum": {
            "name": "Máximo por bloco LiDAR",
            "description": "Raster a partir do atributo LiDAR máximo: valor da célula = retorno do ponto mais alto (elevação, intensidade, classe etc.). Geração de DSM, extração do topo do dossel, estatísticas de pulsos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Tamanho da célula de saída."
              },
              "interpolation_parameter": {
                "label": "Parâmetro de interpolação",
                "description": "Atributo do ponto (elevation/intensity/class/return_number/number_of_returns/scan_angle/time/rgb/user_data)."
              },
              "returns_included": {
                "label": "Retornos incluídos",
                "description": "Modo de filtragem de retornos: all, first ou last."
              },
              "excluded_classes": {
                "label": "Classes excluídas",
                "description": "Classes a excluir (matriz ou cadeia delimitada por vírgula)."
              },
              "min_elev": {
                "label": "Elevação mínima",
                "description": "Limiar de elevação mínima usado na filtragem de inclusão de pontos."
              },
              "max_elev": {
                "label": "Elevação máxima",
                "description": "Limiar de elevação máxima usado na filtragem de inclusão de pontos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "lidar_block_minimum": {
            "name": "Mínimo por bloco LiDAR",
            "description": "Raster a partir do atributo LiDAR mínimo: valor da célula = retorno do ponto mais baixo (elevação, intensidade, classe). Geração de DEM, extração da superfície do solo, linha de base do terreno.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Tamanho da célula de saída."
              },
              "interpolation_parameter": {
                "label": "Parâmetro de interpolação",
                "description": "Atributo do ponto (elevation/intensity/class/return_number/number_of_returns/scan_angle/time/rgb/user_data)."
              },
              "returns_included": {
                "label": "Retornos incluídos",
                "description": "Modo de filtragem de retornos: all, first ou last."
              },
              "excluded_classes": {
                "label": "Classes excluídas",
                "description": "Classes a excluir (matriz ou cadeia delimitada por vírgula)."
              },
              "min_elev": {
                "label": "Elevação mínima",
                "description": "Limiar de elevação mínima usado na filtragem de inclusão de pontos."
              },
              "max_elev": {
                "label": "Elevação máxima",
                "description": "Limiar de elevação máxima usado na filtragem de inclusão de pontos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "lidar_construct_vector_tin": {
            "name": "Construir TIN vetorial LiDAR",
            "description": "Constrói uma malha 3D: a triangulação de Delaunay dos pontos filtrados é gerada como uma camada vetorial de polígonos. Representação de superfícies e análise topográfica.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho opcional do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída; no modo de lote, cada entrada grava um _tin.shp irmão."
              },
              "returns": {
                "label": "Retornos",
                "description": "Filtro de retornos: all, first ou last."
              },
              "excluded_classes": {
                "label": "Classes excluídas",
                "description": "Valores de classe opcionais a excluir."
              },
              "min_elev": {
                "label": "Elevação mínima",
                "description": "Elevação mínima permitida dos pontos."
              },
              "max_elev": {
                "label": "Elevação máxima",
                "description": "Elevação máxima permitida dos pontos."
              },
              "max_triangle_edge_length": {
                "label": "Comprimento máximo da aresta do triângulo",
                "description": "Comprimento máximo opcional permitido da aresta do triângulo."
              }
            }
          },
          "lidar_contour": {
            "name": "Curvas de nível LiDAR",
            "description": "Extrai linhas vetoriais de curvas de nível: geração de curvas baseada em TIN com interpolação para elevação, intensidade e tempo. Intervalos e filtragem por comprimento de aresta configuráveis.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho opcional do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (.shp/.geojson). No modo de lote, cada entrada grava um .shp irmão."
              },
              "interval": {
                "label": "Intervalo",
                "description": "Intervalo das curvas de nível (deve ser > 0)."
              },
              "base_contour": {
                "label": "Curva de nível base",
                "description": "Valor de deslocamento da curva de nível base."
              },
              "smooth": {
                "label": "Suavizar",
                "description": "Parâmetro de suavização de compatibilidade (aceito por paridade da forma de chamada)."
              },
              "interpolation_parameter": {
                "label": "Parâmetro de interpolação",
                "description": "Um entre elevation, intensity, scan_angle, time ou user_data."
              },
              "returns": {
                "label": "Retornos",
                "description": "Filtro de retornos: all, first ou last."
              },
              "excluded_classes": {
                "label": "Classes excluídas",
                "description": "Valores de classe opcionais a excluir."
              },
              "min_elev": {
                "label": "Elevação mínima",
                "description": "Elevação mínima permitida dos pontos."
              },
              "max_elev": {
                "label": "Elevação máxima",
                "description": "Elevação máxima permitida dos pontos."
              },
              "max_triangle_edge_length": {
                "label": "Comprimento máximo da aresta do triângulo",
                "description": "Comprimento máximo opcional da aresta do triângulo; triângulos mais longos são ignorados."
              }
            }
          },
          "lidar_digital_surface_model": {
            "name": "Modelo digital de superfície LiDAR",
            "description": "Gera um DSM a partir dos retornos da superfície superior do LiDAR via TIN: usa candidatos locais de ponto mais alto dentro de um raio e, em seguida, a triangulação. Representação do dossel da vegetação e do topo das feições.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Tamanho da célula de saída."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança para a seleção de candidatos da superfície superior."
              },
              "min_elev": {
                "label": "Elevação mínima",
                "description": "Limiar de elevação mínima usado na filtragem de inclusão de pontos."
              },
              "max_elev": {
                "label": "Elevação máxima",
                "description": "Limiar de elevação máxima usado na filtragem de inclusão de pontos."
              },
              "max_triangle_edge_length": {
                "label": "Comprimento máximo da aresta do triângulo",
                "description": "Comprimento máximo opcional da aresta do triângulo para suprimir facetas de arestas longas."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "lidar_hex_bin": {
            "name": "Agrupamento hexagonal LiDAR",
            "description": "Agrega os pontos em hexágonos: grade de agrupamento com resumos por célula (contagem, z médio, intensidade). Amostragem uniforme e agrupamento estatístico.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "width": {
                "label": "Largura",
                "description": "Largura do hexágono (distância entre lados opostos)."
              },
              "orientation": {
                "label": "Orientação",
                "description": "Orientação da grade: h (vértice para cima) ou v (lado plano para cima)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída."
              }
            }
          },
          "lidar_hillshade": {
            "name": "Sombreamento do relevo LiDAR",
            "description": "Renderiza a superfície LiDAR por sombreamento do relevo: calcula as normais da superfície por ponto a partir do ajuste de planos locais e, em seguida, sombreia pelo ângulo de iluminação. Armazena como RGB para visualização 3D.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança para a estimativa local das normais. Valores <= 0 usam o espaçamento nominal estimado."
              },
              "azimuth": {
                "label": "Azimute",
                "description": "Azimute da iluminação em graus."
              },
              "altitude": {
                "label": "Altitude",
                "description": "Altitude da iluminação em graus."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "lidar_idw_interpolation": {
            "name": "Interpolação IDW LiDAR",
            "description": "Gradeamento LiDAR ponderado pela distância: atribui o valor da célula a partir da média ponderada dos pontos ao redor (potência do inverso da distância). Superfícies suaves, controladas pelo parâmetro do expoente.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Tamanho da célula de saída."
              },
              "weight": {
                "label": "Peso",
                "description": "Expoente (potência) do IDW."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança; <=0 muda para o modo de k mais próximos."
              },
              "interpolation_parameter": {
                "label": "Parâmetro de interpolação",
                "description": "Atributo do ponto a interpolar (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Retornos incluídos",
                "description": "Modo de filtragem de retornos: all, first ou last."
              },
              "excluded_classes": {
                "label": "Classes excluídas",
                "description": "Classes a excluir (matriz ou cadeia delimitada por vírgula)."
              },
              "min_elev": {
                "label": "Elevação mínima",
                "description": "Limiar de elevação mínima usado na filtragem de inclusão de pontos."
              },
              "max_elev": {
                "label": "Elevação máxima",
                "description": "Limiar de elevação máxima usado na filtragem de inclusão de pontos."
              },
              "min_points": {
                "label": "Mínimo de pontos",
                "description": "Número mínimo de pontos para a alternativa de k mais próximos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "lidar_nearest_neighbour_gridding": {
            "name": "Gradeamento por vizinho mais próximo LiDAR",
            "description": "Gradeamento LiDAR rápido: atribui o valor da célula a partir do ponto mais próximo dentro do raio de busca. Viés de interpolação mínimo, eficiente para nuvens de pontos de alta densidade. Geração rápida de DSM/DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Tamanho da célula de saída."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Distância máxima ao vizinho mais próximo; células além disso tornam-se NoData."
              },
              "interpolation_parameter": {
                "label": "Parâmetro de interpolação",
                "description": "Atributo do ponto a interpolar (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Retornos incluídos",
                "description": "Modo de filtragem de retornos: all, first ou last."
              },
              "excluded_classes": {
                "label": "Classes excluídas",
                "description": "Classes a excluir (matriz ou cadeia delimitada por vírgula)."
              },
              "min_elev": {
                "label": "Elevação mínima",
                "description": "Limiar de elevação mínima usado na filtragem de inclusão de pontos."
              },
              "max_elev": {
                "label": "Elevação máxima",
                "description": "Limiar de elevação máxima usado na filtragem de inclusão de pontos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "lidar_radial_basis_function_interpolation": {
            "name": "Interpolação por funções de base radial LiDAR",
            "description": "Superfície LiDAR suave por RBF: funções de base radial capturam a curvatura local e a microtopografia. Gradeamento de alta qualidade com derivadas contínuas através dos limites.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Tamanho da célula de saída."
              },
              "num_points": {
                "label": "Número de pontos",
                "description": "Número mínimo de vizinhos usados na interpolação local."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança; <=0 usa apenas o modo de k mais próximos."
              },
              "func_type": {
                "label": "Tipo de função",
                "description": "Tipo de base RBF (thinplatespline, polyharmonic, gaussian, multiquadric, inversemultiquadric)."
              },
              "poly_order": {
                "label": "Ordem do polinômio",
                "description": "Ordem da tendência polinomial usada na correção local (none, constant, quadratic)."
              },
              "weight": {
                "label": "Peso",
                "description": "Parâmetro/expoente de forma da base dependendo de func_type."
              },
              "interpolation_parameter": {
                "label": "Parâmetro de interpolação",
                "description": "Atributo do ponto a interpolar (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Retornos incluídos",
                "description": "Modo de filtragem de retornos: all, first ou last."
              },
              "excluded_classes": {
                "label": "Classes excluídas",
                "description": "Classes a excluir (matriz ou cadeia delimitada por vírgula)."
              },
              "min_elev": {
                "label": "Elevação mínima",
                "description": "Limiar de elevação mínima usado na filtragem de inclusão de pontos."
              },
              "max_elev": {
                "label": "Elevação máxima",
                "description": "Limiar de elevação máxima usado na filtragem de inclusão de pontos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "lidar_sibson_interpolation": {
            "name": "Interpolação de Sibson LiDAR",
            "description": "Gradeamento LiDAR por vizinhos naturais: interpolação baseada em Voronoi usando pesos de vizinhos naturais. Superfícies suaves e de aparência natural, sem artefatos de declividade nas posições dos pontos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Tamanho da célula de saída."
              },
              "interpolation_parameter": {
                "label": "Parâmetro de interpolação",
                "description": "Atributo do ponto a interpolar (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Retornos incluídos",
                "description": "Modo de filtragem de retornos: all, first ou last."
              },
              "excluded_classes": {
                "label": "Classes excluídas",
                "description": "Classes a excluir (matriz ou cadeia delimitada por vírgula)."
              },
              "min_elev": {
                "label": "Elevação mínima",
                "description": "Limiar de elevação mínima usado na filtragem de inclusão de pontos."
              },
              "max_elev": {
                "label": "Elevação máxima",
                "description": "Limiar de elevação máxima usado na filtragem de inclusão de pontos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "lidar_thin": {
            "name": "Rarefazer LiDAR",
            "description": "Reduz a densidade da nuvem de pontos: mantém ≤1 ponto por célula da grade usando a estratégia primeiro/último/mais baixo/mais alto/mais próximo. Reduz o armazenamento preservando a cobertura e a complexidade topográfica.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Tamanho da célula da grade para a rarefação (padrão 1.0)."
              },
              "method": {
                "label": "Método",
                "description": "Método de seleção de pontos por célula: first, last, lowest, highest, nearest (padrão 'first')."
              },
              "save_filtered": {
                "label": "Salvar filtrados",
                "description": "Se verdadeiro, também grava os pontos filtrados e retorna seu localizador em outputs.filtered_path."
              },
              "filtered_output": {
                "label": "Saída filtrada",
                "description": "Caminho opcional de saída para os pontos filtrados (modo de entrada única)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "lidar_thin_high_density": {
            "name": "Rarefazer LiDAR de alta densidade",
            "description": "Decimação adaptativa por densidade: reduz o número de pontos em zonas superdensas preservando as regiões esparsas. Equaliza a amostragem em padrões variáveis de sobreposição das linhas de voo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "density": {
                "label": "Densidade",
                "description": "Limiar alvo de densidade de pontos em pontos por unidade quadrada."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Resolução da grade usada para a classificação em x/y e z (padrão 1.0)."
              },
              "save_filtered": {
                "label": "Salvar filtrados",
                "description": "Se verdadeiro, grava os pontos filtrados e retorna outputs.filtered_path."
              },
              "filtered_output": {
                "label": "Saída filtrada",
                "description": "Caminho opcional de saída para os pontos filtrados no modo de entrada única."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "lidar_tile_footprint": {
            "name": "Contorno dos ladrilhos LiDAR",
            "description": "Gera contornos: caixas delimitadoras alinhadas aos eixos ou envoltórias convexas por nuvem de pontos. Saída em polígonos vetoriais para indexação espacial e catálogo de dados.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho opcional do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa sobre todos os arquivos LiDAR do diretório atual."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída para os contornos."
              },
              "output_hulls": {
                "label": "Saída de envoltórias",
                "description": "Se verdadeiro, grava contornos por envoltória convexa; caso contrário, grava caixas delimitadoras alinhadas aos eixos."
              }
            }
          },
          "lidar_tin_gridding": {
            "name": "Gradeamento TIN LiDAR",
            "description": "Interpolação LiDAR exata via TIN: constrói a triangulação de Delaunay a partir dos pontos e interpola os valores das células a partir dos planos dos triângulos. Respeita as alturas dos pontos, excelente para coberturas irregulares.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Tamanho da célula de saída."
              },
              "max_triangle_edge_length": {
                "label": "Comprimento máximo da aresta do triângulo",
                "description": "Comprimento máximo opcional da aresta do triângulo para suprimir facetas de arestas longas."
              },
              "interpolation_parameter": {
                "label": "Parâmetro de interpolação",
                "description": "Atributo do ponto a interpolar (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Retornos incluídos",
                "description": "Modo de filtragem de retornos: all, first ou last."
              },
              "excluded_classes": {
                "label": "Classes excluídas",
                "description": "Classes a excluir (matriz ou cadeia delimitada por vírgula)."
              },
              "min_elev": {
                "label": "Elevação mínima",
                "description": "Limiar de elevação mínima usado na filtragem de inclusão de pontos."
              },
              "max_elev": {
                "label": "Elevação máxima",
                "description": "Limiar de elevação máxima usado na filtragem de inclusão de pontos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              },
              "triangulation_backend": {
                "label": "Backend de triangulação",
                "description": "Seleção do backend de triangulação: auto, delaunator ou wbtopology."
              },
              "triangulation_auto_threshold": {
                "label": "Limiar automático de triangulação",
                "description": "Quando backend=auto, muda para wbtopology nesta contagem de amostras (padrão desativado; defina explicitamente para ativar)."
              },
              "triangulation_epsilon": {
                "label": "Epsilon de triangulação",
                "description": "Epsilon usado pelo tratamento de duplicatas do backend wbtopology (padrão 1e-12)."
              },
              "triangulation_thin_cell_size": {
                "label": "Tamanho da célula de rarefação da triangulação",
                "description": "Tamanho de célula opcional de pré-rarefação para as amostras de triangulação; valores > 0 ativam a rarefação e 0 a desativa."
              },
              "triangulation_thin_method": {
                "label": "Método de rarefação da triangulação",
                "description": "Método do ponto representativo para a rarefação: nearest_center, min_value ou max_value."
              }
            }
          },
          "colourize_based_on_class": {
            "name": "Colorir com base na classe",
            "description": "Colore os pontos por classe: cores padrão ASPRS (verde=vegetação, marrom=solo, cinza=edificação etc.). Mescla com a intensidade para dar contraste. Visualização da classificação.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "intensity_blending_amount": {
                "label": "Quantidade de mistura de intensidade",
                "description": "Percentual de mistura [0,100] entre a cor da classe e a intensidade."
              },
              "clr_str": {
                "label": "Cadeia de cores",
                "description": "Substituições opcionais de cores de classe, por exemplo '2:(184,167,108);5:#9ab86c'."
              },
              "use_unique_clrs_for_buildings": {
                "label": "Usar cores únicas para edificações",
                "description": "Se verdadeiro, atribui cores únicas aos agrupamentos conectados de edificações."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança usado na coloração dos agrupamentos de edificações."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "colourize_based_on_point_returns": {
            "name": "Colorir com base nos retornos do ponto",
            "description": "Colore os pontos pela ordem de retorno: primeiros/intermediários/últimos retornos usam cores distintas. Visualização da estrutura de pulsos com múltiplos retornos para validação do processamento.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "intensity_blending_amount": {
                "label": "Quantidade de mistura de intensidade",
                "description": "Percentual de mistura [0,100] entre a cor do retorno e a intensidade."
              },
              "only_ret_colour": {
                "label": "Cor de retorno único",
                "description": "Cor para os pontos de retorno único."
              },
              "first_ret_colour": {
                "label": "Cor do primeiro retorno",
                "description": "Cor para os pontos de primeiro retorno em pulsos de múltiplos retornos."
              },
              "intermediate_ret_colour": {
                "label": "Cor dos retornos intermediários",
                "description": "Cor para os pontos de retornos intermediários."
              },
              "last_ret_colour": {
                "label": "Cor do último retorno",
                "description": "Cor para os pontos de último retorno em pulsos de múltiplos retornos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "find_flightline_edge_points": {
            "name": "Encontrar pontos de borda da linha de voo",
            "description": "Filtra os pontos de borda de voo: extrai apenas os pontos nos limites da faixa de aquisição. Controle de qualidade para sobreposição de faixas e efeitos de borda.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "individual_tree_detection": {
            "name": "Detecção de árvores individuais",
            "description": "Identifica topos de árvores: máximos locais na nuvem de pontos filtrada por altura com raio de busca adaptativo. Retorna um shapefile vetorial de pontos com as possíveis localizações dos troncos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "min_search_radius": {
                "label": "Raio de busca mínimo",
                "description": "Raio de busca mínimo em unidades do mapa (padrão 1.0)."
              },
              "min_height": {
                "label": "Altura mínima",
                "description": "Altura mínima para considerar os pontos (padrão 0.0)."
              },
              "max_search_radius": {
                "label": "Raio de busca máximo",
                "description": "Raio de busca máximo; se não definido, usa min_search_radius."
              },
              "max_height": {
                "label": "Altura máxima",
                "description": "Altura máxima; se não definida, usa min_height."
              },
              "only_use_veg": {
                "label": "Usar apenas vegetação",
                "description": "Se verdadeiro, processa apenas as classes de vegetação (padrão true)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do shapefile vetorial de saída."
              }
            }
          },
          "lidar_eigenvalue_features": {
            "name": "Feições de autovalores LiDAR",
            "description": "Deriva feições PCA: autovalores/autovetores das vizinhanças. Descritores de forma (planaridade, linearidade, variância da altura) para análise de nuvens de pontos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho opcional do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "num_neighbours": {
                "label": "Número de vizinhos",
                "description": "Tamanho alvo opcional da vizinhança (excluindo o próprio ponto)."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio de busca máximo opcional para a coleta da vizinhança."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída .eigen no modo de entrada única."
              }
            }
          },
          "lidar_histogram": {
            "name": "Histograma LiDAR",
            "description": "Calcula a distribuição de atributos: histograma de frequência para elevação, intensidade, ângulo de varredura e classe. Percentis recortados para suprimir valores atípicos. Visualização em HTML.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do HTML de saída para o relatório de histograma."
              },
              "parameter": {
                "label": "Parâmetro",
                "description": "Um entre elevation, intensity, scan angle, class ou time."
              },
              "clip_percent": {
                "label": "Percentual de corte",
                "description": "Quantidade de corte por percentil em [0,50] para as caudas inferior/superior."
              }
            }
          },
          "lidar_info": {
            "name": "Informações LiDAR",
            "description": "Gera um relatório resumido de metadados: número de pontos, extensão, faixa de intensidade, histograma de classes, distribuição de retornos. Saída em HTML/texto para documentação dos dados.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do relatório de saída (.html/.txt)."
              },
              "show_point_density": {
                "label": "Mostrar densidade de pontos",
                "description": "Se verdadeiro, inclui métricas aproximadas de densidade de pontos da caixa delimitadora."
              },
              "show_vlrs": {
                "label": "Mostrar VLRs",
                "description": "Indicador de compatibilidade; reservado para futura saída detalhada de metadados."
              },
              "show_geokeys": {
                "label": "Mostrar GeoKeys",
                "description": "Indicador de compatibilidade; reservado para futura saída detalhada de chaves de CRS."
              }
            }
          },
          "lidar_kappa": {
            "name": "Kappa LiDAR",
            "description": "Calcula um relatório de concordância kappa entre duas nuvens LiDAR classificadas e grava um raster de concordância entre classes.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Caminho do LiDAR de classificação ou objeto LiDAR tipado."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do LiDAR de referência ou objeto LiDAR tipado."
              },
              "report": {
                "label": "Relatório",
                "description": "Caminho do relatório HTML de saída."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Resolução da grade para a saída espacial de concordância de classes."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              },
              "output_class_accuracy": {
                "label": "Saída de acurácia por classe",
                "description": "Indicador de compatibilidade mantido por paridade legada; o raster de concordância é sempre produzido."
              }
            }
          },
          "lidar_point_density": {
            "name": "Densidade de pontos LiDAR",
            "description": "Mapeia a intensidade de amostragem LiDAR: número de pontos por unidade de área (contagens dentro do raio por célula). Avaliação da qualidade dos dados, análise de cobertura, visualização do padrão de aquisição.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Tamanho da célula de saída."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança para a contagem de pontos."
              },
              "returns_included": {
                "label": "Retornos incluídos",
                "description": "Modo de filtragem de retornos: all, first ou last."
              },
              "excluded_classes": {
                "label": "Classes excluídas",
                "description": "Classes a excluir (matriz ou cadeia delimitada por vírgula)."
              },
              "min_elev": {
                "label": "Elevação mínima",
                "description": "Limiar de elevação mínima usado na filtragem de inclusão de pontos."
              },
              "max_elev": {
                "label": "Elevação máxima",
                "description": "Limiar de elevação máxima usado na filtragem de inclusão de pontos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "lidar_point_return_analysis": {
            "name": "Análise de retornos de pontos LiDAR",
            "description": "Ferramenta de controle de qualidade: audita a validade da sequência de retornos (consistência múltiplo/primeiro/último). Gera um relatório + saída classificada marcando as anomalias de retorno. Verificação da integridade dos dados.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "create_output": {
                "label": "Criar saída",
                "description": "Se verdadeiro, grava uma saída LiDAR classificada de controle de qualidade."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída LiDAR usado quando create_output=true."
              },
              "report": {
                "label": "Relatório",
                "description": "Caminho opcional de saída do relatório de texto."
              }
            }
          },
          "lidar_point_stats": {
            "name": "Estatísticas de pontos LiDAR",
            "description": "Cria grades de estatísticas raster: número de pontos, número de pulsos, média de pontos/pulso, faixa de z/intensidade e classe predominante por célula. Análise com múltiplas saídas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho opcional do LiDAR de entrada ou objeto LiDAR tipado. Se omitido, executa em modo de lote sobre os arquivos LiDAR do diretório atual."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Resolução da grade de saída."
              },
              "num_points": {
                "label": "Número de pontos",
                "description": "Cria o raster de contagem de pontos."
              },
              "num_pulses": {
                "label": "Número de pulsos",
                "description": "Cria o raster de contagem de pulsos de retornos iniciais."
              },
              "avg_points_per_pulse": {
                "label": "Média de pontos por pulso",
                "description": "Cria o raster de média de pontos por pulso."
              },
              "z_range": {
                "label": "Intervalo Z",
                "description": "Cria o raster de intervalo de elevação."
              },
              "intensity_range": {
                "label": "Intervalo de intensidade",
                "description": "Cria o raster de intervalo de intensidade."
              },
              "predominant_class": {
                "label": "Classe predominante",
                "description": "Cria o raster de classe predominante."
              },
              "output_directory": {
                "label": "Diretório de saída",
                "description": "Diretório de saída opcional para os rasters gerados."
              }
            }
          },
          "lidar_ransac_planes": {
            "name": "Planos RANSAC LiDAR",
            "description": "Identifica pontos LiDAR localmente planares usando ajuste de planos RANSAC na vizinhança.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança para o ajuste local de planos."
              },
              "num_iterations": {
                "label": "Número de iterações",
                "description": "Número de iterações RANSAC por ponto."
              },
              "num_samples": {
                "label": "Número de amostras",
                "description": "Número de pontos vizinhos amostrados por iteração RANSAC."
              },
              "inlier_threshold": {
                "label": "Limiar de inliers",
                "description": "Resíduo máximo ponto-plano para os inliers."
              },
              "acceptable_model_size": {
                "label": "Tamanho aceitável do modelo",
                "description": "Número mínimo de pontos inliers necessário para um modelo planar."
              },
              "max_planar_slope": {
                "label": "Declividade planar máxima",
                "description": "Declividade máxima aceita do plano em graus."
              },
              "classify": {
                "label": "Classificar",
                "description": "Se verdadeiro, classifica os pontos como planares vs não planares em vez de filtrar."
              },
              "only_last_returns": {
                "label": "Apenas últimos retornos",
                "description": "Se verdadeiro, usa apenas retornos tardios no ajuste do modelo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "lidar_rooftop_analysis": {
            "name": "Análise de telhados LiDAR",
            "description": "Identifica segmentos planares de telhados dentro dos contornos de edificações e gera polígonos de segmentos com atributos de telhado.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Caminhos LiDAR de entrada ou objetos LiDAR tipados."
              },
              "building_footprints": {
                "label": "Contornos de edificações",
                "description": "Camada de polígonos de contornos de edificações."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança para a análise local de telhados."
              },
              "inlier_threshold": {
                "label": "Limiar de inliers",
                "description": "Resíduo máximo para o suporte planar local."
              },
              "acceptable_model_size": {
                "label": "Tamanho aceitável do modelo",
                "description": "Tamanho mínimo do segmento."
              },
              "max_planar_slope": {
                "label": "Declividade planar máxima",
                "description": "Declividade máxima das facetas de telhado em graus."
              },
              "norm_diff_threshold": {
                "label": "Limiar de diferença de normais",
                "description": "Diferença angular máxima entre normais vizinhas em graus."
              },
              "azimuth": {
                "label": "Azimute",
                "description": "Azimute da iluminação para a iluminação das facetas no estilo sombreamento do relevo."
              },
              "altitude": {
                "label": "Altitude",
                "description": "Altitude da iluminação para a iluminação das facetas no estilo sombreamento do relevo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída."
              }
            }
          },
          "normal_vectors": {
            "name": "Vetores normais",
            "description": "Calcula as normais da superfície por ponto: a PCA da vizinhança local estima a orientação do plano. As normais são armazenadas nos registros dos pontos e em visualização RGB.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do LiDAR de entrada ou objeto LiDAR tipado."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança para o ajuste local de planos. Valores <= 0 usam um espaçamento nominal estimado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída."
              }
            }
          },
          "snap_events_to_routes": {
            "name": "Ajustar eventos às rotas",
            "description": "Ajusta pontos de eventos às linhas de rota e relata diagnósticos de medida/deslocamento da rota.",
            "params": {
              "routes": {
                "label": "Rotas",
                "description": "Camada de linhas de rotas de entrada."
              },
              "events": {
                "label": "Eventos",
                "description": "Camada de pontos de eventos de entrada."
              },
              "max_offset_distance": {
                "label": "Distância máxima de deslocamento",
                "description": "Distância máxima opcional de deslocamento da rota em unidades do mapa."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de eventos ajustados de saída."
              }
            }
          },
          "locate_points_along_routes": {
            "name": "Localizar pontos ao longo de rotas",
            "description": "Localiza feições de pontos ao longo das linhas de rota e grava atributos de medida da rota.",
            "params": {
              "routes": {
                "label": "Rotas",
                "description": "Camada de linhas de rotas de entrada."
              },
              "points": {
                "label": "Pontos",
                "description": "Camada de pontos de entrada a localizar ao longo das rotas."
              },
              "max_offset_distance": {
                "label": "Distância máxima de deslocamento",
                "description": "Distância máxima opcional de deslocamento ponto-rota."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída."
              }
            }
          },
          "points_along_lines": {
            "name": "Pontos ao longo de linhas",
            "description": "Gera feições de pontos com espaçamento regular ao longo das polilinhas de entrada para monitoramento de infraestrutura, amostragem ambiental e análise espacial.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de linhas de entrada."
              },
              "spacing": {
                "label": "Espaçamento",
                "description": "Distância de espaçamento entre os pontos."
              },
              "include_end": {
                "label": "Incluir fim",
                "description": "Inclui as extremidades das linhas (padrão true)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída."
              }
            }
          },
          "route_calibrate": {
            "name": "Calibrar rota",
            "description": "Calibra as medidas inicial/final das rotas a partir de pontos de controle com medidas conhecidas.",
            "params": {
              "routes": {
                "label": "Rotas",
                "description": "Camada de linhas de rotas de entrada."
              },
              "control_points": {
                "label": "Pontos de controle",
                "description": "Camada de pontos de controle de entrada."
              },
              "control_measure_field": {
                "label": "Campo de medida de controle",
                "description": "Campo dos pontos de controle contendo os valores de medida conhecidos."
              },
              "route_id_field": {
                "label": "Campo de ID da rota",
                "description": "Campo opcional de identificador de rota nas rotas. O padrão é o FID da feição."
              },
              "control_route_id_field": {
                "label": "Campo de ID da rota de controle",
                "description": "Campo opcional de identificador de rota nos pontos de controle. O padrão é o FID da feição."
              },
              "from_measure_field": {
                "label": "Campo de medida inicial",
                "description": "Campo de saída para a medida inicial da rota (padrão 'from_measure')."
              },
              "to_measure_field": {
                "label": "Campo de medida final",
                "description": "Campo de saída para a medida final da rota (padrão 'to_measure')."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Distância máxima de deslocamento dos pontos de controle em relação à geometria da rota (padrão 1.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de rotas calibradas de saída."
              }
            }
          },
          "route_event_lines_from_layer": {
            "name": "Linhas de eventos de rota a partir de camada",
            "description": "Cria eventos de linha roteados a partir de uma camada vetorial de eventos usando medidas de início/fim.",
            "params": {
              "routes": {
                "label": "Rotas",
                "description": "Camada de linhas de rotas de entrada."
              },
              "events": {
                "label": "Eventos",
                "description": "Camada vetorial de eventos de entrada."
              },
              "event_route_field": {
                "label": "Campo de rota do evento",
                "description": "Campo da camada de eventos contendo os identificadores de rota."
              },
              "from_measure_field": {
                "label": "Campo de medida inicial",
                "description": "Campo da camada de eventos contendo as medidas iniciais."
              },
              "to_measure_field": {
                "label": "Campo de medida final",
                "description": "Campo da camada de eventos contendo as medidas finais."
              },
              "route_id_field": {
                "label": "Campo de ID da rota",
                "description": "Campo opcional da camada de rotas contendo os identificadores de rota. O padrão é o FID da feição."
              },
              "write_event_fid": {
                "label": "Gravar FID do evento",
                "description": "Grava EVENT_FID para preservar os IDs das feições de eventos de origem (padrão true)."
              },
              "write_event_xy": {
                "label": "Gravar XY do evento",
                "description": "Grava os atributos X/Y da geometria do evento de origem (padrão false)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de saída."
              }
            }
          },
          "route_event_lines_from_table": {
            "name": "Linhas de eventos de rota a partir de tabela",
            "description": "Cria eventos de linha roteados a partir de uma tabela CSV de eventos e uma camada de rotas usando medidas de início/fim.",
            "params": {
              "routes": {
                "label": "Rotas",
                "description": "Camada de linhas de rotas de entrada."
              },
              "events": {
                "label": "Eventos",
                "description": "Caminho da tabela CSV de eventos de entrada."
              },
              "event_route_field": {
                "label": "Campo de rota do evento",
                "description": "Campo do CSV contendo os identificadores de rota."
              },
              "from_measure_field": {
                "label": "Campo de medida inicial",
                "description": "Campo do CSV contendo as medidas iniciais."
              },
              "to_measure_field": {
                "label": "Campo de medida final",
                "description": "Campo do CSV contendo as medidas finais."
              },
              "route_id_field": {
                "label": "Campo de ID da rota",
                "description": "Campo opcional da camada de rotas contendo os identificadores de rota. O padrão é o FID da feição."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de saída."
              }
            }
          },
          "route_event_merge": {
            "name": "Mesclar eventos de rota",
            "description": "Mescla eventos de rota adjacentes compatíveis.",
            "params": {
              "events": {
                "label": "Eventos",
                "description": "Camada de eventos de entrada contendo os intervalos de rota."
              },
              "event_route_field": {
                "label": "Campo de rota do evento",
                "description": "Campo de identificador de rota da camada de eventos."
              },
              "from_measure_field": {
                "label": "Campo de medida inicial",
                "description": "Campo de início do intervalo da camada de eventos."
              },
              "to_measure_field": {
                "label": "Campo de medida final",
                "description": "Campo de fim do intervalo da camada de eventos."
              },
              "group_fields": {
                "label": "Campos de agrupamento",
                "description": "Campos opcionais delimitados por vírgula usados para a compatibilidade de mesclagem. O padrão são todos os campos que não são de medida."
              },
              "gap_tolerance": {
                "label": "Tolerância de lacuna",
                "description": "Lacuna máxima permitida para a mesclagem por adjacência (padrão 0.0)."
              },
              "conflict_mode": {
                "label": "Modo de conflito",
                "description": "Modo de tratamento de sobreposição: error|skip (padrão error)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de eventos mesclados de saída."
              }
            }
          },
          "route_event_overlay": {
            "name": "Sobrepor eventos de rota",
            "description": "Sobrepõe duas camadas de eventos de rota pela sobreposição de intervalos.",
            "params": {
              "primary_events": {
                "label": "Eventos primários",
                "description": "Camada de eventos primária."
              },
              "overlay_events": {
                "label": "Eventos de sobreposição",
                "description": "Camada de eventos de sobreposição."
              },
              "primary_route_field": {
                "label": "Campo de rota primária",
                "description": "Campo de identificador de rota da camada primária."
              },
              "primary_from_measure_field": {
                "label": "Campo de medida inicial primária",
                "description": "Campo de início do intervalo da camada primária."
              },
              "primary_to_measure_field": {
                "label": "Campo de medida final primária",
                "description": "Campo de fim do intervalo da camada primária."
              },
              "overlay_route_field": {
                "label": "Campo de rota de sobreposição",
                "description": "Campo de identificador de rota da camada de sobreposição."
              },
              "overlay_from_measure_field": {
                "label": "Campo de medida inicial de sobreposição",
                "description": "Campo de início do intervalo da camada de sobreposição."
              },
              "overlay_to_measure_field": {
                "label": "Campo de medida final de sobreposição",
                "description": "Campo de fim do intervalo da camada de sobreposição."
              },
              "min_overlap_length": {
                "label": "Comprimento mínimo de sobreposição",
                "description": "Comprimento mínimo de sobreposição a manter (padrão 0.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de sobreposição de saída."
              }
            }
          },
          "route_event_points_from_layer": {
            "name": "Pontos de eventos de rota a partir de camada",
            "description": "Cria eventos de ponto roteados a partir de uma camada vetorial de eventos e uma camada de rotas.",
            "params": {
              "routes": {
                "label": "Rotas",
                "description": "Camada de linhas de rotas de entrada."
              },
              "events": {
                "label": "Eventos",
                "description": "Camada vetorial de eventos de entrada."
              },
              "event_route_field": {
                "label": "Campo de rota do evento",
                "description": "Campo da camada de eventos contendo os identificadores de rota."
              },
              "measure_field": {
                "label": "Campo de medida",
                "description": "Campo da camada de eventos contendo as medidas dos eventos pontuais."
              },
              "route_id_field": {
                "label": "Campo de ID da rota",
                "description": "Campo opcional da camada de rotas contendo os identificadores de rota. O padrão é o FID da feição."
              },
              "write_event_fid": {
                "label": "Gravar FID do evento",
                "description": "Grava EVENT_FID para preservar os IDs das feições de eventos de origem (padrão true)."
              },
              "write_event_xy": {
                "label": "Gravar XY do evento",
                "description": "Grava os atributos X/Y da geometria do evento de origem (padrão false)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída."
              }
            }
          },
          "route_event_points_from_table": {
            "name": "Pontos de eventos de rota a partir de tabela",
            "description": "Cria eventos de ponto roteados a partir de uma tabela CSV de eventos e uma camada de rotas.",
            "params": {
              "routes": {
                "label": "Rotas",
                "description": "Camada de linhas de rotas de entrada."
              },
              "events": {
                "label": "Eventos",
                "description": "Caminho da tabela CSV de eventos de entrada."
              },
              "event_route_field": {
                "label": "Campo de rota do evento",
                "description": "Campo do CSV contendo os identificadores de rota."
              },
              "measure_field": {
                "label": "Campo de medida",
                "description": "Campo do CSV contendo as medidas dos eventos pontuais."
              },
              "route_id_field": {
                "label": "Campo de ID da rota",
                "description": "Campo opcional da camada de rotas contendo os identificadores de rota. O padrão é o FID da feição."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída."
              }
            }
          },
          "route_event_split": {
            "name": "Dividir eventos de rota",
            "description": "Divide os eventos de rota pelas medidas de limite de cada rota.",
            "params": {
              "events": {
                "label": "Eventos",
                "description": "Camada de eventos de entrada contendo os intervalos de rota."
              },
              "boundaries": {
                "label": "Limites",
                "description": "Camada de limites de entrada contendo os pontos de quebra de medida das rotas."
              },
              "event_route_field": {
                "label": "Campo de rota do evento",
                "description": "Campo de identificador de rota da camada de eventos."
              },
              "from_measure_field": {
                "label": "Campo de medida inicial",
                "description": "Campo de início do intervalo da camada de eventos."
              },
              "to_measure_field": {
                "label": "Campo de medida final",
                "description": "Campo de fim do intervalo da camada de eventos."
              },
              "boundary_route_field": {
                "label": "Campo de rota do limite",
                "description": "Campo de identificador de rota da camada de limites."
              },
              "boundary_measure_field": {
                "label": "Campo de medida do limite",
                "description": "Campo de medida da camada de limites."
              },
              "min_segment_length": {
                "label": "Comprimento mínimo do segmento",
                "description": "Comprimento mínimo opcional do segmento dividido a manter (padrão 0.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de eventos divididos de saída."
              }
            }
          },
          "route_measure_qa": {
            "name": "Controle de qualidade das medidas de rota",
            "description": "Diagnostica lacunas, sobreposições, sequências não monotônicas e medidas duplicadas nas medidas dos eventos de rota.",
            "params": {
              "events": {
                "label": "Eventos",
                "description": "Camada de eventos de entrada contendo os intervalos de rota."
              },
              "route_field": {
                "label": "Campo de rota",
                "description": "Campo de identificador de rota."
              },
              "from_measure_field": {
                "label": "Campo de medida inicial",
                "description": "Campo de início do intervalo."
              },
              "to_measure_field": {
                "label": "Campo de medida final",
                "description": "Campo de fim do intervalo."
              },
              "gap_tolerance": {
                "label": "Tolerância de lacuna",
                "description": "Tolerância de lacuna (padrão 0.0)."
              },
              "overlap_tolerance": {
                "label": "Tolerância de sobreposição",
                "description": "Tolerância de sobreposição (padrão 0.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de diagnósticos de controle de qualidade de saída."
              }
            }
          },
          "route_recalibrate": {
            "name": "Recalibrar rota",
            "description": "Recalibra as medidas de rotas editadas a partir de uma camada de rotas de referência, preservando a continuidade das medidas da rota.",
            "params": {
              "original_routes": {
                "label": "Rotas originais",
                "description": "Rotas de referência contendo as medidas calibradas anteriores."
              },
              "edited_routes": {
                "label": "Rotas editadas",
                "description": "Rotas editadas a recalibrar."
              },
              "route_id_field": {
                "label": "Campo de ID da rota",
                "description": "Campo opcional compartilhado de identificador de rota. O padrão é o FID da feição."
              },
              "from_measure_field": {
                "label": "Campo de medida inicial",
                "description": "Nome do campo de medida inicial (padrão 'from_measure')."
              },
              "to_measure_field": {
                "label": "Campo de medida final",
                "description": "Nome do campo de medida final (padrão 'to_measure')."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de rotas recalibradas de saída."
              }
            }
          },
          "build_network_topology": {
            "name": "Construir topologia de rede",
            "description": "Constrói uma rede topológica de linhas com nós, com saídas estáveis de arestas e nós.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância de ajuste opcional usada ao detectar e dividir interseções."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de arestas topologicamente nodadas de saída."
              },
              "nodes_output": {
                "label": "Saída de nós",
                "description": "Caminho opcional do vetor de nós de saída."
              }
            }
          },
          "closest_facility_network": {
            "name": "Instalação mais próxima na rede",
            "description": "Encontra a rota de rede de menor custo de cada ponto de incidente até o ponto de instalação alcançável mais próximo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "incidents": {
                "label": "Incidentes",
                "description": "Camada de pontos de incidentes/demanda."
              },
              "facilities": {
                "label": "Instalações",
                "description": "Camada de pontos de instalações/oferta."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "max_snap_distance": {
                "label": "Distância máxima de ajuste",
                "description": "Distância máxima opcional dos pontos de incidentes/instalações ao nó de rede mais próximo."
              },
              "edge_cost_field": {
                "label": "Campo de custo da aresta",
                "description": "Campo numérico opcional das linhas usado como multiplicador de impedância para o comprimento do segmento."
              },
              "one_way_field": {
                "label": "Campo de mão única",
                "description": "Campo opcional das linhas que marca arestas digitalizadas de mão única (true/1/yes significa apenas do primeiro ao segundo vértice)."
              },
              "blocked_field": {
                "label": "Campo de bloqueio",
                "description": "Campo opcional das linhas que marca arestas bloqueadas/fechadas a excluir do roteamento (true/1/yes bloqueia)."
              },
              "barriers": {
                "label": "Barreiras",
                "description": "Camada opcional de pontos de barreira; os nós de rede mais próximos são bloqueados para a travessia."
              },
              "barrier_snap_distance": {
                "label": "Distância de ajuste das barreiras",
                "description": "Distância máxima opcional de cada ponto de barreira a um nó de rede para o bloqueio."
              },
              "node_cost_points": {
                "label": "Pontos de custo de nó",
                "description": "Camada de pontos opcional que fornece custos de entrada por nó (por exemplo, atraso em interseções)."
              },
              "node_cost_field": {
                "label": "Campo de custo de nó",
                "description": "Campo numérico em node_cost_points contendo os custos não negativos por nó."
              },
              "node_cost_snap_distance": {
                "label": "Distância de ajuste do custo de nó",
                "description": "Distância máxima opcional de cada ponto de custo de nó a um nó de rede para a atribuição."
              },
              "turn_penalty": {
                "label": "Penalidade de conversão",
                "description": "Custo aditivo opcional aplicado a conversões não retas nos nós da rede."
              },
              "u_turn_penalty": {
                "label": "Penalidade de retorno em U",
                "description": "Custo aditivo opcional aplicado às transições de retorno em U."
              },
              "forbid_u_turns": {
                "label": "Proibir retornos em U",
                "description": "Se verdadeiro, proíbe as transições de retorno em U."
              },
              "forbid_left_turns": {
                "label": "Proibir conversões à esquerda",
                "description": "Se verdadeiro, proíbe as transições de conversão à esquerda."
              },
              "forbid_right_turns": {
                "label": "Proibir conversões à direita",
                "description": "Se verdadeiro, proíbe as transições de conversão à direita."
              },
              "turn_restrictions_csv": {
                "label": "CSV de restrições de conversão",
                "description": "CSV opcional de transições de conversão usando as colunas prev_x,prev_y,node_x,node_y,next_x,next_y. Colunas opcionais: forbidden (padrão true quando nenhuma coluna turn_cost é fornecida) e turn_cost (ou penalty/cost/extra_cost) para o custo aditivo por conversão."
              },
              "temporal_cost_profile": {
                "label": "Perfil de custo temporal",
                "description": "CSV opcional que define custos de aresta dependentes do tempo (colunas: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo de ID da aresta temporal",
                "description": "Campo opcional da rede usado para corresponder os valores edge_id de temporal_cost_profile (padrão EDGE_ID)."
              },
              "departure_time": {
                "label": "Hora de partida",
                "description": "Hora de partida opcional em RFC3339 usada na consulta do perfil temporal."
              },
              "temporal_mode": {
                "label": "Modo temporal",
                "description": "Modo opcional de interpretação temporal: multiplier ou absolute."
              },
              "temporal_fallback": {
                "label": "Alternativa temporal",
                "description": "Alternativa opcional quando a linha temporal está ausente: static_cost ou error."
              },
              "temporal_profile_report": {
                "label": "Relatório do perfil temporal",
                "description": "Caminho opcional de saída JSON para os diagnósticos do perfil temporal (cobertura, arestas sem correspondência, uso da alternativa)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de rota para a instalação mais próxima de saída."
              }
            }
          },
          "generate_network_nodes": {
            "name": "Gerar nós de rede",
            "description": "Gera os nós da rede e diagnósticos dos nós a partir da topologia das linhas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de nós de saída."
              }
            }
          },
          "k_shortest_paths_network": {
            "name": "K caminhos mais curtos na rede",
            "description": "Encontra os k caminhos simples mais curtos entre as coordenadas de início e fim em uma rede de linhas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "start_x": {
                "label": "X inicial",
                "description": "Coordenada x inicial."
              },
              "start_y": {
                "label": "Y inicial",
                "description": "Coordenada y inicial."
              },
              "end_x": {
                "label": "X final",
                "description": "Coordenada x final."
              },
              "end_y": {
                "label": "Y final",
                "description": "Coordenada y final."
              },
              "k": {
                "label": "K",
                "description": "Número de caminhos mais curtos a retornar."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "max_snap_distance": {
                "label": "Distância máxima de ajuste",
                "description": "Distância máxima opcional das coordenadas de início/fim ao nó de rede mais próximo."
              },
              "edge_cost_field": {
                "label": "Campo de custo da aresta",
                "description": "Campo numérico opcional das linhas usado como multiplicador de impedância para o comprimento do segmento."
              },
              "one_way_field": {
                "label": "Campo de mão única",
                "description": "Campo opcional das linhas que marca arestas digitalizadas de mão única (true/1/yes significa apenas do primeiro ao segundo vértice)."
              },
              "blocked_field": {
                "label": "Campo de bloqueio",
                "description": "Campo opcional das linhas que marca arestas bloqueadas/fechadas a excluir do roteamento (true/1/yes bloqueia)."
              },
              "barriers": {
                "label": "Barreiras",
                "description": "Camada opcional de pontos de barreira; os nós de rede mais próximos são bloqueados para a travessia."
              },
              "barrier_snap_distance": {
                "label": "Distância de ajuste das barreiras",
                "description": "Distância máxima opcional de cada ponto de barreira a um nó de rede para o bloqueio."
              },
              "node_cost_points": {
                "label": "Pontos de custo de nó",
                "description": "Camada de pontos opcional que fornece custos de entrada por nó (por exemplo, atraso em interseções)."
              },
              "node_cost_field": {
                "label": "Campo de custo de nó",
                "description": "Campo numérico em node_cost_points contendo os custos não negativos por nó."
              },
              "node_cost_snap_distance": {
                "label": "Distância de ajuste do custo de nó",
                "description": "Distância máxima opcional de cada ponto de custo de nó a um nó de rede para a atribuição."
              },
              "turn_penalty": {
                "label": "Penalidade de conversão",
                "description": "Custo aditivo opcional aplicado a conversões não retas nos nós da rede."
              },
              "u_turn_penalty": {
                "label": "Penalidade de retorno em U",
                "description": "Custo aditivo opcional aplicado às transições de retorno em U."
              },
              "forbid_u_turns": {
                "label": "Proibir retornos em U",
                "description": "Se verdadeiro, proíbe as transições de retorno em U."
              },
              "forbid_left_turns": {
                "label": "Proibir conversões à esquerda",
                "description": "Se verdadeiro, proíbe as transições de conversão à esquerda."
              },
              "forbid_right_turns": {
                "label": "Proibir conversões à direita",
                "description": "Se verdadeiro, proíbe as transições de conversão à direita."
              },
              "turn_restrictions_csv": {
                "label": "CSV de restrições de conversão",
                "description": "CSV opcional de transições de conversão usando as colunas prev_x,prev_y,node_x,node_y,next_x,next_y. Colunas opcionais: forbidden (padrão true quando nenhuma coluna turn_cost é fornecida) e turn_cost (ou penalty/cost/extra_cost) para o custo aditivo por conversão."
              },
              "temporal_cost_profile": {
                "label": "Perfil de custo temporal",
                "description": "CSV opcional que define custos de aresta dependentes do tempo (colunas: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo de ID da aresta temporal",
                "description": "Campo opcional da rede usado para corresponder os valores edge_id de temporal_cost_profile (padrão EDGE_ID)."
              },
              "departure_time": {
                "label": "Hora de partida",
                "description": "Hora de partida opcional em RFC3339 usada na consulta do perfil temporal."
              },
              "temporal_mode": {
                "label": "Modo temporal",
                "description": "Modo opcional de interpretação temporal: multiplier ou absolute."
              },
              "temporal_fallback": {
                "label": "Alternativa temporal",
                "description": "Alternativa opcional quando a linha temporal está ausente: static_cost ou error."
              },
              "temporal_profile_report": {
                "label": "Relatório do perfil temporal",
                "description": "Caminho opcional de saída JSON para os diagnósticos do perfil temporal (cobertura, arestas sem correspondência, uso da alternativa)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de saída."
              }
            }
          },
          "location_allocation_network": {
            "name": "Localização-alocação na rede",
            "description": "Seleciona k instalações e aloca os pontos de demanda pelo custo na rede com resolução gulosa ou exata, capacidades opcionais e restrições de candidatos obrigatórios/proibidos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "demand_points": {
                "label": "Pontos de demanda",
                "description": "Camada de pontos de demanda a alocar."
              },
              "facilities": {
                "label": "Instalações",
                "description": "Camada de pontos de instalações candidatas."
              },
              "facility_count": {
                "label": "Número de instalações",
                "description": "Número de instalações a selecionar (k)."
              },
              "solver_mode": {
                "label": "Modo do solucionador",
                "description": "Modo do solucionador: auto, greedy ou exact (exact destina-se a problemas menores)."
              },
              "demand_weight_field": {
                "label": "Campo de peso da demanda",
                "description": "Campo numérico opcional de peso da demanda em demand_points (padrão weight=1)."
              },
              "facility_capacity_field": {
                "label": "Campo de capacidade da instalação",
                "description": "Campo numérico opcional de capacidade nas instalações; a capacidade é consumida pelos valores de demand_weight_field."
              },
              "required_facility_field": {
                "label": "Campo de instalação obrigatória",
                "description": "Campo booleano opcional das instalações que marca candidatas que devem ser selecionadas."
              },
              "forbidden_facility_field": {
                "label": "Campo de instalação proibida",
                "description": "Campo booleano opcional das instalações que marca candidatas que não devem ser selecionadas."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "max_snap_distance": {
                "label": "Distância máxima de ajuste",
                "description": "Distância máxima opcional dos pontos de demanda/instalações ao nó de rede mais próximo."
              },
              "edge_cost_field": {
                "label": "Campo de custo da aresta",
                "description": "Campo numérico opcional das linhas usado como multiplicador de impedância para o comprimento do segmento."
              },
              "one_way_field": {
                "label": "Campo de mão única",
                "description": "Campo opcional das linhas que marca arestas digitalizadas de mão única (true/1/yes significa apenas do primeiro ao segundo vértice)."
              },
              "blocked_field": {
                "label": "Campo de bloqueio",
                "description": "Campo opcional das linhas que marca arestas bloqueadas/fechadas a excluir do roteamento (true/1/yes bloqueia)."
              },
              "barriers": {
                "label": "Barreiras",
                "description": "Camada opcional de pontos de barreira; os nós de rede mais próximos são bloqueados para a travessia."
              },
              "barrier_snap_distance": {
                "label": "Distância de ajuste das barreiras",
                "description": "Distância máxima opcional de cada ponto de barreira a um nó de rede para o bloqueio."
              },
              "node_cost_points": {
                "label": "Pontos de custo de nó",
                "description": "Camada de pontos opcional que fornece custos de entrada por nó (por exemplo, atraso em interseções)."
              },
              "node_cost_field": {
                "label": "Campo de custo de nó",
                "description": "Campo numérico em node_cost_points contendo os custos não negativos por nó."
              },
              "node_cost_snap_distance": {
                "label": "Distância de ajuste do custo de nó",
                "description": "Distância máxima opcional de cada ponto de custo de nó a um nó de rede para a atribuição."
              },
              "turn_penalty": {
                "label": "Penalidade de conversão",
                "description": "Custo aditivo opcional aplicado a conversões não retas nos nós da rede."
              },
              "u_turn_penalty": {
                "label": "Penalidade de retorno em U",
                "description": "Custo aditivo opcional aplicado às transições de retorno em U."
              },
              "forbid_u_turns": {
                "label": "Proibir retornos em U",
                "description": "Se verdadeiro, proíbe as transições de retorno em U."
              },
              "forbid_left_turns": {
                "label": "Proibir conversões à esquerda",
                "description": "Se verdadeiro, proíbe as transições de conversão à esquerda."
              },
              "forbid_right_turns": {
                "label": "Proibir conversões à direita",
                "description": "Se verdadeiro, proíbe as transições de conversão à direita."
              },
              "turn_restrictions_csv": {
                "label": "CSV de restrições de conversão",
                "description": "CSV opcional de transições de conversão usando as colunas prev_x,prev_y,node_x,node_y,next_x,next_y. Colunas opcionais: forbidden (padrão true quando nenhuma coluna turn_cost é fornecida) e turn_cost (ou penalty/cost/extra_cost) para o custo aditivo por conversão."
              },
              "temporal_cost_profile": {
                "label": "Perfil de custo temporal",
                "description": "CSV opcional que define custos de aresta dependentes do tempo (colunas: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo de ID da aresta temporal",
                "description": "Campo opcional da rede usado para corresponder os valores edge_id de temporal_cost_profile (padrão EDGE_ID)."
              },
              "departure_time": {
                "label": "Hora de partida",
                "description": "Hora de partida opcional em RFC3339 usada na consulta do perfil temporal."
              },
              "temporal_mode": {
                "label": "Modo temporal",
                "description": "Modo opcional de interpretação temporal: multiplier ou absolute."
              },
              "temporal_fallback": {
                "label": "Alternativa temporal",
                "description": "Alternativa opcional quando a linha temporal está ausente: static_cost ou error."
              },
              "temporal_profile_report": {
                "label": "Relatório do perfil temporal",
                "description": "Caminho opcional de saída JSON para os diagnósticos do perfil temporal (cobertura, arestas sem correspondência, uso da alternativa)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de rotas alocadas de saída."
              }
            }
          },
          "map_matching_v1": {
            "name": "Casamento de mapa v1",
            "description": "Ajusta pontos de trajetória a uma rede de linhas e reconstrói uma rota inferida com diagnósticos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "trajectory_points": {
                "label": "Pontos da trajetória",
                "description": "Camada de pontos de trajetória de entrada."
              },
              "timestamp_field": {
                "label": "Campo de carimbo de tempo",
                "description": "Campo da trajetória usado para a ordenação temporal."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio de busca opcional de candidatos em torno de cada ponto da trajetória."
              },
              "candidate_k": {
                "label": "K candidatos",
                "description": "Número opcional de candidatos mais próximos retidos por ponto."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "max_snap_distance": {
                "label": "Distância máxima de ajuste",
                "description": "Distância máxima opcional para ajustar os pontos da trajetória aos nós da rede."
              },
              "edge_cost_field": {
                "label": "Campo de custo da aresta",
                "description": "Campo numérico opcional das linhas usado como multiplicador de impedância para o comprimento do segmento."
              },
              "one_way_field": {
                "label": "Campo de mão única",
                "description": "Campo opcional das linhas que marca arestas digitalizadas de mão única (suporta FT/TF/B mais valores booleanos legados)."
              },
              "blocked_field": {
                "label": "Campo de bloqueio",
                "description": "Campo opcional das linhas que marca arestas bloqueadas/fechadas a excluir do roteamento (true/1/yes bloqueia)."
              },
              "barriers": {
                "label": "Barreiras",
                "description": "Camada opcional de pontos de barreira; os nós de rede mais próximos são bloqueados para a travessia."
              },
              "barrier_snap_distance": {
                "label": "Distância de ajuste das barreiras",
                "description": "Distância máxima opcional de cada ponto de barreira a um nó de rede para o bloqueio."
              },
              "node_cost_points": {
                "label": "Pontos de custo de nó",
                "description": "Camada de pontos opcional que fornece custos de entrada por nó (por exemplo, atraso em interseções)."
              },
              "node_cost_field": {
                "label": "Campo de custo de nó",
                "description": "Campo numérico em node_cost_points contendo os custos não negativos por nó."
              },
              "node_cost_snap_distance": {
                "label": "Distância de ajuste do custo de nó",
                "description": "Distância máxima opcional de cada ponto de custo de nó a um nó de rede para a atribuição."
              },
              "turn_penalty": {
                "label": "Penalidade de conversão",
                "description": "Custo aditivo opcional aplicado a conversões não retas nos nós da rede."
              },
              "u_turn_penalty": {
                "label": "Penalidade de retorno em U",
                "description": "Custo aditivo opcional aplicado às transições de retorno em U."
              },
              "forbid_u_turns": {
                "label": "Proibir retornos em U",
                "description": "Se verdadeiro, proíbe as transições de retorno em U."
              },
              "forbid_left_turns": {
                "label": "Proibir conversões à esquerda",
                "description": "Se verdadeiro, proíbe as transições de conversão à esquerda."
              },
              "forbid_right_turns": {
                "label": "Proibir conversões à direita",
                "description": "Se verdadeiro, proíbe as transições de conversão à direita."
              },
              "turn_restrictions_csv": {
                "label": "CSV de restrições de conversão",
                "description": "CSV opcional de transições de conversão usando as colunas prev_x,prev_y,node_x,node_y,next_x,next_y. Colunas opcionais: forbidden (padrão true quando nenhuma coluna turn_cost é fornecida) e turn_cost (ou penalty/cost/extra_cost) para o custo aditivo por conversão."
              },
              "matched_points_output": {
                "label": "Saída de pontos correspondidos",
                "description": "Caminho opcional do vetor de saída para os diagnósticos por ponto."
              },
              "match_report": {
                "label": "Relatório de correspondência",
                "description": "Caminho opcional de saída JSON para os diagnósticos de resumo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de saída para a rota inferida."
              }
            }
          },
          "multimodal_od_cost_matrix": {
            "name": "Matriz de custo OD multimodal",
            "description": "Calcula em lote os custos OD multimodais e os resumos por modo entre conjuntos de pontos de origem e destino.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "origins": {
                "label": "Origens",
                "description": "Camada de pontos de origem."
              },
              "destinations": {
                "label": "Destinos",
                "description": "Camada de pontos de destino."
              },
              "mode_field": {
                "label": "Campo de modo",
                "description": "Campo de atributo das linhas que identifica o modo de deslocamento por segmento."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "max_snap_distance": {
                "label": "Distância máxima de ajuste",
                "description": "Distância máxima opcional dos pontos de origem/destino ao nó de rede mais próximo."
              },
              "default_mode_speed": {
                "label": "Velocidade padrão do modo",
                "description": "Velocidade padrão do modo em unidades de coordenadas por unidade de tempo (padrão: 1)."
              },
              "mode_speed_overrides": {
                "label": "Substituições de velocidade por modo",
                "description": "Substituições opcionais modo:velocidade separadas por vírgula (por exemplo: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Modos permitidos",
                "description": "Lista de permissões opcional de modos separados por vírgula a incluir no roteamento."
              },
              "transfer_penalty": {
                "label": "Penalidade de transferência",
                "description": "Penalidade aditiva opcional aplicada cada vez que a rota muda de modo."
              },
              "temporal_cost_profile": {
                "label": "Perfil de custo temporal",
                "description": "CSV opcional que define custos de aresta dependentes do tempo (colunas: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo de ID da aresta temporal",
                "description": "Campo opcional da rede usado para corresponder os valores edge_id de temporal_cost_profile (padrão EDGE_ID)."
              },
              "departure_time": {
                "label": "Hora de partida",
                "description": "Hora de partida opcional em RFC3339 usada na consulta do perfil temporal."
              },
              "temporal_mode": {
                "label": "Modo temporal",
                "description": "Modo opcional de interpretação temporal: multiplier ou absolute."
              },
              "temporal_fallback": {
                "label": "Alternativa temporal",
                "description": "Alternativa opcional quando a linha temporal está ausente: static_cost ou error."
              },
              "temporal_profile_report": {
                "label": "Relatório do perfil temporal",
                "description": "Caminho opcional de saída JSON para os diagnósticos do perfil temporal ao usar entrada temporal direta."
              },
              "scenario_bundle_csv": {
                "label": "CSV do pacote de cenários",
                "description": "CSV opcional que lista cenários temporais nomeados para a saída OD comparativa de múltiplos cenários."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de saída."
              }
            }
          },
          "multimodal_routes_from_od": {
            "name": "Rotas multimodais a partir de OD",
            "description": "Constrói geometrias de rota para pares de pontos origem-destino multimodais com resumos por modo para cada rota.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "origins": {
                "label": "Origens",
                "description": "Camada de pontos de origem."
              },
              "destinations": {
                "label": "Destinos",
                "description": "Camada de pontos de destino."
              },
              "mode_field": {
                "label": "Campo de modo",
                "description": "Campo de atributo das linhas que identifica o modo de deslocamento por segmento."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "max_snap_distance": {
                "label": "Distância máxima de ajuste",
                "description": "Distância máxima opcional dos pontos de origem/destino ao nó de rede mais próximo."
              },
              "default_mode_speed": {
                "label": "Velocidade padrão do modo",
                "description": "Velocidade padrão do modo em unidades de coordenadas por unidade de tempo (padrão: 1)."
              },
              "mode_speed_overrides": {
                "label": "Substituições de velocidade por modo",
                "description": "Substituições opcionais modo:velocidade separadas por vírgula (por exemplo: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Modos permitidos",
                "description": "Lista de permissões opcional de modos separados por vírgula a incluir no roteamento."
              },
              "transfer_penalty": {
                "label": "Penalidade de transferência",
                "description": "Penalidade aditiva opcional aplicada cada vez que a rota muda de modo."
              },
              "temporal_cost_profile": {
                "label": "Perfil de custo temporal",
                "description": "CSV opcional que define custos de aresta dependentes do tempo (colunas: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo de ID da aresta temporal",
                "description": "Campo opcional da rede usado para corresponder os valores edge_id de temporal_cost_profile (padrão EDGE_ID)."
              },
              "departure_time": {
                "label": "Hora de partida",
                "description": "Hora de partida opcional em RFC3339 usada na consulta do perfil temporal."
              },
              "temporal_mode": {
                "label": "Modo temporal",
                "description": "Modo opcional de interpretação temporal: multiplier ou absolute."
              },
              "temporal_fallback": {
                "label": "Alternativa temporal",
                "description": "Alternativa opcional quando a linha temporal está ausente: static_cost ou error."
              },
              "temporal_profile_report": {
                "label": "Relatório do perfil temporal",
                "description": "Caminho opcional de saída JSON para os diagnósticos do perfil temporal ao usar entrada temporal direta."
              },
              "scenario_bundle_csv": {
                "label": "CSV do pacote de cenários",
                "description": "CSV opcional que lista cenários temporais nomeados para a saída de rotas comparativa de múltiplos cenários."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de rota de saída."
              }
            }
          },
          "multimodal_shortest_path": {
            "name": "Caminho multimodal mais curto",
            "description": "Encontra um caminho mais curto sensível ao modo em uma rede de linhas com penalidades de transferência configuráveis.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "start_x": {
                "label": "X inicial",
                "description": "Coordenada x inicial."
              },
              "start_y": {
                "label": "Y inicial",
                "description": "Coordenada y inicial."
              },
              "end_x": {
                "label": "X final",
                "description": "Coordenada x final."
              },
              "end_y": {
                "label": "Y final",
                "description": "Coordenada y final."
              },
              "mode_field": {
                "label": "Campo de modo",
                "description": "Campo de atributo das linhas que identifica o modo de deslocamento por segmento."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "max_snap_distance": {
                "label": "Distância máxima de ajuste",
                "description": "Distância máxima opcional das coordenadas de início/fim ao nó de rede mais próximo."
              },
              "default_mode_speed": {
                "label": "Velocidade padrão do modo",
                "description": "Velocidade padrão do modo em unidades de coordenadas por unidade de tempo (padrão: 1)."
              },
              "mode_speed_overrides": {
                "label": "Substituições de velocidade por modo",
                "description": "Substituições opcionais modo:velocidade separadas por vírgula (por exemplo: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Modos permitidos",
                "description": "Lista de permissões opcional de modos separados por vírgula a incluir no roteamento."
              },
              "transfer_penalty": {
                "label": "Penalidade de transferência",
                "description": "Penalidade aditiva opcional aplicada cada vez que a rota muda de modo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de saída."
              }
            }
          },
          "network_accessibility_metrics": {
            "name": "Métricas de acessibilidade da rede",
            "description": "Calcula índices de acessibilidade para pontos de origem com base na alcançabilidade dos destinos, com limites de impedância e funções de decaimento opcionais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "origins": {
                "label": "Origens",
                "description": "Camada de pontos de origem."
              },
              "destinations": {
                "label": "Destinos",
                "description": "Camada de pontos de destino."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "max_snap_distance": {
                "label": "Distância máxima de ajuste",
                "description": "Distância máxima opcional dos pontos de origem/destino ao nó de rede mais próximo."
              },
              "impedance_cutoff": {
                "label": "Corte de impedância",
                "description": "Limiar opcional de distância máxima para contar os destinos alcançáveis (padrão: infinito)."
              },
              "decay_function": {
                "label": "Função de decaimento",
                "description": "Função de decaimento opcional: 'none' (padrão), 'linear' ou 'exponential' para acessibilidade ponderada pela distância."
              },
              "decay_parameter": {
                "label": "Parâmetro de decaimento",
                "description": "Parâmetro de decaimento opcional (lambda para exponencial, taxa para linear)."
              },
              "edge_cost_field": {
                "label": "Campo de custo da aresta",
                "description": "Campo numérico opcional das linhas usado como multiplicador de impedância para o comprimento do segmento."
              },
              "one_way_field": {
                "label": "Campo de mão única",
                "description": "Campo opcional das linhas que marca arestas digitalizadas de mão única (suporta FT/TF/B mais valores booleanos legados)."
              },
              "blocked_field": {
                "label": "Campo de bloqueio",
                "description": "Campo opcional das linhas que marca arestas bloqueadas/fechadas a excluir do roteamento (true/1/yes bloqueia)."
              },
              "node_cost_points": {
                "label": "Pontos de custo de nó",
                "description": "Camada de pontos opcional que fornece custos de entrada por nó (por exemplo, atraso em interseções)."
              },
              "node_cost_field": {
                "label": "Campo de custo de nó",
                "description": "Campo numérico em node_cost_points contendo os custos não negativos por nó."
              },
              "node_cost_snap_distance": {
                "label": "Distância de ajuste do custo de nó",
                "description": "Distância máxima opcional de cada ponto de custo de nó a um nó de rede para a atribuição."
              },
              "parallel_execution": {
                "label": "Execução paralela",
                "description": "Se verdadeiro (padrão), avalia as origens em paralelo para um cálculo de acessibilidade mais rápido."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída (origens com métricas de acessibilidade)."
              }
            }
          },
          "network_centrality_metrics": {
            "name": "Métricas de centralidade da rede",
            "description": "Calcula métricas básicas de centralidade de grau, proximidade e intermediação para os nós da rede.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "edge_cost_field": {
                "label": "Campo de custo da aresta",
                "description": "Campo numérico opcional das linhas usado como multiplicador de impedância para o comprimento do segmento."
              },
              "one_way_field": {
                "label": "Campo de mão única",
                "description": "Campo opcional das linhas que marca arestas digitalizadas de mão única (suporta FT/TF/B mais valores booleanos legados)."
              },
              "blocked_field": {
                "label": "Campo de bloqueio",
                "description": "Campo opcional das linhas que marca arestas bloqueadas/fechadas a excluir da construção do grafo (true/1/yes bloqueia)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída."
              }
            }
          },
          "network_connected_components": {
            "name": "Componentes conexos da rede",
            "description": "Atribui um ID de componente conectado a cada feição de linha em uma rede.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de saída."
              }
            }
          },
          "network_node_degree": {
            "name": "Grau dos nós da rede",
            "description": "Extrai os nós da rede a partir das feições de linha e calcula o grau e o tipo dos nós.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída."
              }
            }
          },
          "network_od_cost_matrix": {
            "name": "Matriz de custo OD da rede",
            "description": "Calcula os custos de caminho mais curto origem-destino em uma rede de linhas e grava uma matriz CSV.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "origins": {
                "label": "Origens",
                "description": "Camada de pontos de origem."
              },
              "destinations": {
                "label": "Destinos",
                "description": "Camada de pontos de destino."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "max_snap_distance": {
                "label": "Distância máxima de ajuste",
                "description": "Distância máxima opcional dos pontos de origem/destino ao nó de rede mais próximo."
              },
              "edge_cost_field": {
                "label": "Campo de custo da aresta",
                "description": "Campo numérico opcional das linhas usado como multiplicador de impedância para o comprimento do segmento."
              },
              "one_way_field": {
                "label": "Campo de mão única",
                "description": "Campo opcional das linhas que marca arestas digitalizadas de mão única (suporta FT/TF/B mais valores booleanos legados)."
              },
              "blocked_field": {
                "label": "Campo de bloqueio",
                "description": "Campo opcional das linhas que marca arestas bloqueadas/fechadas a excluir do roteamento (true/1/yes bloqueia)."
              },
              "barriers": {
                "label": "Barreiras",
                "description": "Camada opcional de pontos de barreira; os nós de rede mais próximos são bloqueados para a travessia."
              },
              "barrier_snap_distance": {
                "label": "Distância de ajuste das barreiras",
                "description": "Distância máxima opcional de cada ponto de barreira a um nó de rede para o bloqueio."
              },
              "node_cost_points": {
                "label": "Pontos de custo de nó",
                "description": "Camada de pontos opcional que fornece custos de entrada por nó (por exemplo, atraso em interseções)."
              },
              "node_cost_field": {
                "label": "Campo de custo de nó",
                "description": "Campo numérico em node_cost_points contendo os custos não negativos por nó."
              },
              "node_cost_snap_distance": {
                "label": "Distância de ajuste do custo de nó",
                "description": "Distância máxima opcional de cada ponto de custo de nó a um nó de rede para a atribuição."
              },
              "turn_penalty": {
                "label": "Penalidade de conversão",
                "description": "Custo aditivo opcional aplicado a conversões não retas nos nós da rede."
              },
              "u_turn_penalty": {
                "label": "Penalidade de retorno em U",
                "description": "Custo aditivo opcional aplicado às transições de retorno em U."
              },
              "forbid_u_turns": {
                "label": "Proibir retornos em U",
                "description": "Se verdadeiro, proíbe as transições de retorno em U."
              },
              "forbid_left_turns": {
                "label": "Proibir conversões à esquerda",
                "description": "Se verdadeiro, proíbe as transições de conversão à esquerda."
              },
              "forbid_right_turns": {
                "label": "Proibir conversões à direita",
                "description": "Se verdadeiro, proíbe as transições de conversão à direita."
              },
              "turn_restrictions_csv": {
                "label": "CSV de restrições de conversão",
                "description": "CSV opcional de transições de conversão usando as colunas prev_x,prev_y,node_x,node_y,next_x,next_y. Colunas opcionais: forbidden (padrão true quando nenhuma coluna turn_cost é fornecida) e turn_cost (ou penalty/cost/extra_cost) para o custo aditivo por conversão."
              },
              "temporal_cost_profile": {
                "label": "Perfil de custo temporal",
                "description": "CSV opcional que define custos de aresta dependentes do tempo (colunas: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo de ID da aresta temporal",
                "description": "Campo opcional da rede usado para corresponder os valores edge_id de temporal_cost_profile (padrão EDGE_ID)."
              },
              "departure_time": {
                "label": "Hora de partida",
                "description": "Hora de partida opcional em RFC3339 usada na consulta do perfil temporal."
              },
              "temporal_mode": {
                "label": "Modo temporal",
                "description": "Modo opcional de interpretação temporal: multiplier ou absolute."
              },
              "temporal_fallback": {
                "label": "Alternativa temporal",
                "description": "Alternativa opcional quando a linha temporal está ausente: static_cost ou error."
              },
              "temporal_profile_report": {
                "label": "Relatório do perfil temporal",
                "description": "Caminho opcional de saída JSON para os diagnósticos do perfil temporal (cobertura, arestas sem correspondência, uso da alternativa)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de saída."
              }
            }
          },
          "network_routes_from_od": {
            "name": "Rotas da rede a partir de OD",
            "description": "Constrói geometrias de rota para pares de pontos origem-destino em uma rede de linhas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "origins": {
                "label": "Origens",
                "description": "Camada de pontos de origem."
              },
              "destinations": {
                "label": "Destinos",
                "description": "Camada de pontos de destino."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "max_snap_distance": {
                "label": "Distância máxima de ajuste",
                "description": "Distância máxima opcional dos pontos de origem/destino ao nó de rede mais próximo."
              },
              "edge_cost_field": {
                "label": "Campo de custo da aresta",
                "description": "Campo numérico opcional das linhas usado como multiplicador de impedância para o comprimento do segmento."
              },
              "one_way_field": {
                "label": "Campo de mão única",
                "description": "Campo opcional das linhas que marca arestas digitalizadas de mão única (suporta FT/TF/B mais valores booleanos legados)."
              },
              "blocked_field": {
                "label": "Campo de bloqueio",
                "description": "Campo opcional das linhas que marca arestas bloqueadas/fechadas a excluir do roteamento (true/1/yes bloqueia)."
              },
              "barriers": {
                "label": "Barreiras",
                "description": "Camada opcional de pontos de barreira; os nós de rede mais próximos são bloqueados para a travessia."
              },
              "barrier_snap_distance": {
                "label": "Distância de ajuste das barreiras",
                "description": "Distância máxima opcional de cada ponto de barreira a um nó de rede para o bloqueio."
              },
              "node_cost_points": {
                "label": "Pontos de custo de nó",
                "description": "Camada de pontos opcional que fornece custos de entrada por nó (por exemplo, atraso em interseções)."
              },
              "node_cost_field": {
                "label": "Campo de custo de nó",
                "description": "Campo numérico em node_cost_points contendo os custos não negativos por nó."
              },
              "node_cost_snap_distance": {
                "label": "Distância de ajuste do custo de nó",
                "description": "Distância máxima opcional de cada ponto de custo de nó a um nó de rede para a atribuição."
              },
              "turn_penalty": {
                "label": "Penalidade de conversão",
                "description": "Custo aditivo opcional aplicado a conversões não retas nos nós da rede."
              },
              "u_turn_penalty": {
                "label": "Penalidade de retorno em U",
                "description": "Custo aditivo opcional aplicado às transições de retorno em U."
              },
              "forbid_u_turns": {
                "label": "Proibir retornos em U",
                "description": "Se verdadeiro, proíbe as transições de retorno em U."
              },
              "forbid_left_turns": {
                "label": "Proibir conversões à esquerda",
                "description": "Se verdadeiro, proíbe as transições de conversão à esquerda."
              },
              "forbid_right_turns": {
                "label": "Proibir conversões à direita",
                "description": "Se verdadeiro, proíbe as transições de conversão à direita."
              },
              "turn_restrictions_csv": {
                "label": "CSV de restrições de conversão",
                "description": "CSV opcional de transições de conversão usando as colunas prev_x,prev_y,node_x,node_y,next_x,next_y. Colunas opcionais: forbidden (padrão true quando nenhuma coluna turn_cost é fornecida) e turn_cost (ou penalty/cost/extra_cost) para o custo aditivo por conversão."
              },
              "temporal_cost_profile": {
                "label": "Perfil de custo temporal",
                "description": "CSV opcional que define custos de aresta dependentes do tempo (colunas: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo de ID da aresta temporal",
                "description": "Campo opcional da rede usado para corresponder os valores edge_id de temporal_cost_profile (padrão EDGE_ID)."
              },
              "departure_time": {
                "label": "Hora de partida",
                "description": "Hora de partida opcional em RFC3339 usada na consulta do perfil temporal."
              },
              "temporal_mode": {
                "label": "Modo temporal",
                "description": "Modo opcional de interpretação temporal: multiplier ou absolute."
              },
              "temporal_fallback": {
                "label": "Alternativa temporal",
                "description": "Alternativa opcional quando a linha temporal está ausente: static_cost ou error."
              },
              "temporal_profile_report": {
                "label": "Relatório do perfil temporal",
                "description": "Caminho opcional de saída JSON para os diagnósticos do perfil temporal (cobertura, arestas sem correspondência, uso da alternativa)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de rota de saída."
              }
            }
          },
          "network_service_area": {
            "name": "Área de serviço da rede",
            "description": "Calcula os nós da rede alcançáveis a partir de pontos de origem dentro de um custo máximo na rede.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "origins": {
                "label": "Origens",
                "description": "Camada de pontos de origem."
              },
              "max_cost": {
                "label": "Custo máximo",
                "description": "Custo máximo de caminho alcançável."
              },
              "ring_costs": {
                "label": "Custos dos anéis",
                "description": "Limiares de anéis opcionais separados por vírgula para saídas de múltiplos anéis (por exemplo: 5,10,15)."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "max_snap_distance": {
                "label": "Distância máxima de ajuste",
                "description": "Distância máxima opcional dos pontos de origem ao nó de rede mais próximo."
              },
              "output_mode": {
                "label": "Modo de saída",
                "description": "Modo de saída: 'nodes' (padrão), 'edges' para segmentos de arestas alcançáveis aparados pelo custo, ou 'polygons' para polígonos por origem do tipo isócrona a partir dos envelopes das arestas alcançáveis."
              },
              "polygon_merge_origins": {
                "label": "Mesclar origens dos polígonos",
                "description": "Se verdadeiro e output_mode='polygons', dissolve os polígonos de origem sobrepostos em cobertura mesclada por anel em vez de emitir um polígono por origem."
              },
              "mode_field": {
                "label": "Campo de modo",
                "description": "Campo de atributo opcional das linhas que identifica o modo de deslocamento por segmento; ativa custos de área de serviço sensíveis ao modo."
              },
              "default_mode_speed": {
                "label": "Velocidade padrão do modo",
                "description": "Velocidade padrão do modo em unidades de coordenadas por unidade de tempo quando mode_field é fornecido (padrão: 1)."
              },
              "mode_speed_overrides": {
                "label": "Substituições de velocidade por modo",
                "description": "Substituições opcionais modo:velocidade separadas por vírgula (por exemplo: walk:1.4,drive:12)."
              },
              "allowed_modes": {
                "label": "Modos permitidos",
                "description": "Lista de permissões opcional de modos separados por vírgula a incluir quando mode_field é fornecido."
              },
              "edge_cost_field": {
                "label": "Campo de custo da aresta",
                "description": "Campo numérico opcional das linhas usado como multiplicador de impedância para o comprimento do segmento."
              },
              "one_way_field": {
                "label": "Campo de mão única",
                "description": "Campo opcional das linhas que marca arestas digitalizadas de mão única (suporta FT/TF/B mais valores booleanos legados)."
              },
              "blocked_field": {
                "label": "Campo de bloqueio",
                "description": "Campo opcional das linhas que marca arestas bloqueadas/fechadas a excluir do roteamento (true/1/yes bloqueia)."
              },
              "barriers": {
                "label": "Barreiras",
                "description": "Camada opcional de pontos de barreira; os nós de rede mais próximos são bloqueados para a travessia."
              },
              "barrier_snap_distance": {
                "label": "Distância de ajuste das barreiras",
                "description": "Distância máxima opcional de cada ponto de barreira a um nó de rede para o bloqueio."
              },
              "node_cost_points": {
                "label": "Pontos de custo de nó",
                "description": "Camada de pontos opcional que fornece custos de entrada por nó (por exemplo, atraso em interseções)."
              },
              "node_cost_field": {
                "label": "Campo de custo de nó",
                "description": "Campo numérico em node_cost_points contendo os custos não negativos por nó."
              },
              "node_cost_snap_distance": {
                "label": "Distância de ajuste do custo de nó",
                "description": "Distância máxima opcional de cada ponto de custo de nó a um nó de rede para a atribuição."
              },
              "turn_penalty": {
                "label": "Penalidade de conversão",
                "description": "Custo aditivo opcional aplicado a conversões não retas nos nós da rede."
              },
              "u_turn_penalty": {
                "label": "Penalidade de retorno em U",
                "description": "Custo aditivo opcional aplicado às transições de retorno em U."
              },
              "forbid_u_turns": {
                "label": "Proibir retornos em U",
                "description": "Se verdadeiro, proíbe as transições de retorno em U."
              },
              "forbid_left_turns": {
                "label": "Proibir conversões à esquerda",
                "description": "Se verdadeiro, proíbe as transições de conversão à esquerda."
              },
              "forbid_right_turns": {
                "label": "Proibir conversões à direita",
                "description": "Se verdadeiro, proíbe as transições de conversão à direita."
              },
              "turn_restrictions_csv": {
                "label": "CSV de restrições de conversão",
                "description": "CSV opcional de transições de conversão usando as colunas prev_x,prev_y,node_x,node_y,next_x,next_y. Colunas opcionais: forbidden (padrão true quando nenhuma coluna turn_cost é fornecida) e turn_cost (ou penalty/cost/extra_cost) para o custo aditivo por conversão."
              },
              "temporal_cost_profile": {
                "label": "Perfil de custo temporal",
                "description": "CSV opcional que define custos de aresta dependentes do tempo (colunas: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo de ID da aresta temporal",
                "description": "Campo opcional da rede usado para corresponder os valores edge_id de temporal_cost_profile (padrão EDGE_ID)."
              },
              "departure_time": {
                "label": "Hora de partida",
                "description": "Hora de partida opcional em RFC3339 usada na consulta do perfil temporal."
              },
              "temporal_mode": {
                "label": "Modo temporal",
                "description": "Modo opcional de interpretação temporal: multiplier ou absolute."
              },
              "temporal_fallback": {
                "label": "Alternativa temporal",
                "description": "Alternativa opcional quando a linha temporal está ausente: static_cost ou error."
              },
              "temporal_profile_report": {
                "label": "Relatório do perfil temporal",
                "description": "Caminho opcional de saída JSON para os diagnósticos do perfil temporal (cobertura, arestas sem correspondência, uso da alternativa)."
              },
              "snapped_origins_output": {
                "label": "Saída de origens ajustadas",
                "description": "Caminho opcional do vetor de saída para os pontos de ancoragem internos das origens ajustadas usados para semear a travessia."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de área de serviço de saída."
              }
            }
          },
          "network_topology_audit": {
            "name": "Auditoria da topologia da rede",
            "description": "Audita uma rede de linhas em busca de anomalias de topologia — componentes desconectados, becos sem saída e anomalias de grau — que causam falhas de roteamento.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "one_way_field": {
                "label": "Campo de mão única",
                "description": "Campo opcional das linhas que marca arestas de mão única (suporta FT/TF/B mais valores booleanos legados)."
              },
              "blocked_field": {
                "label": "Campo de bloqueio",
                "description": "Campo opcional das linhas que marca arestas bloqueadas a excluir da análise."
              },
              "report": {
                "label": "Relatório",
                "description": "Caminho opcional de saída JSON para o relatório de resumo da auditoria."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída para os diagnósticos por nó."
              }
            }
          },
          "od_sensitivity_analysis": {
            "name": "Análise de sensibilidade OD",
            "description": "Calcula os custos de caminho mais curto OD com perturbações da impedância e gera estatísticas de sensibilidade por amostragem de Monte Carlo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "origins": {
                "label": "Origens",
                "description": "Camada de pontos de origem."
              },
              "destinations": {
                "label": "Destinos",
                "description": "Camada de pontos de destino."
              },
              "edge_cost_field": {
                "label": "Campo de custo da aresta",
                "description": "Campo numérico obrigatório das linhas usado como multiplicador de impedância para a análise de perturbação."
              },
              "impedance_disturbance_range": {
                "label": "Intervalo de perturbação da impedância",
                "description": "Intervalo para a perturbação de custo como 'min_factor,max_factor' (por exemplo, '0.8,1.2' para variação de ±20%)."
              },
              "monte_carlo_samples": {
                "label": "Amostras de Monte Carlo",
                "description": "Número de amostras de Monte Carlo para a análise de perturbação (padrão 1, máx. 100)."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "max_snap_distance": {
                "label": "Distância máxima de ajuste",
                "description": "Distância máxima opcional dos pontos de origem/destino ao nó de rede mais próximo."
              },
              "one_way_field": {
                "label": "Campo de mão única",
                "description": "Campo opcional das linhas que marca arestas digitalizadas de mão única (suporta FT/TF/B mais valores booleanos legados)."
              },
              "blocked_field": {
                "label": "Campo de bloqueio",
                "description": "Campo opcional das linhas que marca arestas bloqueadas/fechadas."
              },
              "node_cost_points": {
                "label": "Pontos de custo de nó",
                "description": "Camada de pontos opcional que fornece custos de entrada por nó (por exemplo, atraso em interseções)."
              },
              "node_cost_field": {
                "label": "Campo de custo de nó",
                "description": "Campo numérico em node_cost_points contendo os custos não negativos por nó."
              },
              "node_cost_snap_distance": {
                "label": "Distância de ajuste do custo de nó",
                "description": "Distância máxima opcional de cada ponto de custo de nó a um nó de rede para a atribuição."
              },
              "parallel_execution": {
                "label": "Execução paralela",
                "description": "Se verdadeiro (padrão), avalia as buscas por origem em paralelo para as execuções OD de linha de base e perturbadas."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de saída com os pares OD e as estatísticas de sensibilidade."
              }
            }
          },
          "shortest_path_network": {
            "name": "Caminho mais curto na rede",
            "description": "Encontra o caminho mais curto entre as coordenadas de início e fim em uma rede de linhas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de rede de linhas de entrada."
              },
              "start_x": {
                "label": "X inicial",
                "description": "Coordenada x inicial."
              },
              "start_y": {
                "label": "Y inicial",
                "description": "Coordenada y inicial."
              },
              "end_x": {
                "label": "X final",
                "description": "Coordenada x final."
              },
              "end_y": {
                "label": "Y final",
                "description": "Coordenada y final."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de nós para a construção do grafo."
              },
              "max_snap_distance": {
                "label": "Distância máxima de ajuste",
                "description": "Distância máxima opcional das coordenadas de início/fim ao nó de rede mais próximo."
              },
              "edge_cost_field": {
                "label": "Campo de custo da aresta",
                "description": "Campo numérico opcional das linhas usado como multiplicador de impedância para o comprimento do segmento."
              },
              "one_way_field": {
                "label": "Campo de mão única",
                "description": "Campo opcional das linhas que marca arestas digitalizadas de mão única (suporta FT/TF/B mais valores booleanos legados)."
              },
              "blocked_field": {
                "label": "Campo de bloqueio",
                "description": "Campo opcional das linhas que marca arestas bloqueadas/fechadas a excluir do roteamento (true/1/yes bloqueia)."
              },
              "barriers": {
                "label": "Barreiras",
                "description": "Camada opcional de pontos de barreira; os nós de rede mais próximos são bloqueados para a travessia."
              },
              "barrier_snap_distance": {
                "label": "Distância de ajuste das barreiras",
                "description": "Distância máxima opcional de cada ponto de barreira a um nó de rede para o bloqueio."
              },
              "turn_penalty": {
                "label": "Penalidade de conversão",
                "description": "Custo aditivo opcional aplicado a conversões não retas nos nós da rede."
              },
              "u_turn_penalty": {
                "label": "Penalidade de retorno em U",
                "description": "Custo aditivo opcional aplicado às transições de retorno em U."
              },
              "forbid_u_turns": {
                "label": "Proibir retornos em U",
                "description": "Se verdadeiro, proíbe as transições de retorno em U."
              },
              "forbid_left_turns": {
                "label": "Proibir conversões à esquerda",
                "description": "Se verdadeiro, proíbe as transições de conversão à esquerda."
              },
              "forbid_right_turns": {
                "label": "Proibir conversões à direita",
                "description": "Se verdadeiro, proíbe as transições de conversão à direita."
              },
              "turn_restrictions_csv": {
                "label": "CSV de restrições de conversão",
                "description": "CSV opcional de transições de conversão usando as colunas prev_x,prev_y,node_x,node_y,next_x,next_y. Colunas opcionais: forbidden (padrão true quando nenhuma coluna turn_cost é fornecida) e turn_cost (ou penalty/cost/extra_cost) para o custo aditivo por conversão."
              },
              "temporal_cost_profile": {
                "label": "Perfil de custo temporal",
                "description": "CSV opcional que define custos de aresta dependentes do tempo (colunas: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Campo de ID da aresta temporal",
                "description": "Campo opcional da rede usado para corresponder os valores edge_id de temporal_cost_profile (padrão EDGE_ID)."
              },
              "departure_time": {
                "label": "Hora de partida",
                "description": "Hora de partida opcional em RFC3339 usada na consulta do perfil temporal."
              },
              "temporal_mode": {
                "label": "Modo temporal",
                "description": "Modo opcional de interpretação temporal: multiplier ou absolute."
              },
              "temporal_fallback": {
                "label": "Alternativa temporal",
                "description": "Alternativa opcional quando a linha temporal está ausente: static_cost ou error."
              },
              "temporal_profile_report": {
                "label": "Relatório do perfil temporal",
                "description": "Caminho opcional de saída JSON para os diagnósticos do perfil temporal (cobertura, arestas sem correspondência, uso da alternativa)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de saída."
              }
            }
          },
          "split_lines_at_intersections": {
            "name": "Dividir linhas nas interseções",
            "description": "Divide uma rede de linhas onde quer que os segmentos de linha se interceptem, incluindo autointerseções.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de linhas de entrada a dividir nas interseções."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância de ajuste opcional usada pelas operações de divisão; o padrão é o epsilon da máquina."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas divididas de saída."
              }
            }
          },
          "snap_points_to_network": {
            "name": "Ajustar pontos à rede",
            "description": "Ajusta as feições de pontos de entrada à posição mais próxima ao longo de uma camada de linhas da rede.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada de pontos de entrada a ajustar."
              },
              "network": {
                "label": "Rede",
                "description": "Camada de linhas da rede de entrada."
              },
              "max_snap_distance": {
                "label": "Distância máxima de ajuste",
                "description": "Distância máxima de ajuste opcional em unidades do mapa."
              },
              "keep_unsnapped": {
                "label": "Manter não ajustados",
                "description": "Se verdadeiro (padrão), retém os pontos que não podem ser ajustados dentro da tolerância."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos ajustados de saída."
              }
            }
          },
          "transfer_attributes": {
            "name": "Transferir atributos",
            "description": "Transfere os atributos de origem para as feições de destino usando um predicado espacial.",
            "params": {
              "target": {
                "label": "Alvo",
                "description": "Camada alvo que recebe os atributos transferidos."
              },
              "source": {
                "label": "Origem",
                "description": "Camada de origem que fornece os atributos."
              },
              "predicate": {
                "label": "Predicado",
                "description": "Predicado espacial: intersects, within, contains, touches, crosses, overlaps, within_distance."
              },
              "distance": {
                "label": "Distância",
                "description": "Limiar de distância quando predicate=within_distance."
              },
              "strategy": {
                "label": "Estratégia",
                "description": "Estratégia de transferência: first, last, count, sum, mean, min, max."
              },
              "prefix": {
                "label": "Prefixo",
                "description": "Prefixo para os campos de origem transferidos (padrão SRC_)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "travelling_salesman_problem": {
            "name": "Problema do caixeiro-viajante",
            "description": "Encontra soluções aproximadas para o problema do caixeiro-viajante (TSP) usando heurísticas 2-opt. Dado um conjunto de localizações de pontos, identifica a rota mais curta que conecta todos os pontos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada."
              },
              "duration": {
                "label": "Duração",
                "description": "Duração máxima da otimização em segundos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional da polilinha de saída."
              }
            }
          },
          "vehicle_routing_cvrp": {
            "name": "Roteamento de veículos CVRP",
            "description": "Constrói rotas de entrega com múltiplos depósitos e restrição de capacidade, com controles de frota heterogênea, modos de objetivo e otimização local opcional.",
            "params": {
              "network": {
                "label": "Rede",
                "description": "Camada de rede de linhas de entrada (validada por paridade de contrato)."
              },
              "depot_points": {
                "label": "Pontos de depósito",
                "description": "Camada de pontos de depósito; cada ponto pode contribuir com um ou mais veículos."
              },
              "stop_points": {
                "label": "Pontos de parada",
                "description": "Camada de pontos de parada de entrega."
              },
              "demand_field": {
                "label": "Campo de demanda",
                "description": "Campo numérico de demanda em stop_points (padrão: demand)."
              },
              "priority_field": {
                "label": "Campo de prioridade",
                "description": "Campo opcional de prioridade das paradas usando valores como required/high/normal/low ou postos numéricos."
              },
              "allowed_vehicle_profiles_field": {
                "label": "Campo de perfis de veículo permitidos",
                "description": "Campo opcional das paradas que lista os perfis de veículo compatíveis (delimitados por vírgula/ponto e vírgula/barra vertical)."
              },
              "allowed_route_classes_field": {
                "label": "Campo de classes de rota permitidas",
                "description": "Alias opcional de allowed_vehicle_profiles_field para as regras de compatibilidade de classe de rota."
              },
              "depot_id_field": {
                "label": "Campo de ID do depósito",
                "description": "Campo opcional de ID do depósito usado nas saídas de rotas/atribuições."
              },
              "vehicle_count_field": {
                "label": "Campo de número de veículos",
                "description": "Campo opcional do depósito para o número de veículos gerados em cada depósito."
              },
              "vehicle_capacity_field": {
                "label": "Campo de capacidade do veículo",
                "description": "Campo opcional do depósito que substitui vehicle_capacity por modelo de depósito/veículo."
              },
              "vehicle_fixed_cost_field": {
                "label": "Campo de custo fixo do veículo",
                "description": "Campo opcional do depósito que substitui vehicle_fixed_cost por modelo de depósito/veículo."
              },
              "travel_speed_field": {
                "label": "Campo de velocidade de deslocamento",
                "description": "Campo opcional do depósito que substitui travel_speed por modelo de depósito/veículo."
              },
              "max_route_distance_field": {
                "label": "Campo de distância máxima da rota",
                "description": "Campo opcional do depósito que substitui max_route_distance por modelo de depósito/veículo."
              },
              "max_route_time_field": {
                "label": "Campo de tempo máximo da rota",
                "description": "Campo opcional do depósito que substitui max_route_time por modelo de depósito/veículo."
              },
              "vehicle_profile_field": {
                "label": "Campo de perfil do veículo",
                "description": "Campo opcional do depósito que define o token de perfil/categoria do veículo usado na compatibilidade das paradas."
              },
              "vehicle_route_class_field": {
                "label": "Campo de classe de rota do veículo",
                "description": "Alias opcional de vehicle_profile_field para as regras de compatibilidade de classe de rota."
              },
              "vehicle_capacity": {
                "label": "Capacidade do veículo",
                "description": "Capacidade por veículo (> 0)."
              },
              "vehicle_fixed_cost": {
                "label": "Custo fixo do veículo",
                "description": "Custo fixo opcional cobrado por veículo/rota despachado (padrão: 0)."
              },
              "max_vehicles": {
                "label": "Máximo de veículos",
                "description": "Número máximo opcional de veículos/rotas a construir."
              },
              "max_route_distance": {
                "label": "Distância máxima da rota",
                "description": "Distância máxima de deslocamento opcional por rota, incluindo o retorno ao depósito."
              },
              "travel_speed": {
                "label": "Velocidade de deslocamento",
                "description": "Velocidade de deslocamento em unidades de coordenadas por unidade de tempo (padrão: 1)."
              },
              "max_route_time": {
                "label": "Tempo máximo da rota",
                "description": "Duração máxima opcional da rota em unidades de tempo do modelo, incluindo o retorno ao depósito."
              },
              "max_stops_per_vehicle": {
                "label": "Máximo de paradas por veículo",
                "description": "Número máximo opcional de paradas atribuídas a cada rota de veículo."
              },
              "objective_mode": {
                "label": "Modo de objetivo",
                "description": "Objetivo da construção de rotas: minimize_distance, minimize_vehicles ou minimize_cost."
              },
              "apply_local_optimization": {
                "label": "Aplicar otimização local",
                "description": "Quando verdadeiro, aplica uma passagem determinística de melhoria local 2-opt a cada rota construída (padrão: true)."
              },
              "apply_simulated_annealing": {
                "label": "Aplicar recozimento simulado",
                "description": "Quando verdadeiro, aplica uma passagem de refinamento por recozimento simulado com semente por rota após a otimização gulosa/local (padrão: false)."
              },
              "sa_iterations": {
                "label": "Iterações do SA",
                "description": "Número máximo de iterações de recozimento simulado por rota quando apply_simulated_annealing=true (padrão: 1500)."
              },
              "sa_initial_temperature": {
                "label": "Temperatura inicial do SA",
                "description": "Temperatura inicial do recozimento simulado (> 0, padrão: 1.0)."
              },
              "sa_cooling_rate": {
                "label": "Taxa de resfriamento do SA",
                "description": "Multiplicador de resfriamento do recozimento simulado em (0, 1); padrão 0.995."
              },
              "sa_seed": {
                "label": "Semente do SA",
                "description": "Semente aleatória determinística opcional para o recozimento simulado (padrão: 42)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de rota de saída."
              },
              "assignment_output": {
                "label": "Saída de atribuição",
                "description": "Saída opcional de pontos de atribuição de paradas com diagnósticos de ordem de visita/carga."
              }
            }
          },
          "vehicle_routing_pickup_delivery": {
            "name": "Roteamento de veículos com coleta e entrega",
            "description": "Constrói rotas pareadas de coleta e entrega com restrições de precedência e capacidade usando uma linha de base determinística de vizinho mais próximo.",
            "params": {
              "network": {
                "label": "Rede",
                "description": "Camada de rede de linhas de entrada (validada por paridade de contrato)."
              },
              "depot_points": {
                "label": "Pontos de depósito",
                "description": "Camada de pontos de depósito; o primeiro ponto é usado como depósito ativo nesta implementação de linha de base."
              },
              "stop_points": {
                "label": "Pontos de parada",
                "description": "Camada de pontos de parada contendo registros pareados de coleta e entrega."
              },
              "request_id_field": {
                "label": "Campo de ID da solicitação",
                "description": "Campo de identificador da solicitação em stop_points usado para parear os registros de coleta e entrega (padrão: request_id)."
              },
              "stop_type_field": {
                "label": "Campo de tipo de parada",
                "description": "Campo de tipo de parada em stop_points contendo os rótulos pickup/delivery (padrão: stop_type)."
              },
              "demand_field": {
                "label": "Campo de demanda",
                "description": "Campo numérico de demanda em stop_points; a demanda de coleta é carregada e a demanda entregue é ignorada (padrão: demand)."
              },
              "vehicle_capacity": {
                "label": "Capacidade do veículo",
                "description": "Capacidade por veículo (> 0)."
              },
              "max_vehicles": {
                "label": "Máximo de veículos",
                "description": "Número máximo opcional de veículos/rotas a construir."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de rota de saída."
              },
              "assignment_output": {
                "label": "Saída de atribuição",
                "description": "Saída opcional de pontos de atribuição de paradas com diagnósticos de solicitação e precedência."
              }
            }
          },
          "vehicle_routing_vrptw": {
            "name": "Roteamento de veículos VRPTW",
            "description": "Constrói rotas VRPTW com múltiplos depósitos e restrição de capacidade, com configurações de frota heterogênea, janelas de pausa e controles de modo de objetivo.",
            "params": {
              "network": {
                "label": "Rede",
                "description": "Camada de rede de linhas de entrada (validada por paridade de contrato)."
              },
              "depot_points": {
                "label": "Pontos de depósito",
                "description": "Camada de pontos de depósito; cada ponto pode contribuir com um ou mais veículos."
              },
              "stop_points": {
                "label": "Pontos de parada",
                "description": "Camada de pontos de parada de entrega com campos de demanda e janela de tempo."
              },
              "demand_field": {
                "label": "Campo de demanda",
                "description": "Campo numérico de demanda em stop_points (padrão: demand)."
              },
              "priority_field": {
                "label": "Campo de prioridade",
                "description": "Campo opcional de prioridade das paradas usando valores como required/high/normal/low ou postos numéricos."
              },
              "allowed_vehicle_profiles_field": {
                "label": "Campo de perfis de veículo permitidos",
                "description": "Campo opcional das paradas que lista os perfis de veículo compatíveis (delimitados por vírgula/ponto e vírgula/barra vertical)."
              },
              "allowed_route_classes_field": {
                "label": "Campo de classes de rota permitidas",
                "description": "Alias opcional de allowed_vehicle_profiles_field para as regras de compatibilidade de classe de rota."
              },
              "tw_start_field": {
                "label": "Campo de início da janela de tempo",
                "description": "Campo numérico de início da janela de tempo em stop_points (padrão: tw_start)."
              },
              "tw_end_field": {
                "label": "Campo de fim da janela de tempo",
                "description": "Campo numérico de fim da janela de tempo em stop_points (padrão: tw_end)."
              },
              "service_time_field": {
                "label": "Campo de tempo de serviço",
                "description": "Campo numérico de tempo de serviço por parada em stop_points (padrão: service_time)."
              },
              "depot_id_field": {
                "label": "Campo de ID do depósito",
                "description": "Campo opcional de ID do depósito usado nas saídas de rotas/atribuições."
              },
              "vehicle_count_field": {
                "label": "Campo de número de veículos",
                "description": "Campo opcional do depósito para o número de veículos gerados em cada depósito."
              },
              "vehicle_capacity_field": {
                "label": "Campo de capacidade do veículo",
                "description": "Campo opcional do depósito que substitui vehicle_capacity por modelo de depósito/veículo."
              },
              "vehicle_fixed_cost_field": {
                "label": "Campo de custo fixo do veículo",
                "description": "Campo opcional do depósito que substitui vehicle_fixed_cost por modelo de depósito/veículo."
              },
              "travel_speed_field": {
                "label": "Campo de velocidade de deslocamento",
                "description": "Campo opcional do depósito que substitui travel_speed por modelo de depósito/veículo."
              },
              "max_route_distance_field": {
                "label": "Campo de distância máxima da rota",
                "description": "Campo opcional do depósito que substitui max_route_distance por modelo de depósito/veículo."
              },
              "max_route_time_field": {
                "label": "Campo de tempo máximo da rota",
                "description": "Campo opcional do depósito que substitui max_route_time por modelo de depósito/veículo."
              },
              "vehicle_profile_field": {
                "label": "Campo de perfil do veículo",
                "description": "Campo opcional do depósito que define o token de perfil/categoria do veículo usado na compatibilidade das paradas."
              },
              "vehicle_route_class_field": {
                "label": "Campo de classe de rota do veículo",
                "description": "Alias opcional de vehicle_profile_field para as regras de compatibilidade de classe de rota."
              },
              "depot_close_time_field": {
                "label": "Campo de hora de fechamento do depósito",
                "description": "Campo opcional do depósito que substitui depot_close_time por modelo de depósito/veículo."
              },
              "break_start_field": {
                "label": "Campo de início da pausa",
                "description": "Campo opcional do depósito que substitui break_start_time por modelo de depósito/veículo."
              },
              "break_end_field": {
                "label": "Campo de fim da pausa",
                "description": "Campo opcional do depósito que substitui break_end_time por modelo de depósito/veículo."
              },
              "break_duration_field": {
                "label": "Campo de duração da pausa",
                "description": "Campo opcional do depósito que substitui break_duration por modelo de depósito/veículo."
              },
              "vehicle_capacity": {
                "label": "Capacidade do veículo",
                "description": "Capacidade por veículo (> 0)."
              },
              "vehicle_fixed_cost": {
                "label": "Custo fixo do veículo",
                "description": "Custo fixo opcional cobrado por veículo/rota despachado (padrão: 0)."
              },
              "start_time": {
                "label": "Hora de início",
                "description": "Hora de início da rota em unidades de tempo do modelo (padrão: 0)."
              },
              "travel_speed": {
                "label": "Velocidade de deslocamento",
                "description": "Velocidade de deslocamento em unidades de coordenadas por unidade de tempo (padrão: 1)."
              },
              "enforce_time_windows": {
                "label": "Impor janelas de tempo",
                "description": "Quando verdadeiro, apenas paradas com atraso <= allowed_lateness são elegíveis para atribuição (padrão: false)."
              },
              "allowed_lateness": {
                "label": "Atraso permitido",
                "description": "Atraso máximo tolerado quando enforce_time_windows=true (padrão: 0)."
              },
              "depot_close_time": {
                "label": "Hora de fechamento do depósito",
                "description": "Hora limite de fechamento opcional até a qual cada rota deve retornar ao depósito."
              },
              "break_start_time": {
                "label": "Hora de início da pausa",
                "description": "Hora de início opcional da janela global de pausa para todos os veículos."
              },
              "break_end_time": {
                "label": "Hora de fim da pausa",
                "description": "Hora de fim opcional da janela global de pausa para todos os veículos."
              },
              "break_duration": {
                "label": "Duração da pausa",
                "description": "Duração opcional da pausa global aplicada uma vez por rota quando a janela de pausa é intersectada."
              },
              "use_priority_scoring": {
                "label": "Usar pontuação por prioridade",
                "description": "Quando verdadeiro, classifica os candidatos viáveis pelo atraso/folga projetados antes da distância de deslocamento; quando falso, usa a linha de base do vizinho mais próximo (padrão: true)."
              },
              "max_vehicles": {
                "label": "Máximo de veículos",
                "description": "Número máximo opcional de veículos/rotas a construir."
              },
              "max_route_distance": {
                "label": "Distância máxima da rota",
                "description": "Distância máxima de deslocamento opcional da rota, incluindo o retorno ao depósito."
              },
              "max_route_time": {
                "label": "Tempo máximo da rota",
                "description": "Duração máxima opcional da rota em unidades de tempo do modelo, incluindo o retorno ao depósito."
              },
              "max_stops_per_vehicle": {
                "label": "Máximo de paradas por veículo",
                "description": "Número máximo opcional de paradas atribuídas a cada rota de veículo."
              },
              "objective_mode": {
                "label": "Modo de objetivo",
                "description": "Objetivo da construção de rotas: minimize_lateness, minimize_distance, minimize_vehicles ou minimize_cost."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de rota de saída."
              },
              "assignment_output": {
                "label": "Saída de atribuição",
                "description": "Saída opcional de pontos de atribuição de paradas com diagnósticos de janela de tempo."
              }
            }
          },
          "clip": {
            "name": "Recortar",
            "description": "Recorta os polígonos de entrada pelos limites dos polígonos de sobreposição usando interseção baseada em topologia.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "overlay": {
                "label": "Sobreposição",
                "description": "Camada de polígonos de sobreposição."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância de ajuste opcional usada pelas operações de topologia; o padrão é o epsilon da máquina."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "difference": {
            "name": "Diferença",
            "description": "Remove as áreas dos polígonos de sobreposição dos polígonos de entrada usando diferença baseada em topologia.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "overlay": {
                "label": "Sobreposição",
                "description": "Camada de polígonos de sobreposição."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância de ajuste opcional usada pelas operações de topologia; o padrão é o epsilon da máquina."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "dissolve": {
            "name": "Dissolver",
            "description": "Remove os limites compartilhados entre polígonos globalmente ou por um campo de atributo de dissolução.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "dissolve_field": {
                "label": "Campo de dissolução",
                "description": "Campo de atributo opcional usado para dissolver os polígonos dentro de grupos; se omitido, dissolve todos os polígonos."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância de ajuste opcional usada durante as operações de topologia."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída."
              }
            }
          },
          "erase": {
            "name": "Apagar",
            "description": "Apaga as áreas dos polígonos de sobreposição dos polígonos de entrada e preserva os atributos de entrada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "overlay": {
                "label": "Sobreposição",
                "description": "Camada de polígonos de sobreposição."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância de ajuste opcional usada pelas operações de topologia; o padrão é o epsilon da máquina."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "identity": {
            "name": "Identidade",
            "description": "Preserva todas as feições de entrada; as partes que se sobrepõem à camada de identidade também recebem os atributos de identidade.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "overlay": {
                "label": "Sobreposição",
                "description": "Camada de polígonos de sobreposição."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância de ajuste opcional usada pelas operações de topologia; o padrão é o epsilon da máquina."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "intersect": {
            "name": "Interseção",
            "description": "Intercepta os polígonos de entrada e de sobreposição usando sobreposição baseada em topologia e rastreia os IDs das feições de origem.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "overlay": {
                "label": "Sobreposição",
                "description": "Camada de polígonos de sobreposição."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância de ajuste opcional usada pelas operações de topologia; o padrão é o epsilon da máquina."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "line_intersections": {
            "name": "Interseções de linhas",
            "description": "Encontra os pontos de interseção de linhas entre as camadas de entrada e de sobreposição e anexa os IDs de origem com os atributos mesclados.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de linhas ou polígonos de entrada."
              },
              "overlay": {
                "label": "Sobreposição",
                "description": "Camada de linhas ou polígonos de sobreposição."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância de ajuste opcional usada pelas operações de geometria; o padrão é o epsilon da máquina."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "line_polygon_clip": {
            "name": "Recorte de linhas por polígono",
            "description": "Recorta as feições de linha pelo interior dos polígonos e gera os segmentos de linha recortados.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de linhas de entrada."
              },
              "clip": {
                "label": "Recortar",
                "description": "Camada de polígonos de recorte."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "near": {
            "name": "Proximidade",
            "description": "Adiciona os atributos NEAR_FID e NEAR_DIST, que identificam as feições mais próximas e suas distâncias, usando indexação espacial.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "near": {
                "label": "Proximidade",
                "description": "Camada vetorial de feições próximas."
              },
              "max_distance": {
                "label": "Distância máxima",
                "description": "Distância máxima de busca opcional."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "select_by_location": {
            "name": "Selecionar por localização",
            "description": "Filtra as feições de destino por predicados espaciais (intersects, within, contains, touches, overlaps etc.) em relação às feições de consulta.",
            "params": {
              "target": {
                "label": "Alvo",
                "description": "Camada de feições alvo a filtrar."
              },
              "query": {
                "label": "Consulta",
                "description": "Camada de feições de consulta."
              },
              "predicate": {
                "label": "Predicado",
                "description": "Predicado espacial: intersects, within, contains, touches, crosses, overlaps, disjoint, within_distance."
              },
              "distance": {
                "label": "Distância",
                "description": "Limiar de distância para o predicado within_distance."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "spatial_join": {
            "name": "Junção espacial",
            "description": "Transfere atributos das feições da camada de junção para os destinos usando predicados espaciais; suporta estratégias de agregação (count, sum, mean, min, max) para múltiplas correspondências.",
            "params": {
              "target": {
                "label": "Alvo",
                "description": "Camada alvo que recebe os atributos juntados."
              },
              "join": {
                "label": "Junção",
                "description": "Camada de junção que fornece os atributos."
              },
              "predicate": {
                "label": "Predicado",
                "description": "Predicado espacial: intersects, within, contains, touches, crosses, overlaps, within_distance."
              },
              "distance": {
                "label": "Distância",
                "description": "Limiar de distância para o predicado within_distance."
              },
              "strategy": {
                "label": "Estratégia",
                "description": "Estratégia de junção: first, last, count, sum, mean, min, max."
              },
              "prefix": {
                "label": "Prefixo",
                "description": "Prefixo para os nomes dos campos juntados (padrão JOIN_)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "symmetrical_difference": {
            "name": "Diferença simétrica",
            "description": "Calcula as regiões poligonais não sobrepostas a partir das camadas de entrada e de sobreposição.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "overlay": {
                "label": "Sobreposição",
                "description": "Camada de polígonos de sobreposição."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância de ajuste opcional usada pelas operações de topologia; o padrão é o epsilon da máquina."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "union": {
            "name": "União",
            "description": "Dissolve os polígonos combinados de entrada e de sobreposição em uma cobertura poligonal unificada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "overlay": {
                "label": "Sobreposição",
                "description": "Camada de polígonos de sobreposição."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância de ajuste opcional usada pelas operações de topologia; o padrão é o epsilon da máquina."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "update": {
            "name": "Atualizar",
            "description": "Substitui as feições de entrada pelas feições de atualização onde elas se sobrepõem; as feições de entrada fora da camada de atualização são preservadas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "overlay": {
                "label": "Sobreposição",
                "description": "Camada de polígonos de sobreposição."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância de ajuste opcional usada pelas operações de topologia; o padrão é o epsilon da máquina."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "centroid_vector": {
            "name": "Centroide vetorial",
            "description": "Calcula o centro geográfico (coordenada média do centro de massa) de cada feição vetorial, produzindo uma camada de pontos para posicionamento de rótulos, agrupamento e análise espacial.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída."
              }
            }
          },
          "concave_hull": {
            "name": "Envoltória côncava",
            "description": "Cria polígonos de envoltória côncava em torno das coordenadas das feições de entrada usando o algoritmo concaveman.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "concavity": {
                "label": "Concavidade",
                "description": "Razão de concavidade (padrão 2.0). Valores maiores produzem uma envoltória menos côncava, mais próxima da envoltória convexa. Valores menores permitem concavidades mais apertadas."
              },
              "max_edge_length": {
                "label": "Comprimento máximo da aresta",
                "description": "Limiar de comprimento: arestas da envoltória mais curtas que este valor não são refinadas. O padrão é ilimitado (infinito)."
              },
              "epsilon": {
                "label": "Epsilon",
                "description": "Epsilon de robustez (padrão 1e-9)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "densify_features": {
            "name": "Densificar feições",
            "description": "Adiciona vértices ao longo dos limites de linhas e polígonos com um espaçamento especificado.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "spacing": {
                "label": "Espaçamento",
                "description": "Espaçamento máximo entre vértices adjacentes."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "eliminate_coincident_points": {
            "name": "Eliminar pontos coincidentes",
            "description": "Remove pontos coincidentes ou quase coincidentes dentro de uma distância de tolerância.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada."
              },
              "tolerance_dist": {
                "label": "Distância de tolerância",
                "description": "Limiar de distância para considerar os pontos coincidentes."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída."
              }
            }
          },
          "extend_vector_lines": {
            "name": "Estender linhas vetoriais",
            "description": "Estende as extremidades das polilinhas por uma distância especificada no início, no fim ou em ambos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polilinhas de entrada."
              },
              "distance": {
                "label": "Distância",
                "description": "Distância para estender as extremidades das polilinhas."
              },
              "extend_direction": {
                "label": "Direção de extensão",
                "description": "Direção para estender as extremidades: both, start ou end."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "merge_line_segments": {
            "name": "Mesclar segmentos de linha",
            "description": "Mescla segmentos de linha conectados que se encontram em extremidades sem ramificação.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polilinhas de entrada."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância opcional de ajuste de extremidades usada para corresponder as extremidades das linhas; o padrão é o epsilon da máquina."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "minimum_bounding_box": {
            "name": "Retângulo envolvente mínimo",
            "description": "Calcula caixas delimitadoras mínimas orientadas em torno de feições individuais ou de toda a camada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "min_criteria": {
                "label": "Critérios mínimos",
                "description": "Critério de minimização: area, perimeter, length ou width. O padrão é area."
              },
              "individual_feature_hulls": {
                "label": "Envoltórias por feição individual",
                "description": "Se verdadeiro, emite uma caixa por feição; caso contrário, emite uma caixa para toda a camada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída."
              }
            }
          },
          "minimum_bounding_circle": {
            "name": "Círculo envolvente mínimo",
            "description": "Calcula círculos envolventes mínimos em torno de feições individuais ou de toda a camada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "individual_feature_hulls": {
                "label": "Envoltórias por feição individual",
                "description": "Se verdadeiro, emite um círculo por feição; caso contrário, emite um círculo para toda a camada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída."
              }
            }
          },
          "minimum_bounding_envelope": {
            "name": "Envelope envolvente mínimo",
            "description": "Calcula envelopes delimitadores mínimos alinhados aos eixos em torno de feições individuais ou de toda a camada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "individual_feature_hulls": {
                "label": "Envoltórias por feição individual",
                "description": "Se verdadeiro, emite um envelope por feição; caso contrário, emite um envelope para toda a camada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída."
              }
            }
          },
          "minimum_convex_hull": {
            "name": "Envoltória convexa mínima",
            "description": "Cria polígonos de envoltória convexa em torno de feições individuais ou de toda a camada de entrada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "individual_feature_hulls": {
                "label": "Envoltórias por feição individual",
                "description": "Se verdadeiro, emite uma envoltória por feição de entrada; caso contrário, emite uma envoltória para toda a camada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída."
              }
            }
          },
          "polygonize": {
            "name": "Poligonizar",
            "description": "Cria polígonos a partir das linhas de entrada, incluindo segmentos que se interceptam/abertos quando é possível formar faces fechadas.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Camadas vetoriais de linhas de entrada como matriz ou cadeia delimitada por ponto e vírgula/vírgula. Se omitido, 'input' é usado."
              },
              "input": {
                "label": "Entrada",
                "description": "Caminho opcional de uma única camada vetorial de linhas de entrada."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância de ajuste opcional usada pela poligonização; o padrão é o epsilon da máquina."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "representative_point_vector": {
            "name": "Ponto representativo vetorial",
            "description": "Gera um ponto interior garantidamente dentro ou sobre cada geometria usando o polo de inacessibilidade, ideal para o posicionamento de rótulos em polígonos côncavos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída."
              }
            }
          },
          "simplify_features": {
            "name": "Simplificar feições",
            "description": "Reduz a complexidade das geometrias usando o algoritmo de Douglas-Peucker para minimizar o tamanho do arquivo, remover o ruído de GPS e otimizar o desempenho de renderização preservando a forma.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Tolerância de simplificação em unidades do mapa."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "smooth_vectors": {
            "name": "Suavizar vetores",
            "description": "Suaviza geometrias de polilinhas ou polígonos usando filtragem por média móvel para reduzir o ruído de digitalização e a instabilidade de trilhas de GPS.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de linhas ou polígonos de entrada."
              },
              "filter_size": {
                "label": "Tamanho do filtro",
                "description": "Tamanho ímpar da janela da média móvel (>= 3). Valores pares são incrementados para o próximo valor ímpar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "snap_endnodes": {
            "name": "Ajustar nós finais",
            "description": "Ajusta as extremidades de polilinhas próximas a uma posição compartilhada dentro de uma tolerância.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polilinhas de entrada."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância de ajuste de extremidades em unidades do mapa."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polilinhas ajustadas de saída."
              }
            }
          },
          "split_vector_lines": {
            "name": "Dividir linhas vetoriais",
            "description": "Divide cada feição de polilinha em segmentos com um comprimento máximo especificado.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polilinhas de entrada."
              },
              "segment_length": {
                "label": "Comprimento do segmento",
                "description": "Comprimento máximo do segmento em unidades do mapa."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polilinhas de saída."
              }
            }
          },
          "split_with_lines": {
            "name": "Dividir com linhas",
            "description": "Divide as polilinhas de entrada usando os pontos de interseção de uma camada de linhas de divisão.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de linhas de entrada a dividir."
              },
              "split": {
                "label": "Dividir",
                "description": "Camada de linhas de divisão usada para criar os pontos de quebra."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância de ajuste opcional usada pelas operações de divisão; o padrão é o epsilon da máquina."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "compactness_ratio": {
            "name": "Razão de compacidade",
            "description": "Calcula a razão de compacidade (área / perímetro) para feições poligonais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Vetor de saída com o campo de compacidade anexado."
              }
            }
          },
          "deviation_from_regional_direction": {
            "name": "Desvio da direção regional",
            "description": "Calcula o desvio direcional dos polígonos em relação à orientação média regional ponderada e anexa DEV_DIR.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "elongation_threshold": {
                "label": "Limiar de alongamento",
                "description": "Alongamento mínimo usado para incluir polígonos na estimativa de direção regional; padrão 0.75."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "elongation_ratio": {
            "name": "Razão de alongamento",
            "description": "Calcula a razão de alongamento (eixo menor / eixo maior do retângulo delimitador) para feições poligonais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Vetor de saída com o campo de alongamento anexado."
              }
            }
          },
          "hole_proportion": {
            "name": "Proporção de buracos",
            "description": "Calcula a área dos buracos do polígono dividida pela área da envoltória e anexa HOLE_PROP.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "linearity_index": {
            "name": "Índice de linearidade",
            "description": "Calcula o índice de linearidade (r-quadrado da regressão) para feições poligonais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Vetor de saída com o campo de linearidade anexado."
              }
            }
          },
          "narrowness_index_vector": {
            "name": "Índice de estreiteza vetorial",
            "description": "Calcula o índice de estreiteza (perímetro / sqrt(área)) para feições poligonais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Vetor de saída com o campo de estreiteza anexado."
              }
            }
          },
          "patch_orientation": {
            "name": "Orientação da mancha",
            "description": "Calcula a orientação dos polígonos (graus a partir do norte) usando regressão pelo eixo maior reduzido e anexa ORIENT.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "perimeter_area_ratio": {
            "name": "Razão perímetro-área",
            "description": "Calcula a razão perímetro/área dos polígonos e anexa P_A_RATIO.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "polygon_area": {
            "name": "Área do polígono",
            "description": "Calcula a área dos polígonos e anexa um campo de atributo AREA.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "polygon_long_axis": {
            "name": "Eixo maior do polígono",
            "description": "Mapeia o eixo maior da caixa delimitadora mínima de cada feição poligonal como saída de linhas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polilinhas de saída."
              }
            }
          },
          "polygon_perimeter": {
            "name": "Perímetro do polígono",
            "description": "Calcula o perímetro dos polígonos e anexa um campo de atributo PERIMETER.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "polygon_short_axis": {
            "name": "Eixo menor do polígono",
            "description": "Mapeia o eixo menor da caixa delimitadora mínima de cada feição poligonal como saída de linhas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polilinhas de saída."
              }
            }
          },
          "related_circumscribing_circle": {
            "name": "Círculo circunscrito relacionado",
            "description": "Calcula 1 - (área do polígono / área do menor círculo circunscrito) e anexa RC_CIRCLE.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "shape_complexity_index_vector": {
            "name": "Índice de complexidade de forma vetorial",
            "description": "Calcula o índice de complexidade da forma para feições poligonais vetoriais usando o fator de forma normalizado.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Vetor de saída com o campo de índice de complexidade anexado."
              }
            }
          },
          "global_morans_i": {
            "name": "I de Moran global",
            "description": "Calcula o I de Moran global para testar a autocorrelação espacial: se valores semelhantes se agrupam espacialmente. Base essencial para a análise geoestatística.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "field": {
                "label": "Campo",
                "description": "Campo de atributo numérico a analisar."
              },
              "weights_mode": {
                "label": "Modo de pesos",
                "description": "Modo de vizinhança: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Valor de k para o modo k_nearest."
              },
              "distance": {
                "label": "Distância",
                "description": "Limiar de distância para o modo distance_band."
              },
              "row_standardize": {
                "label": "Padronizar por linha",
                "description": "Aplica a padronização por linha aos pesos (padrão true)."
              },
              "inference": {
                "label": "Inferência",
                "description": "Modo de inferência: asymptotic ou permutation (padrão: asymptotic)."
              },
              "num_simulations": {
                "label": "Número de simulações",
                "description": "Número de permutações para o teste de permutação (padrão: 999)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente aleatória para um teste de permutação reprodutível."
              },
              "island_policy": {
                "label": "Política de ilhas",
                "description": "Tratamento de ilhas: drop_with_warning, keep_zero_weight, error."
              },
              "output_json": {
                "label": "JSON de saída",
                "description": "Caminho opcional de saída do relatório JSON."
              },
              "output_html": {
                "label": "HTML de saída",
                "description": "Caminho opcional de saída do relatório HTML."
              },
              "output_csv": {
                "label": "CSV de saída",
                "description": "Caminho opcional de saída do resumo CSV."
              },
              "output_distribution": {
                "label": "Distribuição de saída",
                "description": "Caminho opcional para salvar a distribuição de permutação como JSON."
              }
            }
          },
          "getis_ord_gi_star": {
            "name": "Gi* de Getis-Ord",
            "description": "Calcula os escores z Gi/Gi* de Getis-Ord para a identificação local de pontos quentes/frios. Medida direta da concentração de valores altos/baixos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "field": {
                "label": "Campo",
                "description": "Campo de atributo numérico a analisar."
              },
              "weights_mode": {
                "label": "Modo de pesos",
                "description": "Modo de vizinhança: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Valor de k para o modo k_nearest."
              },
              "distance": {
                "label": "Distância",
                "description": "Limiar de distância para o modo distance_band."
              },
              "row_standardize": {
                "label": "Padronizar por linha",
                "description": "Aplica a padronização por linha aos pesos (padrão true)."
              },
              "variant": {
                "label": "Variante",
                "description": "Variante: gi ou gi_star (padrão gi_star)."
              },
              "inference": {
                "label": "Inferência",
                "description": "Modo de inferência: asymptotic ou permutation (padrão: asymptotic)."
              },
              "num_simulations": {
                "label": "Número de simulações",
                "description": "Número de permutações para o teste de permutação (padrão: 999)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente aleatória para um teste de permutação reprodutível."
              },
              "island_policy": {
                "label": "Política de ilhas",
                "description": "Tratamento de ilhas: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Limiar de significância em [0, 1]; padrão 0.05."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída com os campos GI."
              },
              "output_html": {
                "label": "HTML de saída",
                "description": "Caminho opcional de saída do relatório HTML."
              }
            }
          },
          "local_morans_i_lisa": {
            "name": "I de Moran local (LISA)",
            "description": "Calcula o I de Moran local para cada feição para identificar agrupamentos e valores atípicos espaciais locais com teste de significância estatística.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "field": {
                "label": "Campo",
                "description": "Campo de atributo numérico a analisar."
              },
              "weights_mode": {
                "label": "Modo de pesos",
                "description": "Modo de vizinhança: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Valor de k para o modo k_nearest."
              },
              "distance": {
                "label": "Distância",
                "description": "Limiar de distância para o modo distance_band."
              },
              "row_standardize": {
                "label": "Padronizar por linha",
                "description": "Aplica a padronização por linha aos pesos (padrão true)."
              },
              "inference": {
                "label": "Inferência",
                "description": "Modo de inferência: asymptotic ou permutation (padrão: asymptotic)."
              },
              "num_simulations": {
                "label": "Número de simulações",
                "description": "Número de permutações para o teste de permutação (padrão: 999)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente aleatória para um teste de permutação reprodutível."
              },
              "island_policy": {
                "label": "Política de ilhas",
                "description": "Tratamento de ilhas: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Limiar de significância em [0, 1]; padrão 0.05."
              },
              "fdr_correction": {
                "label": "Correção FDR",
                "description": "Aplica a correção FDR-BH (padrão true para permutação)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída com os campos LISA."
              },
              "output_html": {
                "label": "HTML de saída",
                "description": "Caminho opcional de saída do relatório HTML."
              }
            }
          },
          "nearest_neighbour_index": {
            "name": "Índice do vizinho mais próximo",
            "description": "Calcula o índice de vizinho mais próximo de Clark-Evans, testando a aleatoriedade espacial completa. Detecta agrupamento versus dispersão.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada."
              },
              "study_area_mode": {
                "label": "Modo da área de estudo",
                "description": "Modo da área de estudo: hull, envelope, polygon_layer."
              },
              "study_area_polygon": {
                "label": "Polígono da área de estudo",
                "description": "Camada de polígonos usada quando study_area_mode=polygon_layer."
              },
              "output_json": {
                "label": "JSON de saída",
                "description": "Caminho opcional de saída do relatório JSON."
              },
              "output_html": {
                "label": "HTML de saída",
                "description": "Caminho opcional de saída do relatório HTML."
              },
              "output_csv": {
                "label": "CSV de saída",
                "description": "Caminho opcional de saída do resumo CSV."
              }
            }
          },
          "quadrat_count_test": {
            "name": "Teste de contagem por quadrats",
            "description": "Realiza o teste qui-quadrado de aleatoriedade do padrão de pontos usando contagens por quadrats. Testa agrupamento versus dispersão.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada."
              },
              "grid_mode": {
                "label": "Modo de grade",
                "description": "Modo de grade: rows_cols ou cell_size."
              },
              "rows": {
                "label": "Linhas",
                "description": "Linhas quando grid_mode=rows_cols."
              },
              "cols": {
                "label": "Colunas",
                "description": "Colunas quando grid_mode=rows_cols."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula quando grid_mode=cell_size."
              },
              "study_area_mode": {
                "label": "Modo da área de estudo",
                "description": "Modo da área de estudo: hull, envelope, polygon_layer."
              },
              "study_area_polygon": {
                "label": "Polígono da área de estudo",
                "description": "Camada de polígonos usada quando study_area_mode=polygon_layer."
              },
              "output_grid": {
                "label": "Grade de saída",
                "description": "Caminho opcional de saída da grade de polígonos de quadrats."
              },
              "output_json": {
                "label": "JSON de saída",
                "description": "Caminho opcional de saída do relatório JSON."
              },
              "output_html": {
                "label": "HTML de saída",
                "description": "Caminho opcional de saída do relatório HTML."
              },
              "output_csv": {
                "label": "CSV de saída",
                "description": "Caminho opcional de saída do resumo CSV."
              }
            }
          },
          "spatial_lag_regression": {
            "name": "Regressão com defasagem espacial",
            "description": "Estima um modelo autorregressivo espacial que captura efeitos de transbordamento endógenos, em que a variável dependente é influenciada pelos vizinhos espaciais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "response_field": {
                "label": "Campo de resposta",
                "description": "Variável de resposta (dependente)."
              },
              "predictor_fields": {
                "label": "Campos preditores",
                "description": "Nomes dos campos preditores separados por vírgula."
              },
              "weights_mode": {
                "label": "Modo de pesos",
                "description": "Modo de vizinhança espacial."
              },
              "k": {
                "label": "K",
                "description": "Valor de k para k_nearest."
              },
              "distance": {
                "label": "Distância",
                "description": "Limiar de distância."
              },
              "row_standardize": {
                "label": "Padronizar por linha",
                "description": "Padroniza os pesos por linha."
              },
              "output": {
                "label": "Saída",
                "description": "Camada vetorial de saída."
              }
            }
          },
          "spatial_error_regression": {
            "name": "Regressão com erro espacial",
            "description": "Estima um modelo de erro espacial que trata a dependência espacial exógena nos resíduos decorrente de variáveis omitidas ou de erro de medição.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "response_field": {
                "label": "Campo de resposta",
                "description": "Variável de resposta."
              },
              "predictor_fields": {
                "label": "Campos preditores",
                "description": "Campos preditores separados por vírgula."
              },
              "weights_mode": {
                "label": "Modo de pesos",
                "description": "Modo de vizinhança espacial."
              },
              "k": {
                "label": "K",
                "description": "k para k_nearest."
              },
              "distance": {
                "label": "Distância",
                "description": "Limiar de distância."
              },
              "row_standardize": {
                "label": "Padronizar por linha",
                "description": "Padroniza os pesos por linha."
              },
              "output": {
                "label": "Saída",
                "description": "Camada vetorial de saída."
              }
            }
          },
          "geographically_weighted_regression": {
            "name": "Regressão geograficamente ponderada",
            "description": "Regressão linear local com pesos de kernel de decaimento com a distância (GWR): coeficientes por feição, R² local, resíduos e predições, além de diagnósticos globais de AICc / R²; largura de banda fixa ou adaptativa, opcionalmente otimizada por AICc.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de feições de entrada (pontos, ou outras geometrias via seu ponto representativo)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "y_field": {
                "label": "Campo Y",
                "description": "Campo numérico dependente (resposta)."
              },
              "x_fields": {
                "label": "Campos X",
                "description": "Campo(s) numérico(s) explicativo(s) separados por vírgula."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Kernel de decaimento por distância: 'gaussian' (padrão) ou 'bisquare'."
              },
              "bandwidth_type": {
                "label": "Tipo de largura de banda",
                "description": "'adaptive' (padrão; largura de banda = k vizinhos mais próximos) ou 'fixed' (largura de banda = uma distância)."
              },
              "bandwidth": {
                "label": "Largura de banda",
                "description": "Largura de banda: contagem de vizinhos para adaptativa, ou distância para fixa. Omita para selecioná-la minimizando o AICc."
              }
            }
          },
          "ripleys_k_test": {
            "name": "Teste K de Ripley",
            "description": "Calcula a estatística de agrupamento multiescala K de Ripley. Revela agrupamento/dispersão dependentes da escala ao longo de faixas de distância.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada."
              },
              "max_distance": {
                "label": "Distância máxima",
                "description": "Distância máxima de análise."
              },
              "step_size": {
                "label": "Tamanho do passo",
                "description": "Tamanho do passo de distância."
              },
              "output": {
                "label": "Saída",
                "description": "Vetor de saída com as estatísticas K."
              }
            }
          },
          "envelope_test": {
            "name": "Teste de envelope",
            "description": "Realiza um teste de envelope de Monte Carlo comparando o padrão observado com a distribuição nula de CSR. Determina a significância do agrupamento/dispersão.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada."
              },
              "num_simulations": {
                "label": "Número de simulações",
                "description": "Número de simulações de Monte Carlo."
              },
              "max_distance": {
                "label": "Distância máxima",
                "description": "Distância máxima de análise."
              },
              "output": {
                "label": "Saída",
                "description": "Vetor de saída com os limites do envelope."
              }
            }
          },
          "point_process_residuals": {
            "name": "Resíduos do processo pontual",
            "description": "Calcula os resíduos de um modelo ajustado de processo pontual de Poisson para diagnóstico. Detecta estrutura espacial não modelada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada."
              },
              "intensity_field": {
                "label": "Campo de intensidade",
                "description": "Campo de intensidade ajustada."
              },
              "output": {
                "label": "Saída",
                "description": "Vetor de saída com os resíduos."
              }
            }
          },
          "ripleys_k_function": {
            "name": "Função K de Ripley",
            "description": "Calcula K(t) e L(t) para caracterizar padrões de agrupamento espacial.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos."
              },
              "max_distance": {
                "label": "Distância máxima",
                "description": "Limiar de distância máxima."
              },
              "num_distances": {
                "label": "Número de distâncias",
                "description": "Número de passos de distância."
              },
              "output": {
                "label": "Saída",
                "description": "CSV de saída."
              }
            }
          },
          "point_pattern_envelope": {
            "name": "Envelope do padrão de pontos",
            "description": "Gera envelopes de banda crítica para teste de hipóteses contra CSR.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos."
              },
              "max_distance": {
                "label": "Distância máxima",
                "description": "Distância máxima."
              },
              "num_distances": {
                "label": "Número de distâncias",
                "description": "Classes de distância."
              },
              "num_simulations": {
                "label": "Número de simulações",
                "description": "Réplicas de Monte Carlo."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Nível de significância."
              },
              "output": {
                "label": "Saída",
                "description": "CSV de saída."
              }
            }
          },
          "inhomogeneous_baseline": {
            "name": "Linha de base não homogênea",
            "description": "Estima a superfície de intensidade e calcula a função K corrigida pela intensidade.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos."
              },
              "max_distance": {
                "label": "Distância máxima",
                "description": "Distância máxima."
              },
              "num_distances": {
                "label": "Número de distâncias",
                "description": "Classes de distância."
              },
              "bandwidth": {
                "label": "Largura de banda",
                "description": "Largura de banda do KDE (seleção automática se omitida)."
              },
              "output": {
                "label": "Saída",
                "description": "CSV de saída."
              }
            }
          },
          "hotspot_vs_process": {
            "name": "Ponto quente versus processo",
            "description": "Compara os padrões de pontos quentes com a intensidade subjacente do processo pontual.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos."
              },
              "hotspot_field": {
                "label": "Campo de hotspot",
                "description": "Campo de classificação de hotspots."
              },
              "intensity_field": {
                "label": "Campo de intensidade",
                "description": "Campo de intensidade."
              },
              "output": {
                "label": "Saída",
                "description": "CSV de saída."
              }
            }
          },
          "point_process_residuals_comparison": {
            "name": "Comparação de resíduos de processos pontuais",
            "description": "Calcula diagnósticos de resíduos para verificar a adequação do modelo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos."
              },
              "observed_field": {
                "label": "Campo observado",
                "description": "Campo de valores observados."
              },
              "predicted_field": {
                "label": "Campo predito",
                "description": "Campo de valores preditos."
              },
              "residual_type": {
                "label": "Tipo de resíduo",
                "description": "Tipo de resíduo."
              },
              "output": {
                "label": "Saída",
                "description": "CSV de saída."
              }
            }
          },
          "construct_vector_tin": {
            "name": "Construir TIN vetorial",
            "description": "Constrói uma rede triangular irregular (TIN) a partir de um conjunto de pontos de entrada usando a triangulação de Delaunay.",
            "params": {
              "input_points": {
                "label": "Pontos de entrada",
                "description": "Camada vetorial de pontos ou multipontos de entrada."
              },
              "field_name": {
                "label": "Nome do campo",
                "description": "Nome opcional do campo para as alturas dos vértices (campo numérico)."
              },
              "use_z": {
                "label": "Usar Z",
                "description": "Se verdadeiro, usa os valores Z da geometria para as elevações dos triângulos."
              },
              "max_triangle_edge_length": {
                "label": "Comprimento máximo da aresta do triângulo",
                "description": "Comprimento máximo permitido da aresta do triângulo (filtra arestas longas). Use 0 ou negativo para sem limite."
              },
              "output": {
                "label": "Saída",
                "description": "Camada vetorial de polígonos de saída (TIN)."
              }
            }
          },
          "contours_from_points": {
            "name": "Curvas de nível a partir de pontos",
            "description": "Cria polilinhas de curvas de nível a partir de elevações de pontos usando um TIN de Delaunay.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de pontos ou multipontos de entrada."
              },
              "base": {
                "label": "Base",
                "description": "Elevação da curva de nível base (padrão 0.0)."
              },
              "field_name": {
                "label": "Nome do campo",
                "description": "Campo de atributo numérico contendo os valores de elevação (ignorado quando use_z_values=true)."
              },
              "interval": {
                "label": "Intervalo",
                "description": "Valor do intervalo das curvas de nível (padrão 10.0)."
              },
              "max_triangle_edge_length": {
                "label": "Comprimento máximo da aresta do triângulo",
                "description": "Comprimento máximo da aresta do triângulo a incluir no traçado das curvas de nível (unidades do mapa)."
              },
              "smooth": {
                "label": "Suavizar",
                "description": "Tamanho do filtro de suavização (inteiro ímpar, padrão 9)."
              },
              "use_z_values": {
                "label": "Usar valores Z",
                "description": "Usa os valores Z da geometria como elevações (padrão false)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "contours_from_raster": {
            "name": "Curvas de nível a partir de raster",
            "description": "Cria polilinhas de curvas de nível a partir de um modelo de superfície raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de superfície de entrada ou objeto raster tipado."
              },
              "base": {
                "label": "Base",
                "description": "Elevação da curva de nível base (padrão 0.0)."
              },
              "interval": {
                "label": "Intervalo",
                "description": "Valor do intervalo das curvas de nível (padrão 10.0)."
              },
              "smooth": {
                "label": "Suavizar",
                "description": "Tamanho do filtro de suavização (inteiro ímpar, padrão 9)."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Ângulo mínimo de deflexão das linhas em graus para a simplificação (padrão 10.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "extract_nodes": {
            "name": "Extrair nós",
            "description": "Converte os vértices de polilinhas e polígonos em feições de pontos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polilinhas ou polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída."
              }
            }
          },
          "extract_raster_values_at_points": {
            "name": "Extrair valores raster em pontos",
            "description": "Amostra um ou mais rasters nas posições dos pontos e grava os valores nos atributos dos pontos.",
            "params": {
              "rasters": {
                "label": "Rasters",
                "description": "Caminhos dos rasters de entrada como matriz ou cadeia delimitada."
              },
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída."
              }
            }
          },
          "find_lowest_or_highest_points": {
            "name": "Encontrar pontos mais baixos ou mais altos",
            "description": "Localiza as células raster mais baixas e/ou mais altas e gera suas posições como pontos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada."
              },
              "out_type": {
                "label": "Tipo de saída",
                "description": "Tipo de saída: lowest, highest ou both."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída."
              }
            }
          },
          "hexagonal_grid_from_raster_base": {
            "name": "Malha hexagonal com base raster",
            "description": "Cria uma grade de polígonos hexagonais com largura e orientação configuráveis, fornecendo uma tesselação sem viés para mapas de calor e agregação.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Raster base que controla a extensão da grade."
              },
              "width": {
                "label": "Largura",
                "description": "Largura do hexágono em unidades do mapa."
              },
              "orientation": {
                "label": "Orientação",
                "description": "Orientação do hexágono: horizontal ou vertical."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída."
              }
            }
          },
          "hexagonal_grid_from_vector_base": {
            "name": "Malha hexagonal com base vetorial",
            "description": "Cria uma grade de polígonos hexagonais alinhada à extensão de uma camada vetorial, permitindo agregação espacial sem viés e visualização de densidade.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Camada vetorial base que controla a extensão da grade."
              },
              "width": {
                "label": "Largura",
                "description": "Largura do hexágono em unidades do mapa."
              },
              "orientation": {
                "label": "Orientação",
                "description": "Orientação do hexágono: horizontal ou vertical."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída."
              }
            }
          },
          "layer_footprint_raster": {
            "name": "Contorno da camada raster",
            "description": "Cria um contorno poligonal que representa a extensão completa de um raster de entrada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída."
              }
            }
          },
          "layer_footprint_vector": {
            "name": "Contorno da camada vetorial",
            "description": "Cria um contorno poligonal que representa a extensão delimitadora completa de uma camada vetorial de entrada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída."
              }
            }
          },
          "medoid": {
            "name": "Medoide",
            "description": "Calcula os pontos medoides a partir de geometrias vetoriais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos medoides de saída."
              }
            }
          },
          "random_points_in_polygon": {
            "name": "Pontos aleatórios em polígono",
            "description": "Gera pontos aleatórios distribuídos uniformemente dentro das geometrias poligonais de entrada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de polígonos de entrada."
              },
              "num_points": {
                "label": "Número de pontos",
                "description": "Número de pontos aleatórios a criar."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente opcional do RNG para reprodutibilidade."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "rectangular_grid_from_raster_base": {
            "name": "Malha retangular com base raster",
            "description": "Cria uma grade de polígonos retangulares que cobre a extensão de um raster.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Raster base que controla a extensão da grade."
              },
              "width": {
                "label": "Largura",
                "description": "Largura da célula da grade em unidades do mapa."
              },
              "height": {
                "label": "Altura",
                "description": "Altura da célula da grade em unidades do mapa."
              },
              "x_origin": {
                "label": "Origem X",
                "description": "Origem x opcional para o alinhamento da grade."
              },
              "y_origin": {
                "label": "Origem Y",
                "description": "Origem y opcional para o alinhamento da grade."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída."
              }
            }
          },
          "rectangular_grid_from_vector_base": {
            "name": "Malha retangular com base vetorial",
            "description": "Cria uma grade de polígonos retangulares que cobre a extensão delimitadora de uma camada vetorial.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Camada vetorial base que controla a extensão da grade."
              },
              "width": {
                "label": "Largura",
                "description": "Largura da célula da grade em unidades do mapa."
              },
              "height": {
                "label": "Altura",
                "description": "Altura da célula da grade em unidades do mapa."
              },
              "x_origin": {
                "label": "Origem X",
                "description": "Origem x opcional para o alinhamento da grade."
              },
              "y_origin": {
                "label": "Origem Y",
                "description": "Origem y opcional para o alinhamento da grade."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída."
              }
            }
          },
          "vector_hex_binning": {
            "name": "Agrupamento hexagonal vetorial",
            "description": "Agrega feições de pontos em células hexagonais, contando os pontos por célula hexagonal.",
            "params": {
              "vector_points": {
                "label": "Pontos vetoriais",
                "description": "Camada vetorial de pontos ou multipontos de entrada."
              },
              "width": {
                "label": "Largura",
                "description": "Largura do hexágono (distância entre lados opostos)."
              },
              "orientation": {
                "label": "Orientação",
                "description": "Orientação do hexágono: 'h' para horizontal (vértice para cima) ou 'v' para vertical (lado plano para cima)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de polígonos hexagonais de saída com contagens."
              }
            }
          },
          "voronoi_diagram": {
            "name": "Diagrama de Voronoi",
            "description": "Cria polígonos de Voronoi (Thiessen) a partir das posições dos pontos de entrada.",
            "params": {
              "input_points": {
                "label": "Pontos de entrada",
                "description": "Camada vetorial de pontos ou multipontos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de Voronoi de saída."
              }
            }
          },
          "add_field": {
            "name": "Adicionar campo",
            "description": "Adiciona um novo campo de atributo com um valor padrão opcional.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "field": {
                "label": "Campo",
                "description": "Nome do novo campo."
              },
              "field_type": {
                "label": "Tipo de campo",
                "description": "Tipo do campo: integer, float, text, boolean."
              },
              "default": {
                "label": "Padrão",
                "description": "Valor padrão opcional."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "add_geometry_attributes": {
            "name": "Adicionar atributos de geometria",
            "description": "Calcula automaticamente propriedades geométricas (área, comprimento, perímetro, centroide) e as adiciona como novos campos, com suporte a medições planas e geodésicas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "measurement_mode": {
                "label": "Modo de medição",
                "description": "Método de medição: auto (padrão), planar ou geodesic."
              },
              "area": {
                "label": "Área",
                "description": "Inclui o campo de área (AREA_M2 para geodésico, AREA_MAP2 para planar)."
              },
              "length": {
                "label": "Comprimento",
                "description": "Inclui o campo de comprimento (LENGTH_M para geodésico, LENGTH_MAP para planar)."
              },
              "perimeter": {
                "label": "Perímetro",
                "description": "Inclui o campo de perímetro (PERIM_M para geodésico, PERIM_MAP para planar)."
              },
              "centroid": {
                "label": "Centroide",
                "description": "Inclui os campos X/Y do centroide (padrão true)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "attribute_correlation": {
            "name": "Correlação de atributos",
            "description": "Realiza a análise de correlação de Pearson em campos de atributos vetoriais numéricos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída do relatório HTML (alias: output_html_file)."
              }
            }
          },
          "attribute_histogram": {
            "name": "Histograma de atributos",
            "description": "Cria um histograma para os valores de um campo numérico em uma tabela de atributos vetorial.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de entrada."
              },
              "field": {
                "label": "Campo",
                "description": "Nome do campo de atributo numérico."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída do relatório HTML (alias: output_html_file)."
              }
            }
          },
          "attribute_scattergram": {
            "name": "Diagrama de dispersão de atributos",
            "description": "Calcula estatísticas resumidas de diagrama de dispersão entre dois campos vetoriais numéricos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de entrada."
              },
              "fieldx": {
                "label": "Campo X",
                "description": "Nome do campo numérico do eixo x."
              },
              "fieldy": {
                "label": "Campo Y",
                "description": "Nome do campo numérico do eixo y."
              },
              "trendline": {
                "label": "Linha de tendência",
                "description": "Inclui o resumo da linha de tendência (padrão false)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída do relatório HTML (alias: output_html_file)."
              }
            }
          },
          "delete_field": {
            "name": "Excluir campo",
            "description": "Exclui um ou mais campos de atributos de uma camada vetorial.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "fields": {
                "label": "Campos",
                "description": "Nomes dos campos a excluir, delimitados por vírgula."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "extract_by_attribute": {
            "name": "Extrair por atributo",
            "description": "Extrai as feições vetoriais que satisfazem uma expressão de atributos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "statement": {
                "label": "Instrução",
                "description": "Expressão booleana avaliada contra os campos de atributo; aceita os aliases AND/OR/NOT/XOR no estilo SQL."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "field_calculator": {
            "name": "Calculadora de campos",
            "description": "Calcula o valor de um campo a partir de uma expressão usando atributos das feições e variáveis de geometria; suporta CASE, CAST, verificações de nulos e wrappers UPDATE ... SET ... [WHERE ...] no estilo SQL.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "field": {
                "label": "Campo",
                "description": "Nome do campo de saída."
              },
              "field_type": {
                "label": "Tipo de campo",
                "description": "Tipo do campo de saída: float, integer, text."
              },
              "expression": {
                "label": "Expressão",
                "description": "Expressão avaliada por feição. Suporta CASE no estilo SQL, CAST(... AS tipo), IS NULL/IS NOT NULL e invólucros UPDATE ... SET CAMPO = ... [WHERE ...]."
              },
              "overwrite": {
                "label": "Sobrescrever",
                "description": "Sobrescreve o campo existente, se presente (padrão true)."
              },
              "preview_rows": {
                "label": "Linhas de pré-visualização",
                "description": "Número opcional de linhas de pré-visualização a retornar na carga do resultado. Quando > 0, a saída pode ser omitida para avaliação apenas de pré-visualização."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída. Opcional quando preview_rows > 0."
              }
            }
          },
          "filter_vector_features_by_area": {
            "name": "Filtrar feições vetoriais por área",
            "description": "Filtra as feições poligonais abaixo de um limiar mínimo de área.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Área mínima do polígono a reter, em unidades de coordenadas da camada ao quadrado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "list_unique_values": {
            "name": "Listar valores únicos",
            "description": "Lista os valores únicos e suas frequências em um campo de atributo vetorial.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de entrada."
              },
              "field": {
                "label": "Campo",
                "description": "Nome do campo de atributo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do CSV de saída."
              }
            }
          },
          "rename_field": {
            "name": "Renomear campo",
            "description": "Renomeia um campo de atributo em uma camada vetorial.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "field": {
                "label": "Campo",
                "description": "Nome do campo existente."
              },
              "new_field": {
                "label": "Novo campo",
                "description": "Nome do campo de substituição."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "download_osm_vector": {
            "name": "Baixar vetorial do OSM",
            "description": "Baixa feições do OpenStreetMap da Overpass API para uma caixa delimitadora e grava o resultado como uma camada vetorial.",
            "params": {
              "west": {
                "label": "Oeste",
                "description": "Longitude do limite oeste (EPSG:4326)."
              },
              "south": {
                "label": "Sul",
                "description": "Latitude do limite sul (EPSG:4326)."
              },
              "east": {
                "label": "Leste",
                "description": "Longitude do limite leste (EPSG:4326)."
              },
              "north": {
                "label": "Norte",
                "description": "Latitude do limite norte (EPSG:4326)."
              },
              "input_extent_epsg": {
                "label": "EPSG da extensão de entrada",
                "description": "Código EPSG da extensão de entrada oeste/sul/leste/norte (padrão 4326)."
              },
              "filter_preset": {
                "label": "Predefinição de filtro",
                "description": "Predefinição de classe de feições: all, roads, buildings, water, landuse, trails, parks, rail, amenities, boundaries, transit, poi (padrão all)."
              },
              "include_tags": {
                "label": "Incluir tags",
                "description": "Lista de filtro de chaves de tags delimitada por ponto e vírgula, por exemplo amenity;shop."
              },
              "include_key_values": {
                "label": "Incluir pares chave-valor",
                "description": "Lista de filtro chave=valor delimitada por ponto e vírgula, por exemplo amenity=school;building=yes."
              },
              "filter_key": {
                "label": "Chave do filtro",
                "description": "Filtro legado de chave de tag única (obsoleto; use include_tags)."
              },
              "filter_key_value": {
                "label": "Valor da chave do filtro",
                "description": "Filtro legado de chave=valor única (obsoleto; use include_key_values)."
              },
              "include_points": {
                "label": "Incluir pontos",
                "description": "Inclui feições de nós OSM com tags como geometrias Point (padrão true)."
              },
              "include_lines": {
                "label": "Incluir linhas",
                "description": "Inclui feições de vias OSM como geometrias LineString (padrão true)."
              },
              "include_polygons": {
                "label": "Incluir polígonos",
                "description": "Inclui vias OSM fechadas com tags de área como geometrias Polygon (padrão true)."
              },
              "clip_to_extent": {
                "label": "Recortar pela extensão",
                "description": "Recorta as geometrias de saída pela extensão da caixa delimitadora da consulta (padrão true)."
              },
              "split_output_by_geometry": {
                "label": "Dividir saída por geometria",
                "description": "Grava saídas separadas por tipo de geometria (<output>_points|lines|polygons.ext)."
              },
              "output_epsg": {
                "label": "EPSG de saída",
                "description": "Reprojeta a saída para este código EPSG; omita para manter EPSG:4326."
              },
              "overpass_profile": {
                "label": "Perfil do Overpass",
                "description": "Perfil do ponto de acesso Overpass: main, kumi, fr ou custom (padrão main)."
              },
              "overpass_url": {
                "label": "URL do Overpass",
                "description": "URL do ponto de acesso da API Overpass (padrão https://overpass-api.de/api/interpreter)."
              },
              "timeout_seconds": {
                "label": "Tempo limite (segundos)",
                "description": "Tempo limite da consulta em segundos (padrão 25)."
              },
              "max_elements": {
                "label": "Máximo de elementos",
                "description": "Número máximo de elementos Overpass retornados antes de gerar um erro (padrão 50 000)."
              },
              "chunk_large_aoi": {
                "label": "Dividir AOI grande em blocos",
                "description": "Divide automaticamente AOIs maiores em várias requisições Overpass (padrão true)."
              },
              "chunk_max_area_deg2": {
                "label": "Área máxima do bloco (graus²)",
                "description": "Área máxima por bloco em graus quadrados ao dividir em blocos (padrão 4.0)."
              },
              "max_chunk_count": {
                "label": "Número máximo de blocos",
                "description": "Limite rígido da contagem de blocos ao dividir AOIs grandes (padrão 64)."
              },
              "chunk_parallel_requests": {
                "label": "Requisições paralelas por bloco",
                "description": "Máximo de requisições de blocos em paralelo para AOIs grandes (padrão 1 = sequencial)."
              },
              "cache_dir": {
                "label": "Diretório de cache",
                "description": "Diretório opcional para armazenar em cache as respostas JSON do Overpass por hash de ponto de acesso+consulta."
              },
              "cache_ttl_hours": {
                "label": "TTL do cache (horas)",
                "description": "Tempo de vida do cache em horas (padrão 24; 0 significa sem verificação de expiração)."
              },
              "provenance_output": {
                "label": "Saída de proveniência",
                "description": "Caminho JSON opcional para gravar o arquivo auxiliar de metadados de consulta/proveniência."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída; quando omitido, uma saída temporária é usada."
              }
            }
          },
          "assign_projection_lidar": {
            "name": "Atribuir projeção ao LiDAR",
            "description": "Atribui um sistema de referência de coordenadas a uma nuvem de pontos LiDAR sem reprojetar seus pontos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo LiDAR de entrada (LAS/LAZ/COPC, ou identificador em memória)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Código EPSG do CRS a atribuir, por exemplo 4326 (WGS84) ou 3857 (Web Mercator). As coordenadas não são transformadas."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do LiDAR de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "assign_projection_raster": {
            "name": "Atribuir projeção ao raster",
            "description": "Atribui um sistema de referência de coordenadas a um raster sem deformar suas células.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada (ou identificador em memória)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Código EPSG do CRS a atribuir, por exemplo 4326 (WGS84) ou 3857 (Web Mercator). As coordenadas não são transformadas."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "assign_projection_vector": {
            "name": "Atribuir projeção ao vetorial",
            "description": "Atribui um sistema de referência de coordenadas a uma camada vetorial sem reprojetar suas geometrias.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de entrada, formato detectado automaticamente (ou identificador em memória)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Código EPSG do CRS a atribuir, por exemplo 4326 (WGS84) ou 3857 (Web Mercator). As coordenadas não são transformadas."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              }
            }
          },
          "georeference_raster_from_control_points": {
            "name": "Georreferenciar raster a partir de pontos de controle",
            "description": "Ajusta uma transformação a partir de GCPs e deforma um raster para uma saída georreferenciada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "control_points": {
                "label": "Pontos de controle",
                "description": "Caminho do CSV de pontos de controle com pixel_x,pixel_y,map_x,map_y (e aliases aceitos)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Código EPSG de destino."
              },
              "transform_type": {
                "label": "Tipo de transformação",
                "description": "Tipo de transformação: affine, projective, polynomial ou thin_plate_spline."
              },
              "transform_order": {
                "label": "Ordem da transformação",
                "description": "Ordem do polinômio quando transform_type=polynomial."
              },
              "resample": {
                "label": "Reamostrar",
                "description": "Método de reamostragem; padrão bilinear."
              },
              "allow_auto_downgrade": {
                "label": "Permitir rebaixamento automático",
                "description": "Permite o rebaixamento automático para uma transformação mais simples quando os GCPs são esparsos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster georreferenciado de saída."
              },
              "report": {
                "label": "Relatório",
                "description": "Caminho do JSON do relatório de saída."
              }
            }
          },
          "reproject_lidar": {
            "name": "Reprojetar LiDAR",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Entrada"
              },
              "dst_epsg": {
                "label": "EPSG de destino",
                "description": "EPSG de destino"
              },
              "output": {
                "label": "Saída",
                "description": "Saída"
              },
              "use_3d_transform": {
                "label": "Usar transformação 3D",
                "description": "Usar transformação 3D"
              },
              "failure_policy": {
                "label": "Política de falha",
                "description": "Política de falha"
              },
              "coordinate_epoch": {
                "label": "Época das coordenadas",
                "description": "Época das coordenadas"
              },
              "source_reference_epoch": {
                "label": "Época de referência de origem",
                "description": "Época de referência de origem"
              },
              "target_reference_epoch": {
                "label": "Época de referência de destino",
                "description": "Época de referência de destino"
              },
              "operation_code": {
                "label": "Código da operação",
                "description": "Código da operação"
              },
              "prefer_official_operation": {
                "label": "Preferir operação oficial",
                "description": "Preferir operação oficial"
              },
              "epoch_policy": {
                "label": "Política de época",
                "description": "Política de época"
              }
            }
          },
          "reproject_raster": {
            "name": "Reprojetar raster",
            "description": "Reprojeta (deforma) um raster para um sistema de referência de coordenadas EPSG de destino.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada. Deve conter um CRS de origem (EPSG ou WKT)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Código EPSG de destino, por exemplo 3857 (Web Mercator) ou 4326 (WGS84)."
              },
              "method": {
                "label": "Método",
                "description": "Método de reamostragem: nearest (padrão), bilinear, cubic, lanczos, average, min, max, mode, median."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "reproject_vector": {
            "name": "Reprojetar vetorial",
            "description": "Reprojeta geometrias vetoriais para uma projeção EPSG de destino preservando a topologia e os atributos, permitindo a integração de múltiplas fontes.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Código EPSG de destino."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "orthorectification": {
            "name": "Ortorretificação",
            "description": "Correção geométrica de imagens brutas baseada em DEM usando o modelo de câmera RPC. Remove o deslocamento devido ao relevo do terreno para gerar uma ortoimagem georreferenciada.",
            "params": {
              "input_raster": {
                "label": "Raster de entrada",
                "description": "Caminho do raster de imagem bruta (não corrigida) de entrada. Os metadados RPC devem estar embutidos no arquivo ou presentes em um arquivo auxiliar .RPB adjacente."
              },
              "input_dem": {
                "label": "DEM de entrada",
                "description": "Raster DEM usado para obter a elevação do terreno para cada pixel de saída. Deve cobrir toda a extensão da cena. Se não estiver em coordenadas geográficas, a ferramenta reprojeta conforme necessário."
              },
              "output_epsg": {
                "label": "EPSG de saída",
                "description": "Código EPSG do sistema de referência de coordenadas de saída (padrão 4326 geográfico; especifique um CRS projetado como 32617 para a zona UTM 17N)."
              },
              "output_resolution": {
                "label": "Resolução de saída",
                "description": "Resolução do pixel de saída nas unidades do CRS de saída (por exemplo, graus para geográfico, metros para projetado). O padrão é o GSD aproximado da imagem de entrada."
              },
              "resample_method": {
                "label": "Método de reamostragem",
                "description": "Método de reamostragem da saída: nearest, bilinear (padrão), cubic."
              },
              "nodata_value": {
                "label": "Valor nodata",
                "description": "Valor nodata a atribuir aos pixels sem cobertura de origem válida (padrão igual ao da entrada)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de ortoimagem de saída."
              }
            }
          },
          "average_flowpath_slope": {
            "name": "Declividade média do caminho de fluxo",
            "description": "Calcula a declividade média dos caminhos de fluxo que passam por cada célula do DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM sem depressões de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "average_upslope_flowpath_length": {
            "name": "Comprimento médio do caminho de fluxo a montante",
            "description": "Calcula o comprimento médio dos caminhos de fluxo a montante que passam por cada célula do DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM sem depressões de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "d8_flow_accum": {
            "name": "Acumulação de fluxo D8",
            "description": "Calcula a acumulação de fluxo D8 a partir de um DEM ou de um raster de ponteiros D8.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster DEM ou de ponteiro D8 de entrada"
              },
              "clip": {
                "label": "Recortar",
                "description": "Máximo de exibição com corte (aceito por compatibilidade)"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Usa a codificação de ponteiro ESRI para entradas de ponteiro"
              },
              "input_is_pointer": {
                "label": "Entrada é ponteiro",
                "description": "Trata a entrada como raster de ponteiro D8"
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica da saída"
              },
              "out_type": {
                "label": "Tipo de saída",
                "description": "Tipo de saída: cells, ca ou sca"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "d8_mass_flux": {
            "name": "Fluxo de massa D8",
            "description": "Realiza uma acumulação de fluxo de massa baseada em D8 usando rasters de carga, eficiência e absorção.",
            "params": {
              "absorption": {
                "label": "Absorção",
                "description": "Raster de perdas de massa por célula em unidades de carga."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM sem depressões de entrada usado para derivar as direções de fluxo D8."
              },
              "efficiency": {
                "label": "Eficiência",
                "description": "Raster de valores de eficiência de transferência, em `[0, 1]` ou em percentual."
              },
              "loading": {
                "label": "Carga",
                "description": "Raster de valores iniciais de carga de massa."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "d8_pointer": {
            "name": "Ponteiro D8",
            "description": "Direção de fluxo pela descida mais íngreme entre 8 vizinhos (N/NE/E/SE/S/SW/W/NW). Base para a análise hidrológica D8 e a delimitação de bacias hidrográficas.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Usa a codificação de ponteiro ESRI"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "dinf_flow_accum": {
            "name": "Acumulação de fluxo D-infinito",
            "description": "Calcula a acumulação de fluxo D-Infinito a partir de um DEM ou de um raster de ponteiros D-Infinito.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster DEM ou de ponteiro D-infinito de entrada"
              },
              "clip": {
                "label": "Recortar",
                "description": "Máximo de exibição com corte (aceito por compatibilidade)"
              },
              "convergence_threshold": {
                "label": "Limiar de convergência",
                "description": "Limiar acima do qual o fluxo não é disperso"
              },
              "input_is_pointer": {
                "label": "Entrada é ponteiro",
                "description": "Trata a entrada como raster de ponteiro D-infinito"
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica da saída"
              },
              "out_type": {
                "label": "Tipo de saída",
                "description": "Tipo de saída: cells, ca ou sca"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "dinf_mass_flux": {
            "name": "Fluxo de massa D-infinito",
            "description": "Realiza uma acumulação de fluxo de massa D-Infinito usando rasters de carga, eficiência e absorção.",
            "params": {
              "absorption": {
                "label": "Absorção",
                "description": "Raster de absorção de entrada em unidades de carga."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "efficiency": {
                "label": "Eficiência",
                "description": "Raster de eficiência de entrada (valores `0-1` ou em percentual)."
              },
              "loading": {
                "label": "Carga",
                "description": "Raster de carga de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "dinf_pointer": {
            "name": "Ponteiro D-infinito",
            "description": "Direções de fluxo contínuas (0-2π radianos) que eliminam o viés diagonal do D8. Melhor para a modelagem do transporte de sedimentos e do fluxo divergente.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "downslope_flowpath_length": {
            "name": "Comprimento do caminho de fluxo a jusante",
            "description": "Calcula o comprimento do caminho de fluxo a jusante de cada célula até um exutório em um raster de ponteiros D8.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro D8 de entrada"
              },
              "watersheds": {
                "label": "Bacias hidrográficas",
                "description": "Raster de bacias hidrográficas opcional"
              },
              "weights": {
                "label": "Pesos",
                "description": "Raster opcional de ponderação de distância por célula"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Usa a codificação de ponteiro ESRI"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "fd8_flow_accum": {
            "name": "Acumulação de fluxo FD8",
            "description": "Calcula a acumulação de fluxo FD8 a partir de um DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada"
              },
              "clip": {
                "label": "Recortar",
                "description": "Máximo de exibição com corte (aceito por compatibilidade)"
              },
              "exponent": {
                "label": "Expoente",
                "description": "Expoente de ponderação da declividade"
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica da saída"
              },
              "out_type": {
                "label": "Tipo de saída",
                "description": "Tipo de saída: cells, ca ou sca"
              },
              "threshold": {
                "label": "Limiar",
                "description": "Limiar"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "fd8_pointer": {
            "name": "Ponteiro FD8",
            "description": "Fluxo fracionado para múltiplos vizinhos a jusante, ponderado pelo gradiente. Melhor que o D8 para processos dispersivos e difusivos e para a conservação de massa.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "flow_accum_full_workflow": {
            "name": "Fluxo de trabalho completo de acumulação de fluxo",
            "description": "Executa um fluxo de trabalho completo de acumulação de fluxo não divergente e retorna o DEM rompido, o ponteiro de direção de fluxo e a acumulação.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "clip": {
                "label": "Recortar",
                "description": "Se verdadeiro, corta o máximo de exibição da acumulação (comportamento de compatibilidade)."
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Se verdadeiro, codifica a saída de direção de fluxo no estilo de ponteiro Esri."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Se verdadeiro, aplica transformação logarítmica aos valores de acumulação."
              },
              "out_type": {
                "label": "Tipo de saída",
                "description": "Um entre `\"cells\"`, `\"ca\"`, `\"sca\"` (padrão)."
              },
              "breached_dem_output": {
                "label": "Saída do DEM com rompimento",
                "description": "Caminho opcional de saída para o raster DEM sem depressões."
              },
              "flow_dir_output": {
                "label": "Saída da direção de fluxo",
                "description": "Caminho opcional de saída para o raster de direção de fluxo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o raster de acumulação de fluxo."
              },
              "output_pointer": {
                "label": "Ponteiro de saída",
                "description": "Caminho opcional de saída para o ponteiro de direção de fluxo D8 (alias de flow_dir_output; codificado em ESRI quando esri_pntr está definido)"
              }
            }
          },
          "flow_length_diff": {
            "name": "Diferença de comprimento de fluxo",
            "description": "Calcula as diferenças absolutas máximas locais no comprimento do caminho a jusante a partir de um raster de ponteiros D8.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro D8 de entrada."
              },
              "weights": {
                "label": "Pesos",
                "description": "Pesos"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Se verdadeiro, interpreta os valores do ponteiro usando a codificação D8 da ESRI."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "max_upslope_flowpath_length": {
            "name": "Comprimento máximo do caminho de fluxo a montante",
            "description": "Calcula o comprimento máximo dos caminhos de fluxo a montante que passam por cada célula do DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM sem depressões de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "max_upslope_value": {
            "name": "Valor máximo a montante",
            "description": "Propaga o valor máximo a montante ao longo dos caminhos de fluxo D8 sobre um DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada"
              },
              "values": {
                "label": "Valores",
                "description": "Raster de valores de entrada"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "mdinf_flow_accum": {
            "name": "Acumulação de fluxo MD-infinito",
            "description": "Acumulação por fluxo múltiplo com ponderação pelo gradiente de declividade (expoente 1.1). Equilibra o realismo da dispersão com a identificação do fluxo principal concentrado. Saídas: células, CA ou SCA.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "clip": {
                "label": "Recortar",
                "description": "Indicador de compatibilidade aceito pela API."
              },
              "convergence_threshold": {
                "label": "Limiar de convergência",
                "description": "Limiar acima do qual o fluxo não é disperso"
              },
              "exponent": {
                "label": "Expoente",
                "description": "Expoente de ponderação da declividade (padrão `1.1`)."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica da saída"
              },
              "out_type": {
                "label": "Tipo de saída",
                "description": "Um entre `\"cells\"`, `\"ca\"`, `\"sca\"` (padrão)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "minimal_dispersion_flow_algorithm": {
            "name": "Algoritmo de fluxo de dispersão mínima",
            "description": "Gera rasters de direção de fluxo e acumulação de fluxo MDFA a partir de um DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada"
              },
              "clip": {
                "label": "Recortar",
                "description": "Indicador de compatibilidade aceito pela API."
              },
              "debug_stats": {
                "label": "Estatísticas de depuração",
                "description": "Emite diagnósticos MDFA de uma linha (contagens e máximo bruto)"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Se verdadeiro, codifica a saída de direção de fluxo no estilo de ponteiro Esri."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Se verdadeiro, aplica transformação logarítmica aos valores de acumulação."
              },
              "out_type": {
                "label": "Tipo de saída",
                "description": "Um entre `\"cells\"`, `\"ca\"`, `\"sca\"` (padrão)."
              },
              "path_corrected_direction_preference": {
                "label": "Preferência de direção com correção de caminho",
                "description": "Parâmetro de preferência `p` em `[0, 1]`; `1.0` é totalmente não dispersivo."
              },
              "flow_dir_output": {
                "label": "Saída da direção de fluxo",
                "description": "Caminho opcional de saída para o raster de direção de fluxo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o raster de acumulação de fluxo."
              }
            }
          },
          "num_inflowing_neighbours": {
            "name": "Número de vizinhos afluentes",
            "description": "Conta o número de vizinhos D8 afluentes para cada célula do DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "qin_flow_accumulation": {
            "name": "Acumulação de fluxo de Qin",
            "description": "Calcula a acumulação de fluxo MFD de Qin a partir de um DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "clip": {
                "label": "Recortar",
                "description": "Indicador de compatibilidade aceito pela API."
              },
              "convergence_threshold": {
                "label": "Limiar de convergência",
                "description": "Limiar acima do qual o fluxo não é disperso"
              },
              "exponent": {
                "label": "Expoente",
                "description": "Parâmetro de expoente do limite superior (padrão `10.0`)."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica da saída"
              },
              "max_slope": {
                "label": "Declividade máxima",
                "description": "Declividade do limite superior em graus usada pela função de expoente dinâmico (padrão `45.0`)."
              },
              "out_type": {
                "label": "Tipo de saída",
                "description": "Um entre `\"cells\"`, `\"ca\"`, `\"sca\"` (padrão)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "quinn_flow_accumulation": {
            "name": "Acumulação de fluxo de Quinn",
            "description": "Calcula a acumulação de fluxo MFD de Quinn a partir de um DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "clip": {
                "label": "Recortar",
                "description": "Indicador de compatibilidade aceito pela API."
              },
              "convergence_threshold": {
                "label": "Limiar de convergência",
                "description": "Limiar acima do qual o fluxo não é disperso"
              },
              "exponent": {
                "label": "Expoente",
                "description": "Parâmetro de expoente (padrão `1.1`)."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica da saída"
              },
              "out_type": {
                "label": "Tipo de saída",
                "description": "Um entre `\"cells\"`, `\"ca\"`, `\"sca\"` (padrão)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "rho8_flow_accum": {
            "name": "Acumulação de fluxo Rho8",
            "description": "Calcula a acumulação de fluxo Rho8 a partir de um DEM ou de um raster de ponteiros Rho8.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "clip": {
                "label": "Recortar",
                "description": "Máximo de exibição com corte (aceito por compatibilidade)"
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica da saída"
              },
              "out_type": {
                "label": "Tipo de saída",
                "description": "Tipo de saída: cells, ca ou sca"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "rho8_pointer": {
            "name": "Ponteiro Rho8",
            "description": "Direção de fluxo única estocástica ponderada pelo gradiente de declividade. Execute múltiplas vezes para uma análise de ensemble que reduz os artefatos de canalização do D8.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "trace_downslope_flowpaths": {
            "name": "Traçar caminhos de fluxo a jusante",
            "description": "Marca os caminhos de fluxo D8 iniciados a partir de pontos-semente até uma célula sem fluxo ou a borda da grade.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro D8 de entrada."
              },
              "seed_points": {
                "label": "Pontos semente",
                "description": "Vetor de pontos de entrada das localizações semente."
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Se verdadeiro, interpreta os ponteiros D8 com a codificação ESRI."
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Se verdadeiro, o fundo é `0`; caso contrário, o fundo é NoData."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "breach_depressions_least_cost": {
            "name": "Romper depressões por menor custo",
            "description": "Rompe depressões em um DEM usando uma busca restrita de caminhos de menor custo.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "fill_deps": {
                "label": "Preencher depressões",
                "description": "Se verdadeiro, preenche as depressões não resolvidas após o rompimento."
              },
              "flat_increment": {
                "label": "Incremento de planura",
                "description": "Incremento de decremento monotônico opcional."
              },
              "max_cost": {
                "label": "Custo máximo",
                "description": "Custo máximo de rompimento permitido."
              },
              "max_dist": {
                "label": "Distância máxima",
                "description": "Distância máxima de busca em células."
              },
              "minimize_dist": {
                "label": "Minimizar distância",
                "description": "Se verdadeiro, pondera os custos de rompimento pela distância."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "breach_single_cell_pits": {
            "name": "Romper depressões de célula única",
            "description": "Rompe depressões de célula única em um DEM escavando canais de uma célula.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é retornado em memória quando suportado."
              }
            }
          },
          "burn_streams": {
            "name": "Gravar cursos d'água",
            "description": "Grava uma rede de cursos d'água em um DEM diminuindo as elevações das células de curso d'água.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Vetor de cursos d'água de entrada."
              },
              "decrement_value": {
                "label": "Valor de decremento",
                "description": "Decremento de elevação aplicado às células de cursos d'água (padrão 5.0)."
              },
              "gradient_distance": {
                "label": "Distância do gradiente",
                "description": "Distância do gradiente em células da grade (0 = apenas decremento plano; padrão 5)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do DEM gravado de saída."
              }
            }
          },
          "burn_streams_at_roads": {
            "name": "Gravar cursos d'água em estradas",
            "description": "Rebaixa as elevações dos cursos d'água perto de cruzamentos entre cursos d'água e estradas para romper os aterros rodoviários em um DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "roads": {
                "label": "Estradas",
                "description": "Camada vetorial de estradas."
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Camada vetorial de cursos d'água."
              },
              "method": {
                "label": "Método",
                "description": "Método"
              },
              "road_width": {
                "label": "Largura da estrada",
                "description": "Largura máxima do aterro em unidades do mapa usada para definir o alcance da gravação ao longo do curso d'água."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "depth_in_sink": {
            "name": "Profundidade na depressão",
            "description": "Mede a profundidade de cada célula do DEM abaixo de uma superfície com depressões preenchidas.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Se verdadeiro, atribui `0.0` às células fora dos sumidouros; caso contrário, atribui NoData."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "fill_burn": {
            "name": "Preencher e gravar",
            "description": "Impõe a hidrografia a um DEM gravando os cursos d'água e depois preenchendo as depressões.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Camada vetorial de cursos d'água de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "fill_depressions": {
            "name": "Preencher depressões",
            "description": "Preenche depressões em um DEM usando uma estratégia priority-flood com resolução de áreas planas de Garbrecht-Martz por padrão e resolução opcional de áreas planas pelo caminho natural legado.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "fix_flats": {
                "label": "Corrigir áreas planas",
                "description": "Se verdadeiro, impõe um pequeno gradiente nas áreas planas preenchidas."
              },
              "flat_increment": {
                "label": "Incremento de planura",
                "description": "Incremento de planura (padrão `0.0001`)."
              },
              "flat_resolution": {
                "label": "Resolução de áreas planas",
                "description": "Modo de resolução de áreas planas. Um entre `\"garbrecht_martz\"` ou `\"natural\"`."
              },
              "max_depth": {
                "label": "Profundidade máxima",
                "description": "Profundidade máxima de preenchimento permitida."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "fill_depressions_planchon_and_darboux": {
            "name": "Preencher depressões (Planchon e Darboux)",
            "description": "Preenche depressões em um DEM com uma interface compatível com Planchon e Darboux.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "fix_flats": {
                "label": "Corrigir áreas planas",
                "description": "Se verdadeiro, impõe um pequeno gradiente nas áreas planas preenchidas."
              },
              "flat_increment": {
                "label": "Incremento de planura",
                "description": "Incremento de planura (padrão `0.0001`)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "fill_depressions_wang_and_liu": {
            "name": "Preencher depressões (Wang e Liu)",
            "description": "Preenche depressões em um DEM com uma interface compatível com Wang e Liu.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "fix_flats": {
                "label": "Corrigir áreas planas",
                "description": "Se verdadeiro, impõe um pequeno gradiente nas áreas planas preenchidas."
              },
              "flat_increment": {
                "label": "Incremento de planura",
                "description": "Incremento de planura (padrão `0.0001`)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "fill_pits": {
            "name": "Preencher covas",
            "description": "Preenche depressões de célula única em um DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é retornado em memória quando suportado."
              }
            }
          },
          "flatten_lakes": {
            "name": "Aplanar lagos",
            "description": "Nivela as elevações dos lagos usando a elevação mínima do perímetro de cada polígono.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "lakes": {
                "label": "Lagos",
                "description": "Vetor de polígonos de entrada das feições de lagos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "impoundment_size_index": {
            "name": "Índice de tamanho de reservatório",
            "description": "Calcula métricas de represamento: profundidade média/máxima, volume, área e altura da barragem.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "max_dam_length": {
                "label": "Comprimento máximo da barragem",
                "description": "Comprimento máximo da barragem em unidades do mapa."
              },
              "output_area": {
                "label": "Saída de área",
                "description": "Inclui o raster de área inundada na tupla de saída."
              },
              "output_height": {
                "label": "Saída de altura",
                "description": "Inclui o raster de altura da barragem na tupla de saída."
              },
              "output_max": {
                "label": "Saída de máximo",
                "description": "Inclui o raster de profundidade máxima de inundação na tupla de saída."
              },
              "output_mean": {
                "label": "Saída de média",
                "description": "Inclui o raster de profundidade média de inundação na tupla de saída."
              },
              "output_volume": {
                "label": "Saída de volume",
                "description": "Inclui o raster de volume inundado na tupla de saída."
              },
              "out_area": {
                "label": "Área de saída",
                "description": "Caminho opcional de saída para o raster de área"
              },
              "out_dam_height": {
                "label": "Altura da barragem de saída",
                "description": "Caminho opcional de saída para o raster de altura da barragem"
              },
              "out_max": {
                "label": "Máximo de saída",
                "description": "Caminho opcional de saída para o raster de profundidade máxima"
              },
              "out_mean": {
                "label": "Média de saída",
                "description": "Caminho opcional de saída para o raster de profundidade média"
              },
              "out_volume": {
                "label": "Volume de saída",
                "description": "Caminho opcional de saída para o raster de volume"
              }
            }
          },
          "insert_dams": {
            "name": "Inserir barragens",
            "description": "Adiciona aterros de barragem locais em pontos especificados usando seleção da crista baseada em perfis.",
            "params": {
              "dam_points": {
                "label": "Pontos da barragem",
                "description": "Vetor de pontos de entrada das localizações das barragens."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "dam_length": {
                "label": "Comprimento da barragem",
                "description": "Comprimento máximo da barragem em unidades do mapa."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "raise_walls": {
            "name": "Erguer muros",
            "description": "Eleva as elevações do DEM ao longo de vetores de muros e, opcionalmente, rompe cruzamentos selecionados.",
            "params": {
              "breach_lines": {
                "label": "Linhas de rompimento",
                "description": "Vetor opcional que define as localizações de rompimento."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "walls": {
                "label": "Muros",
                "description": "Vetor de linhas ou polígonos de entrada que define os segmentos de muro."
              },
              "wall_height": {
                "label": "Altura do muro",
                "description": "Incremento de elevação aplicado às células de muro."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "sink": {
            "name": "Depressão",
            "description": "Identifica as células que pertencem a depressões topográficas em um DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Se verdadeiro, atribui `0.0` às células fora dos sumidouros; caso contrário, atribui NoData."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "stochastic_depression_analysis": {
            "name": "Análise estocástica de depressões",
            "description": "Executa perturbações de Monte Carlo no DEM e estima a probabilidade de pertencimento a depressões.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "iterations": {
                "label": "Iterações",
                "description": "Número de iterações de Monte Carlo."
              },
              "range": {
                "label": "Amplitude",
                "description": "Alcance de autocorrelação do erro em unidades do mapa."
              },
              "rmse": {
                "label": "RMSE",
                "description": "RMSE de elevação usado na perturbação gaussiana."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "topological_breach_burn": {
            "name": "Rompimento e gravação topológicos",
            "description": "Grava cursos d'água em um DEM, condiciona a superfície e retorna os rasters de cursos d'água, DEM, ponteiros e acumulação.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Vetor da rede de cursos d'água de entrada."
              },
              "snap_distance": {
                "label": "Distância de ajuste",
                "description": "Distância de ajuste opcional dos cursos d'água usada no escalonamento da profundidade de gravação."
              },
              "out_dem": {
                "label": "DEM de saída",
                "description": "Caminho opcional de saída para o DEM gravado/condicionado."
              },
              "out_dir": {
                "label": "Direção de saída",
                "description": "Caminho opcional de saída para o raster de ponteiro D8."
              },
              "out_fa": {
                "label": "Acumulação de fluxo de saída",
                "description": "Caminho opcional de saída para o raster de acumulação de fluxo."
              },
              "out_streams": {
                "label": "Cursos d'água de saída",
                "description": "Caminho opcional de saída para os cursos d'água rasterizados."
              }
            }
          },
          "upslope_depression_storage": {
            "name": "Armazenamento em depressões a montante",
            "description": "Mapeia a profundidade média de armazenamento em depressões a montante roteando a profundidade das depressões sobre um DEM condicionado.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "basins": {
            "name": "Bacias",
            "description": "Delimita todas as bacias de drenagem D8 que drenam para as bordas com dados válidos.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro D8 de entrada."
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Se verdadeiro, interpreta os valores do ponteiro usando a codificação D8 da ESRI."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "flood_order": {
            "name": "Ordem de inundação",
            "description": "Gera a ordem sequencial priority-flood de cada célula do DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "hillslopes": {
            "name": "Encostas",
            "description": "Identifica as regiões de encosta que drenam para cada trecho de curso d'água, separando as áreas das margens esquerda e direita.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro D8."
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Raster da rede de cursos d'água onde as células de curso d'água têm valor > 0 e não são NoData."
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Indicador de codificação de ponteiro ESRI."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "isobasins": {
            "name": "Isobacias",
            "description": "Divide uma paisagem em bacias hidrográficas de tamanho aproximadamente igual (isobacias) com base em um limiar de área-alvo.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM hidrologicamente condicionado de entrada."
              },
              "target_size": {
                "label": "Tamanho alvo",
                "description": "Área alvo da isobacia em número de células da grade (inteiro ou real positivo)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "jenson_snap_pour_points": {
            "name": "Ajustar pontos de exutório (Jenson)",
            "description": "Ajusta cada ponto de exutório à célula de curso d'água mais próxima dentro de uma distância de busca, preservando todos os atributos de entrada.",
            "params": {
              "pour_pts": {
                "label": "Pontos de exutório",
                "description": "Arquivo vetorial de entrada dos pontos de exutório (geometrias de ponto ou multiponto)."
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Raster da rede de cursos d'água de entrada onde as células de curso d'água têm valor > 0 e não são NoData."
              },
              "snap_dist": {
                "label": "Distância de ajuste",
                "description": "Raio máximo de busca em unidades do mapa. O padrão é a largura de uma célula quando omitido ou zero."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho de saída do arquivo vetorial de pontos de exutório ajustados (obrigatório; o padrão é `snapped_pour_points.geojson` no diretório de trabalho quando não fornecido ao invólucro)."
              }
            }
          },
          "longest_flowpath": {
            "name": "Caminho de fluxo mais longo",
            "description": "Delimita as linhas do caminho de fluxo mais longo para cada bacia em um raster de bacias.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada"
              },
              "basins": {
                "label": "Bacias",
                "description": "Raster de bacias de entrada"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída"
              }
            }
          },
          "max_branch_length": {
            "name": "Comprimento máximo de ramificação",
            "description": "Calcula o comprimento máximo de ramificação entre caminhos de fluxo D8 vizinhos, útil para destacar divisores de águas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Aplica a transformação por logaritmo natural às saídas positivas."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "snap_pour_points": {
            "name": "Ajustar pontos de exutório",
            "description": "Ajusta os pontos de exutório à célula de maior acumulação de fluxo dentro de uma distância de busca.",
            "params": {
              "flow_accum": {
                "label": "Acumulação de fluxo",
                "description": "Raster de acumulação de fluxo de entrada."
              },
              "pour_pts": {
                "label": "Pontos de exutório",
                "description": "Arquivo vetorial de entrada dos pontos de exutório (geometrias de ponto ou multiponto)."
              },
              "snap_dist": {
                "label": "Distância de ajuste",
                "description": "Raio máximo de busca em unidades do mapa. O padrão é a largura de uma célula quando omitido ou zero."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho de saída do arquivo vetorial de pontos de exutório ajustados (obrigatório; o padrão é `snapped_pour_points.geojson` no diretório de trabalho quando não fornecido ao invólucro)."
              }
            }
          },
          "subbasins": {
            "name": "Sub-bacias",
            "description": "Identifica a área de captação de cada trecho de curso d'água (sub-bacias) em uma rede de cursos d'água D8.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro D8 produzido por `d8_pointer`."
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Raster da rede de cursos d'água onde as células de curso d'água têm valor > 0 e não são NoData."
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Se verdadeiro, interpreta os valores do ponteiro usando a codificação ESRI. Padrão `False`."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "unnest_basins": {
            "name": "Desaninhar bacias",
            "description": "Cria um raster de bacias por nível de aninhamento dos pontos de exutório a partir de uma grade de ponteiros D8.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro D8 de entrada"
              },
              "pour_points": {
                "label": "Pontos de exutório",
                "description": "Vetor de pontos de exutório de entrada"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Interpreta os ponteiros no estilo ESRI"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho base opcional de saída para os rasters numerados"
              }
            }
          },
          "watershed": {
            "name": "Bacia hidrográfica",
            "description": "Delimita bacias hidrográficas a partir de um ponteiro D8 e de pontos de exutório vetoriais.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro D8 de entrada."
              },
              "pour_pts": {
                "label": "Pontos de exutório",
                "description": "Arquivo vetorial de entrada dos pontos de exutório (geometrias de ponto ou multiponto)."
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Se verdadeiro, interpreta os valores do ponteiro usando a codificação D8 da ESRI."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "watershed_from_raster_pour_points": {
            "name": "Bacia a partir de pontos de exutório raster",
            "description": "Delimita bacias hidrográficas a partir de um ponteiro D8 e de um raster de IDs de exutórios.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro D8 de entrada."
              },
              "pour_points": {
                "label": "Pontos de exutório",
                "description": "Raster de pontos de exutório; valores de célula não nulos e não NoData tornam-se IDs de exutório."
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Se verdadeiro, interpreta os valores do ponteiro usando a codificação D8 da ESRI."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "depth_to_water": {
            "name": "Profundidade até a água",
            "description": "Calcula a profundidade cartográfica até a água usando acumulação de menor custo a partir de feições-fonte de cursos d'água/lagos.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "stream_raster": {
                "label": "Raster de cursos d'água",
                "description": "Raster de cursos d'água"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "distance_to_outlet": {
            "name": "Distância até o exutório",
            "description": "Calcula a distância a jusante até o exutório para cada célula de curso d'água.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Fundo zero"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "downslope_distance_to_stream": {
            "name": "Distância a jusante até o curso d'água",
            "description": "Calcula a distância a jusante de cada célula do DEM até o curso d'água mais próximo ao longo dos caminhos de fluxo.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM sem depressões de entrada."
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Raster de cursos d'água de entrada; as células de curso d'água são valores `> 0` e não NoData."
              },
              "dinf": {
                "label": "D-infinito",
                "description": "Se verdadeiro, usa o roteamento D-infinito; caso contrário, usa o roteamento D8."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "downslope_index": {
            "name": "Índice a jusante",
            "description": "Calcula o índice de declive a jusante de Hjerdt et al. (2004) usando direções de fluxo D8.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "output_type": {
                "label": "Tipo de saída",
                "description": "Métrica de saída: tangent, degrees, radians, distance (padrão tangent)."
              },
              "vertical_drop": {
                "label": "Desnível vertical",
                "description": "Limiar de desnível vertical d para a travessia declive abaixo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "edge_contamination": {
            "name": "Contaminação de bordas",
            "description": "Identifica as células do DEM cuja área a montante se estende além da borda do DEM para os esquemas comuns de roteamento de fluxo.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM sem depressões de entrada."
              },
              "flow_type": {
                "label": "Tipo de fluxo",
                "description": "Método de roteamento a usar: um entre `\"d8\"`, `\"mfd\"`/`\"fd8\"` ou `\"dinf\"`."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de escala vertical opcional. Valores `<= 0` são tratados como `1.0`."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "elev_relative_to_watershed_min_max": {
            "name": "Elevação relativa ao mín-máx da bacia",
            "description": "Calcula a posição relativa da elevação de uma célula do DEM dentro de cada bacia hidrográfica, como porcentagem.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "watersheds": {
                "label": "Bacias hidrográficas",
                "description": "Caminho do raster de IDs de bacias hidrográficas ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "elevation_above_stream": {
            "name": "Elevação acima do curso d'água",
            "description": "Calcula a elevação acima do curso d'água mais próximo medida ao longo dos caminhos de fluxo a jusante.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM sem depressões de entrada."
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Raster de cursos d'água de entrada; as células de curso d'água são valores `> 0` e não NoData."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "elevation_above_stream_euclidean": {
            "name": "Elevação acima do curso d'água (euclidiana)",
            "description": "Calcula a elevação acima do curso d'água mais próximo usando a proximidade em linha reta (euclidiana).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Raster de cursos d'água de entrada; as células de curso d'água são valores `> 0` e não NoData."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "find_noflow_cells": {
            "name": "Encontrar células sem fluxo",
            "description": "Encontra as células do DEM que não têm nenhum vizinho D8 mais baixo.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "interior_only": {
                "label": "Apenas interior",
                "description": "Se verdadeiro, sinaliza apenas as células interiores verdadeiras sem fluxo (excluindo exutórios na borda do raster e adjacentes a NoData)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "find_parallel_flow": {
            "name": "Encontrar fluxo paralelo",
            "description": "Identifica as células de curso d'água que possuem direções de fluxo D8 paralelas.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro D8 de entrada."
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "hydrologic_connectivity": {
            "name": "Conectividade hidrológica",
            "description": "Calcula os índices de conectividade DUL e UDSA a partir de um DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "convergence_threshold": {
                "label": "Limiar de convergência",
                "description": "Limiar opcional de iniciação de cursos d'água em células contribuintes."
              },
              "exponent": {
                "label": "Expoente",
                "description": "Parâmetro de compatibilidade para o controle de dispersão."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de escala vertical opcional."
              },
              "output1": {
                "label": "Saída 1",
                "description": "Caminho opcional de saída para o raster DUL."
              },
              "output2": {
                "label": "Saída 2",
                "description": "Caminho opcional de saída para o raster UDSA."
              }
            }
          },
          "relative_stream_power_index": {
            "name": "Índice de potência relativa do curso d'água",
            "description": "Calcula o índice de potência relativa do escoamento a partir da área de captação específica e da declividade.",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Caminho do raster de área de captação específica ou objeto raster tipado."
              },
              "slope": {
                "label": "Declividade",
                "description": "Raster de declividade em graus."
              },
              "exponent": {
                "label": "Expoente",
                "description": "Expoente p da área de captação específica (padrão 1.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "sediment_transport_index": {
            "name": "Índice de transporte de sedimentos",
            "description": "Calcula o índice de transporte de sedimentos (fator LS) a partir da área de captação específica e da declividade.",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Caminho do raster de área de captação específica ou objeto raster tipado."
              },
              "slope": {
                "label": "Declividade",
                "description": "Raster de declividade em graus."
              },
              "sca_exponent": {
                "label": "Expoente da SCA",
                "description": "Expoente n da área de captação específica (padrão 0.4)."
              },
              "slope_exponent": {
                "label": "Expoente da declividade",
                "description": "Expoente m da declividade (padrão 1.3)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "wetness_index": {
            "name": "Índice de umidade",
            "description": "Calcula o índice topográfico de umidade ln(SCA / tan(slope)).",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Caminho do raster de área de captação específica ou objeto raster tipado."
              },
              "slope": {
                "label": "Declividade",
                "description": "Raster de declividade em graus."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "extract_streams": {
            "name": "Extrair cursos d'água",
            "description": "Extrai cursos d'água com base em um limiar de acumulação de fluxo.",
            "params": {
              "flow_accumulation": {
                "label": "Acumulação de fluxo",
                "description": "Raster de acumulação de fluxo de entrada."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Valor mínimo de acumulação necessário para fazer parte de um canal de curso d'água."
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Se verdadeiro, o fundo fora dos cursos d'água é 0 em vez de NoData."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de cursos d'água de saída."
              }
            }
          },
          "extract_valleys": {
            "name": "Extrair vales",
            "description": "Extrai vales a partir do DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "filter_size": {
                "label": "Tamanho do filtro",
                "description": "Tamanho do filtro"
              },
              "line_thin": {
                "label": "Afinamento de linhas",
                "description": "Afinamento de linhas"
              },
              "variant": {
                "label": "Variante",
                "description": "Variante"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "prune_vector_streams": {
            "name": "Podar cursos d'água vetoriais",
            "description": "Poda a rede vetorial de cursos d'água com base na magnitude de Shreve.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada usado para determinar a direção do fluxo"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Rede de cursos d'água vetorial de entrada"
              },
              "max_ridge_cutting_height": {
                "label": "Altura máxima de corte de cristas",
                "description": "Elevação máxima de subida permitida ao conectar ligações a jusante"
              },
              "snap_distance": {
                "label": "Distância de ajuste",
                "description": "Distância máxima de ajuste para a conectividade das extremidades"
              },
              "threshold": {
                "label": "Limiar",
                "description": "Magnitude de Shreve mínima a reter"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída"
              }
            }
          },
          "raster_streams_to_vector": {
            "name": "Cursos d'água raster para vetorial",
            "description": "Converte uma rede raster de cursos d'água em vetor.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "streams_raster": {
                "label": "Raster de cursos d'água",
                "description": "Raster de cursos d'água"
              },
              "all_vertices": {
                "label": "Todos os vértices",
                "description": "Todos os vértices"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "rasterize_streams": {
            "name": "Rasterizar cursos d'água",
            "description": "Rasteriza uma rede vetorial de cursos d'água.",
            "params": {
              "input_vector": {
                "label": "Vetor de entrada",
                "description": "Vetor de entrada"
              },
              "reference_raster": {
                "label": "Raster de referência",
                "description": "Raster de referência"
              },
              "use_feature_id": {
                "label": "Usar ID da feição",
                "description": "Usar ID da feição"
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Fundo zero"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "remove_short_streams": {
            "name": "Remover cursos d'água curtos",
            "description": "Remove os trechos de curso d'água mais curtos que o comprimento mínimo.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "min_length": {
                "label": "Comprimento mínimo",
                "description": "Comprimento mínimo"
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Fundo zero"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "repair_stream_vector_topology": {
            "name": "Reparar a topologia vetorial dos cursos d'água",
            "description": "Repara a topologia de uma rede vetorial de cursos d'água.",
            "params": {
              "input_vector": {
                "label": "Vetor de entrada",
                "description": "Vetor de entrada"
              },
              "snap": {
                "label": "Ajustar",
                "description": "Ajustar"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "river_centerlines": {
            "name": "Eixos de rio",
            "description": "Extrai as linhas centrais de rios a partir de um raster de água usando o eixo medial.",
            "params": {
              "raster": {
                "label": "Raster",
                "description": "Raster binário água/não água"
              },
              "min_length": {
                "label": "Comprimento mínimo",
                "description": "Comprimento mínimo da linha central em células do raster"
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio de busca (células) usado para conectar extremidades próximas"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas centrais de saída"
              }
            }
          },
          "farthest_channel_head": {
            "name": "Cabeceira de canal mais distante",
            "description": "Calcula a distância até a cabeceira de canal mais distante.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Fundo zero"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "find_main_stem": {
            "name": "Encontrar o canal principal",
            "description": "Identifica o curso principal da rede de cursos d'água.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Fundo zero"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "length_of_upstream_channels": {
            "name": "Comprimento dos canais a montante",
            "description": "Calcula o comprimento total dos canais a montante.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Fundo zero"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "long_profile": {
            "name": "Perfil longitudinal",
            "description": "Cria o perfil longitudinal do curso d'água.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "streams_raster": {
                "label": "Raster de cursos d'água",
                "description": "Raster de cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "long_profile_from_points": {
            "name": "Perfil longitudinal a partir de pontos",
            "description": "Cria um perfil longitudinal a partir de pontos vetoriais.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "points": {
                "label": "Pontos",
                "description": "Pontos"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "hack_stream_order": {
            "name": "Ordem de canais de Hack",
            "description": "Atribui a ordem de Hack às células de curso d'água.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Raster de cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Usa ponteiro no estilo ESRI"
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Atribui zero ao fundo"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "horton_ratios": {
            "name": "Razões de Horton",
            "description": "Calcula as razões de Horton de bifurcação, comprimento, área de drenagem e declividade.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "streams_raster": {
                "label": "Raster de cursos d'água",
                "description": "Raster binário de cursos d'água (positivo = curso d'água)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do relatório de texto de saída (opcional)."
              }
            }
          },
          "horton_stream_order": {
            "name": "Ordem de canais de Horton",
            "description": "Atribui a ordem de Horton às células de curso d'água.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Raster de cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Usa ponteiro no estilo ESRI"
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Atribui zero ao fundo"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "shreve_stream_magnitude": {
            "name": "Magnitude de canais de Shreve",
            "description": "Calcula a magnitude de Shreve dos cursos d'água.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Raster de cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Usa ponteiro no estilo ESRI"
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Atribui zero ao fundo"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "strahler_order_basins": {
            "name": "Bacias por ordem de Strahler",
            "description": "Delimita bacias hidrográficas rotuladas pela ordem de Horton-Strahler do trecho de curso d'água que as drena.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro D8."
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Raster da rede de cursos d'água onde as células de curso d'água têm valor > 0 e não são NoData."
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Indicador de codificação de ponteiro ESRI."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "strahler_stream_order": {
            "name": "Ordem de canais de Strahler",
            "description": "Atribui a ordem de Strahler às células de curso d'água.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Raster de cursos d'água (valores positivos = células de curso d'água)"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Usa valores de ponteiro no estilo ESRI (padrão: Whitebox)"
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Atribui zero ao fundo em vez de NoData"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "stream_link_class": {
            "name": "Classe do trecho de canal",
            "description": "Classifica os trechos de curso d'água como interiores, exteriores ou de nascente.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Fundo zero"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "stream_link_identifier": {
            "name": "Identificador do trecho de canal",
            "description": "Atribui um ID único a cada trecho de curso d'água.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Fundo zero"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "stream_link_length": {
            "name": "Comprimento do trecho de canal",
            "description": "Calcula o comprimento total de cada trecho de curso d'água.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "linkid": {
                "label": "ID do link",
                "description": "ID do link"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "stream_link_slope": {
            "name": "Declividade do trecho de canal",
            "description": "Calcula a declividade média de cada trecho de curso d'água.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "linkid": {
                "label": "ID do link",
                "description": "ID do link"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "stream_slope_continuous": {
            "name": "Declividade contínua do canal",
            "description": "Calcula o valor da declividade para cada célula de curso d'água.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Fundo zero"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "topological_stream_order": {
            "name": "Ordem topológica dos canais",
            "description": "Atribui a ordem topológica dos cursos d'água com base na contagem de trechos.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Fundo zero"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "tributary_identifier": {
            "name": "Identificador de afluentes",
            "description": "Atribui um ID único a cada afluente.",
            "params": {
              "d8_pntr": {
                "label": "Ponteiro D8",
                "description": "Raster de ponteiro de fluxo D8"
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Cursos d'água"
              },
              "esri_pntr": {
                "label": "Ponteiro ESRI",
                "description": "Ponteiro ESRI"
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Fundo zero"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "vector_stream_network_analysis": {
            "name": "Análise da rede vetorial de drenagem",
            "description": "Análise abrangente de redes vetoriais de cursos d'água.",
            "params": {
              "streams": {
                "label": "Cursos d'água",
                "description": "Camada vetorial da rede de cursos d'água de entrada."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster de elevação de entrada (DEM)."
              },
              "max_ridge_cutting_height": {
                "label": "Altura máxima de corte de cristas",
                "description": "Altura máxima permitida de corte de cristas."
              },
              "snap_distance": {
                "label": "Distância de ajuste",
                "description": "Tolerância de distância de ajuste para a limpeza da rede."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída."
              }
            }
          },
          "add_point_coordinates_to_table": {
            "name": "Adicionar coordenadas de pontos à tabela",
            "description": "Copia uma camada de pontos e anexa os campos de atributos XCOORD e YCOORD.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de pontos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída. Se omitido, um caminho GeoJSON é derivado ao lado da entrada."
              }
            }
          },
          "clean_vector": {
            "name": "Limpar vetorial",
            "description": "Remove geometrias vetoriais nulas e inválidas (por exemplo, linhas/polígonos subdimensionados) preservando as feições válidas e os atributos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída. Se omitido, um caminho GeoJSON é derivado ao lado da entrada."
              }
            }
          },
          "csv_points_to_vector": {
            "name": "Pontos CSV para vetorial",
            "description": "Importa registros de pontos de um arquivo CSV para uma camada vetorial de pontos.",
            "params": {
              "input_file": {
                "label": "Arquivo de entrada",
                "description": "Caminho do arquivo CSV de entrada."
              },
              "x_field_num": {
                "label": "Número do campo X",
                "description": "Índice (base 0) do campo de coordenada X. O padrão é 0."
              },
              "y_field_num": {
                "label": "Número do campo Y",
                "description": "Índice (base 0) do campo de coordenada Y. O padrão é 1."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Código EPSG opcional para o CRS de saída."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "export_table_to_csv": {
            "name": "Exportar tabela para CSV",
            "description": "Exporta uma tabela de atributos vetorial para um arquivo CSV.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de entrada."
              },
              "output_csv_file": {
                "label": "Arquivo CSV de saída",
                "description": "Caminho do arquivo CSV de saída."
              },
              "headers": {
                "label": "Cabeçalhos",
                "description": "Inclui a linha de cabeçalho na saída. O padrão é true."
              }
            }
          },
          "join_tables": {
            "name": "Juntar tabelas",
            "description": "Une atributos de uma tabela vetorial externa a uma tabela vetorial principal usando campos-chave.",
            "params": {
              "primary_vector": {
                "label": "Vetor primário",
                "description": "Caminho do vetor primário que recebe os campos juntados."
              },
              "primary_key_field": {
                "label": "Campo de chave primária",
                "description": "Campo de chave primária no vetor primário."
              },
              "foreign_vector": {
                "label": "Vetor estrangeiro",
                "description": "Caminho do vetor estrangeiro contendo os campos de origem."
              },
              "foreign_key_field": {
                "label": "Campo de chave estrangeira",
                "description": "Campo de chave estrangeira no vetor estrangeiro."
              },
              "import_field": {
                "label": "Campo a importar",
                "description": "Campo único opcional a importar; o padrão são todos os campos que não são chave nem FID."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída. O padrão é um caminho GeoJSON derivado ao lado da entrada primária."
              }
            }
          },
          "merge_table_with_csv": {
            "name": "Mesclar tabela com CSV",
            "description": "Mescla atributos de uma tabela CSV em uma tabela de atributos vetorial por campos-chave.",
            "params": {
              "primary_vector": {
                "label": "Vetor primário",
                "description": "Caminho do vetor primário que recebe os campos mesclados."
              },
              "primary_key_field": {
                "label": "Campo de chave primária",
                "description": "Campo de chave primária no vetor primário."
              },
              "foreign_csv_filename": {
                "label": "Nome do arquivo CSV estrangeiro",
                "description": "Arquivo CSV contendo a tabela estrangeira."
              },
              "foreign_key_field": {
                "label": "Campo de chave estrangeira",
                "description": "Nome do campo de chave estrangeira no cabeçalho do CSV."
              },
              "import_field": {
                "label": "Campo a importar",
                "description": "Campo único opcional do CSV a importar; o padrão são todos os campos que não são chave."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída. O padrão é um caminho GeoJSON derivado ao lado da entrada primária."
              }
            }
          },
          "merge_vectors": {
            "name": "Mesclar vetoriais",
            "description": "Combina dois ou mais vetores de entrada do mesmo tipo de geometria em um único vetor de saída.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de caminhos de vetores de entrada (pelo menos dois obrigatórios)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "reinitialize_attribute_table": {
            "name": "Reinicializar tabela de atributos",
            "description": "Cria uma cópia de uma camada vetorial contendo apenas um atributo FID regenerado.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída. Se omitido, sobrescreve o caminho de entrada."
              }
            }
          },
          "vector_summary_statistics": {
            "name": "Estatísticas resumo vetoriais",
            "description": "Calcula contagem, soma, média, mínimo, máximo e desvio padrão por grupo categórico e exporta para CSV.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "group_field": {
                "label": "Campo de agrupamento",
                "description": "Nome do campo de agrupamento."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Nome do campo de valor numérico."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de saída."
              }
            }
          },
          "fix_dangling_arcs": {
            "name": "Corrigir arcos pendentes",
            "description": "Corrige arcos pendentes aquém e além em uma rede de linhas ajustando as extremidades das linhas dentro de uma distância limiar.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de polilinhas de entrada."
              },
              "snap": {
                "label": "Ajustar",
                "description": "Limiar de distância de ajuste em unidades do mapa."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída. Se omitido, um caminho GeoJSON é derivado ao lado da entrada."
              }
            }
          },
          "lines_to_polygons": {
            "name": "Linhas para polígonos",
            "description": "Converte feições de polilinhas em feições poligonais, tratando a primeira parte como o anel exterior e as partes seguintes como buracos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de polilinhas de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída. Se omitido, um caminho GeoJSON é derivado ao lado da entrada."
              }
            }
          },
          "multipart_to_singlepart": {
            "name": "Multiparte para parte única",
            "description": "Converte um vetor que contém feições multipartes em um com apenas feições de parte única.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de entrada (polilinha, polígono ou multiponto)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída. O padrão é um GeoJSON com carimbo de tempo ao lado da entrada."
              },
              "exclude_holes": {
                "label": "Excluir buracos",
                "description": "Quando verdadeiro, os buracos dos polígonos permanecem anexados ao seu anel exterior envolvente (padrão: false)."
              }
            }
          },
          "polygons_to_lines": {
            "name": "Polígonos para linhas",
            "description": "Converte feições de polígonos e multipolígonos em linhas que traçam seus limites.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de saída. Se omitido, um caminho GeoJSON é derivado ao lado da entrada."
              }
            }
          },
          "remove_polygon_holes": {
            "name": "Remover buracos de polígonos",
            "description": "Remove os anéis interiores das feições poligonais preservando os atributos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída. Se omitido, um caminho GeoJSON é derivado ao lado da entrada."
              }
            }
          },
          "singlepart_to_multipart": {
            "name": "Parte única para multiparte",
            "description": "Mescla feições de parte única em feições multipartes, agrupadas por um campo categórico opcional.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída. O padrão é um GeoJSON com carimbo de tempo ao lado da entrada."
              },
              "field": {
                "label": "Campo",
                "description": "Nome opcional do campo de atributo para agrupar as feições. Quando omitido, todas as feições são mescladas em uma única geometria."
              }
            }
          },
          "topology_rule_autofix": {
            "name": "Correção automática de regras topológicas",
            "description": "Aplica automaticamente correções seguras e auditáveis às violações de topologia detectadas por topology_rule_validate: ajuste de extremidades entre feições, ajuste/projeção de extremidades pendentes e projeção de pontos sobre linhas. polygon_must_not_have_gaps não tem correção automática e é relatada como zero alterações.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de entrada."
              },
              "rule_set": {
                "label": "Conjunto de regras",
                "description": "Configuração de regras como matriz/objeto JSON, cadeia CSV ou caminho de arquivo. Regras com correções automáticas: line_endpoints_must_snap_within_tolerance, line_must_not_have_dangles, point_must_be_covered_by_line. polygon_must_not_have_gaps é aceita, mas nunca produz alterações."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tolerância para as operações de ajuste em unidades de coordenadas. O padrão é 0.01."
              },
              "dry_run": {
                "label": "Simulação",
                "description": "Se verdadeiro (O PADRÃO), apenas pré-visualiza: o relatório de mudanças é emitido, mas nenhuma saída é gravada. Passe false para aplicar as correções."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída para as feições corrigidas. Se omitido, derivado ao lado da entrada."
              },
              "change_report": {
                "label": "Relatório de mudanças",
                "description": "Caminho opcional do relatório JSON de trilha de auditoria das mudanças."
              }
            }
          },
          "topology_rule_validate": {
            "name": "Validar regras topológicas",
            "description": "Valida a topologia vetorial com verificações de conjuntos de regras (autointerseção, sobreposição, lacunas, pendências, cobertura de pontos, ajuste de extremidades) e emite as violações em nível de feição.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de entrada."
              },
              "rule_set": {
                "label": "Conjunto de regras",
                "description": "Configuração de regras como matriz/objeto JSON, cadeia CSV ou caminho de arquivo. O padrão são todas as 6 regras MVP. Suportadas: 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": "Tolerância de ajuste",
                "description": "Tolerância para a regra line_endpoints_must_snap_within_tolerance em unidades de coordenadas. O padrão é 1.0."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída para as violações. Se omitido, derivado ao lado da entrada."
              },
              "report": {
                "label": "Relatório",
                "description": "Caminho opcional do relatório JSON de resumo."
              }
            }
          },
          "topology_validation_report": {
            "name": "Relatório de validação topológica",
            "description": "Audita uma camada vetorial em busca de problemas de topologia e grava um relatório CSV por feição.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de saída."
              }
            }
          },
          "convert_nodata_to_zero": {
            "name": "Converter NoData em zero",
            "description": "Substitui as células NoData do raster por 0, deixando inalteradas as células válidas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "modify_nodata_value": {
            "name": "Modificar o valor NoData",
            "description": "Altera o valor NoData do raster e regrava as células NoData existentes com o novo valor.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "new_value": {
                "label": "Novo valor",
                "description": "Novo valor nodata. O padrão é -32768.0."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "new_raster_from_base_raster": {
            "name": "Novo raster a partir de raster base",
            "description": "Cria um novo raster usando a extensão, as dimensões e o CRS de um raster base.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Caminho do raster base."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, retorna um raster em memória."
              },
              "out_val": {
                "label": "Valor de saída",
                "description": "Valor de preenchimento opcional. O padrão é o nodata do raster."
              },
              "data_type": {
                "label": "Tipo de dado",
                "description": "Tipo de dado opcional: 'float', 'double' ou 'integer'."
              }
            }
          },
          "new_raster_from_base_vector": {
            "name": "Novo raster a partir de vetorial base",
            "description": "Cria um novo raster a partir da extensão de um vetor base e de um tamanho de célula, preenchido com um valor opcional.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Caminho do vetor base."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula da grade de saída (> 0)."
              },
              "out_val": {
                "label": "Valor de saída",
                "description": "Valor de preenchimento opcional. O padrão é nodata (-32768)."
              },
              "data_type": {
                "label": "Tipo de dado",
                "description": "Palavra-chave opcional do tipo de dado de saída: integer, float ou double."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "raster_to_vector_lines": {
            "name": "Raster para linhas vetoriais",
            "description": "Converte as células de linha de um raster diferentes de zero e não NoData em feições vetoriais de polilinhas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada (banda única)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída. Se omitido, um caminho GeoJSON é derivado ao lado da entrada."
              }
            }
          },
          "raster_to_vector_points": {
            "name": "Raster para pontos vetoriais",
            "description": "Converte as células de um raster diferentes de zero e não NoData em feições de pontos localizadas nos centros das células.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída. Se omitido, um caminho GeoJSON é derivado ao lado da entrada."
              }
            }
          },
          "raster_to_vector_polygons": {
            "name": "Raster para polígonos vetoriais",
            "description": "Converte as regiões de um raster diferentes de zero e não NoData em feições vetoriais poligonais com os atributos FID e VALUE.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada (banda única)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída. Se omitido, um caminho GeoJSON é derivado ao lado da entrada."
              }
            }
          },
          "remove_raster_polygon_holes": {
            "name": "Remover buracos de polígonos raster",
            "description": "Remove buracos interiores de fundo (regiões 0 ou NoData envolvidas pelo primeiro plano) dos polígonos raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada (banda única)."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Tamanho máximo opcional dos buracos a remover, em células. 0 significa todos os buracos fechados."
              },
              "use_diagonals": {
                "label": "Usar diagonais",
                "description": "Usa a conectividade de 8 vizinhos para o agrupamento e a conectividade de borda."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "set_nodata_value": {
            "name": "Definir o valor NoData",
            "description": "Define um valor NoData para o raster e mapeia as células NoData existentes para o valor de fundo especificado.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "back_value": {
                "label": "Valor de fundo",
                "description": "Valor de fundo a atribuir como nodata. O padrão é 0.0."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, retorna um raster em memória."
              }
            }
          },
          "vector_lines_to_raster": {
            "name": "Linhas vetoriais para raster",
            "description": "Rasteriza geometrias de linhas e de limites de polígonos em uma grade raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de entrada (linhas ou polígonos)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, a saída permanece em memória."
              },
              "field": {
                "label": "Campo",
                "description": "Nome opcional do campo numérico a gravar. O padrão é o FID."
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Quando verdadeiro, inicializa o fundo da saída como 0 em vez de nodata."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída quando 'base' não é fornecido. Se omitido e sem base, o tamanho automático da célula é extensão máxima / 500."
              },
              "base": {
                "label": "Base",
                "description": "Caminho opcional do raster base que define a grade e a extensão de saída."
              }
            }
          },
          "vector_points_to_raster": {
            "name": "Pontos vetoriais para raster",
            "description": "Rasteriza vetores de pontos ou multipontos em uma grade usando uma operação de atribuição selecionada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de entrada (ponto/multiponto)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado fica em memória."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numérico opcional usado para os valores do raster. O padrão é o FID."
              },
              "assign": {
                "label": "Atribuir",
                "description": "Operação de atribuição: last, first, min, max, sum, num, mean."
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Quando verdadeiro, inicializa o fundo como 0; caso contrário, nodata."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída. Obrigatório quando 'base' não é fornecido."
              },
              "base": {
                "label": "Base",
                "description": "Caminho opcional do raster base para definir a extensão/grade."
              }
            }
          },
          "vector_polygons_to_raster": {
            "name": "Polígonos vetoriais para raster",
            "description": "Rasteriza vetores poligonais em uma grade, com suporte a valores de gravação definidos por atributos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do vetor de polígonos de entrada."
              },
              "field": {
                "label": "Campo",
                "description": "Nome opcional do campo numérico para os valores de gravação (o padrão é o FID)."
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Quando verdadeiro, inicializa o fundo da saída como 0 em vez de nodata."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída quando 'base' não é fornecido."
              },
              "base": {
                "label": "Base",
                "description": "Caminho opcional do raster base que define a grade e a extensão de saída."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, a saída permanece em memória."
              }
            }
          },
          "local_morans_i_lisa_raster": {
            "name": "I de Moran local (LISA) raster",
            "description": "Calcula a análise de agrupamentos LISA a partir de pontos e gera um raster categórico (HH/LL/HL/LH/NS). Permite a integração baseada em raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada com os pontos de observação."
              },
              "field": {
                "label": "Campo",
                "description": "Campo de atributo numérico a analisar."
              },
              "weights_mode": {
                "label": "Modo de pesos",
                "description": "Modo de vizinhança: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Valor de k para o modo k_nearest (padrão 8)."
              },
              "distance": {
                "label": "Distância",
                "description": "Limiar de distância para o modo distance_band."
              },
              "row_standardize": {
                "label": "Padronizar por linha",
                "description": "Aplica a padronização por linha aos pesos (padrão true)."
              },
              "island_policy": {
                "label": "Política de ilhas",
                "description": "Tratamento de ilhas: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Limiar de significância em [0, 1]; padrão 0.05."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula do raster de saída (opcional; calculado automaticamente a partir da extensão)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída (classificação: 0=NS, 1=HH, 2=LL, 3=HL, 4=LH)."
              }
            }
          },
          "getis_ord_gi_star_raster": {
            "name": "Gi* de Getis-Ord raster",
            "description": "Calcula as classificações de pontos quentes/frios Gi* a partir de pontos e gera um raster (-1=frio, 0=NS, 1=quente). Para análises baseadas em pontos quentes.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada com os pontos de observação."
              },
              "field": {
                "label": "Campo",
                "description": "Campo de atributo numérico a analisar."
              },
              "weights_mode": {
                "label": "Modo de pesos",
                "description": "Modo de vizinhança: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Valor de k para o modo k_nearest (padrão 8)."
              },
              "distance": {
                "label": "Distância",
                "description": "Limiar de distância para o modo distance_band."
              },
              "row_standardize": {
                "label": "Padronizar por linha",
                "description": "Aplica a padronização por linha aos pesos (padrão true)."
              },
              "island_policy": {
                "label": "Política de ilhas",
                "description": "Tratamento de ilhas: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Limiar de significância em [0, 1]; padrão 0.05."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula do raster de saída (opcional; calculado automaticamente a partir da extensão)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída (classificação: -1=Frio, 0=NS, 1=Quente)."
              }
            }
          },
          "ordinary_kriging": {
            "name": "Krigagem ordinária",
            "description": "Realiza a interpolação por krigagem ordinária para estimar valores em células da grade não amostradas com base em uma amostra de medições pontuais. A krigagem ordinária é um método geoestatístico que aproveita a estrutura de autocorrelação espacial para fornecer tanto as predições quanto a variância de krigagem associada (incerteza da predição). A ferramenta estima automaticamente um variograma empírico a partir dos dados de pontos de entrada e ajusta um modelo de variograma teórico (esférico, exponencial ou gaussiano) para capturar a dependência espacial.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos de entrada."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo de atributo numérico contendo os valores a interpolar."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do mapa (obrigatório se não houver base_raster)."
              },
              "base_raster": {
                "label": "Raster base",
                "description": "Raster base opcional que controla a geometria de saída."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "local_kriging": {
            "name": "Krigagem local",
            "description": "Realiza a interpolação por krigagem ordinária local usando os k vizinhos mais próximos, proporcionando uma estimativa espacial eficiente para grandes conjuntos de dados. Essa abordagem é computacionalmente mais prática que a krigagem ordinária global para conjuntos de dados com milhares de pontos.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos de entrada."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo de atributo numérico contendo os valores a interpolar."
              },
              "k_neighbors": {
                "label": "K vizinhos",
                "description": "Número de vizinhos mais próximos a usar; o padrão é 10."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do mapa (obrigatório se não houver base_raster)."
              },
              "base_raster": {
                "label": "Raster base",
                "description": "Raster base opcional que controla a geometria de saída."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "simple_kriging": {
            "name": "Krigagem simples",
            "description": "Realiza a interpolação por krigagem simples quando a média do campo espacial é conhecida a priori. Esse método reduz a variância de krigagem e fornece predições mais estáveis quando a média é conhecida de forma confiável a partir de informações externas.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos de entrada."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo de atributo numérico contendo os valores a interpolar."
              },
              "known_mean": {
                "label": "Média conhecida",
                "description": "Média conhecida do campo espacial."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do mapa (obrigatório se não houver base_raster)."
              },
              "base_raster": {
                "label": "Raster base",
                "description": "Raster base opcional que controla a geometria de saída."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "universal_kriging": {
            "name": "Krigagem universal",
            "description": "Realiza a interpolação por krigagem universal quando o fenômeno espacial apresenta uma tendência ou deriva sistemática. Combina a krigagem com a estimativa de uma superfície de tendência polinomial.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos de entrada."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo de atributo numérico contendo os valores a interpolar."
              },
              "trend_order": {
                "label": "Ordem da tendência",
                "description": "Ordem da tendência polinomial (1=linear, 2=quadrática); o padrão é 1."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do mapa (obrigatório se não houver base_raster)."
              },
              "base_raster": {
                "label": "Raster base",
                "description": "Raster base opcional que controla a geometria de saída."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "spacetime_kriging": {
            "name": "Krigagem espaço-temporal",
            "description": "Realiza a interpolação por krigagem espaço-temporal para modelar conjuntamente a variação espacial e temporal em medições pontuais. Ideal para dados de séries temporais distribuídos espacialmente.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos de entrada."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo de atributo numérico contendo os valores a interpolar."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo de atributo temporal contendo os valores de tempo."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do mapa (obrigatório se não houver base_raster)."
              },
              "base_raster": {
                "label": "Raster base",
                "description": "Raster base opcional que controla a geometria de saída."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "spatial_lag_regression_raster": {
            "name": "Regressão com defasagem espacial (raster)",
            "description": "Estima o modelo SAR e gera a superfície de valores ajustados.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "response_field": {
                "label": "Campo de resposta",
                "description": "Variável de resposta."
              },
              "predictor_fields": {
                "label": "Campos preditores",
                "description": "Campos preditores."
              },
              "weights_mode": {
                "label": "Modo de pesos",
                "description": "Modo de vizinhança."
              },
              "k": {
                "label": "K",
                "description": "k para k_nearest."
              },
              "distance": {
                "label": "Distância",
                "description": "Limiar de distância."
              },
              "row_standardize": {
                "label": "Padronizar por linha",
                "description": "Padroniza os pesos por linha."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula do raster de saída."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de saída."
              }
            }
          },
          "spatial_error_regression_raster": {
            "name": "Regressão com erro espacial (raster)",
            "description": "Estima o modelo SEM e gera a superfície de valores ajustados.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "response_field": {
                "label": "Campo de resposta",
                "description": "Variável de resposta."
              },
              "predictor_fields": {
                "label": "Campos preditores",
                "description": "Campos preditores."
              },
              "weights_mode": {
                "label": "Modo de pesos",
                "description": "Modo de vizinhança."
              },
              "k": {
                "label": "K",
                "description": "k para k_nearest."
              },
              "distance": {
                "label": "Distância",
                "description": "Limiar de distância."
              },
              "row_standardize": {
                "label": "Padronizar por linha",
                "description": "Padroniza os pesos por linha."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula do raster de saída."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de saída."
              }
            }
          },
          "geographically_weighted_regression_raster": {
            "name": "Regressão geograficamente ponderada (raster)",
            "description": "Estima a GWR e gera superfícies raster de coeficientes locais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "response_field": {
                "label": "Campo de resposta",
                "description": "Variável de resposta."
              },
              "predictor_fields": {
                "label": "Campos preditores",
                "description": "Campos preditores."
              },
              "bandwidth": {
                "label": "Largura de banda",
                "description": "Largura de banda do kernel."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Tipo de kernel."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula do raster de saída."
              },
              "output_prefix": {
                "label": "Prefixo de saída",
                "description": "Prefixo do raster de saída."
              }
            }
          },
          "inhomogeneous_intensity_raster": {
            "name": "Intensidade não homogênea (raster)",
            "description": "Calcula uma superfície de estimativa de densidade kernel (KDE) que visualiza a intensidade espacial dos pontos. Revela pontos quentes e frios além da simples densidade.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada."
              },
              "bandwidth": {
                "label": "Largura de banda",
                "description": "Largura de banda do kernel."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Tipo de kernel."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula do raster de saída."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de intensidade de saída."
              }
            }
          },
          "add": {
            "name": "Somar",
            "description": "Soma dois rasters célula a célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "average_overlay": {
            "name": "Sobreposição por média",
            "description": "Calcula a média por célula ao longo de uma pilha raster, ignorando NoData, a menos que todas as entradas sejam NoData.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada como matriz de caminhos ou cadeia delimitada por ponto e vírgula/vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "bool_and": {
            "name": "E lógico",
            "description": "Calcula o AND lógico de dois rasters célula a célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "bool_not": {
            "name": "NÃO lógico",
            "description": "Calcula o NOT lógico de cada célula do raster, gerando 1 para células de valor zero e 0 caso contrário.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "bool_or": {
            "name": "OU lógico",
            "description": "Calcula o OR lógico de dois rasters célula a célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "bool_xor": {
            "name": "OU exclusivo lógico",
            "description": "Calcula o XOR lógico de dois rasters célula a célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "count_if": {
            "name": "Contar se",
            "description": "Conta o número de rasters de entrada cuja célula é igual a um valor de comparação.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada como matriz de caminhos ou cadeia delimitada por ponto e vírgula/vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison_value": {
                "label": "Valor de comparação",
                "description": "Valor de comparação a contar na pilha de rasters."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "divide": {
            "name": "Dividir",
            "description": "Divide o primeiro raster pelo segundo célula a célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "highest_position": {
            "name": "Posição mais alta",
            "description": "Retorna o índice, a partir de zero, do raster da pilha que contém o valor mais alto em cada célula.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada como matriz de caminhos ou cadeia delimitada por ponto e vírgula/vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "lowest_position": {
            "name": "Posição mais baixa",
            "description": "Retorna o índice, a partir de zero, do raster da pilha que contém o valor mais baixo em cada célula.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada como matriz de caminhos ou cadeia delimitada por ponto e vírgula/vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "max_absolute_overlay": {
            "name": "Sobreposição por máximo absoluto",
            "description": "Calcula o valor absoluto máximo por célula ao longo de uma pilha raster, propagando NoData se qualquer célula de entrada for NoData.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada como matriz de caminhos ou cadeia delimitada por ponto e vírgula/vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "max_overlay": {
            "name": "Sobreposição por máximo",
            "description": "Calcula o máximo por célula ao longo de uma pilha raster, propagando NoData se qualquer célula de entrada for NoData.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada como matriz de caminhos ou cadeia delimitada por ponto e vírgula/vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "min_absolute_overlay": {
            "name": "Sobreposição por mínimo absoluto",
            "description": "Calcula o valor absoluto mínimo por célula ao longo de uma pilha raster, propagando NoData se qualquer célula de entrada for NoData.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada como matriz de caminhos ou cadeia delimitada por ponto e vírgula/vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "min_overlay": {
            "name": "Sobreposição por mínimo",
            "description": "Calcula o mínimo por célula ao longo de uma pilha raster, propagando NoData se qualquer célula de entrada for NoData.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada como matriz de caminhos ou cadeia delimitada por ponto e vírgula/vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "modulo": {
            "name": "Módulo",
            "description": "Calcula o resto da divisão do primeiro raster pelo segundo célula a célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "multiply": {
            "name": "Multiplicar",
            "description": "Multiplica dois rasters célula a célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "multiply_overlay": {
            "name": "Sobreposição por produto",
            "description": "Calcula o produto por célula ao longo de uma pilha raster, propagando NoData se qualquer célula de entrada for NoData.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada como matriz de caminhos ou cadeia delimitada por ponto e vírgula/vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "percent_equal_to": {
            "name": "Porcentagem igual a",
            "description": "Calcula a fração de rasters de uma pilha cujos valores são iguais ao raster de comparação em cada célula.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada como matriz de caminhos ou cadeia delimitada por ponto e vírgula/vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "Comparação",
                "description": "Caminho do raster de comparação ou identificador de raster em memória."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "percent_greater_than": {
            "name": "Porcentagem maior que",
            "description": "Calcula a fração de rasters de uma pilha cujos valores são maiores que o raster de comparação em cada célula.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada como matriz de caminhos ou cadeia delimitada por ponto e vírgula/vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "Comparação",
                "description": "Caminho do raster de comparação ou identificador de raster em memória."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "percent_less_than": {
            "name": "Porcentagem menor que",
            "description": "Calcula a fração de rasters de uma pilha cujos valores são menores que o raster de comparação em cada célula.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada como matriz de caminhos ou cadeia delimitada por ponto e vírgula/vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "Comparação",
                "description": "Caminho do raster de comparação ou identificador de raster em memória."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "pick_from_list": {
            "name": "Escolher de uma lista",
            "description": "Seleciona valores por célula de uma pilha raster usando um raster de posições a partir de zero.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada como matriz de caminhos ou cadeia delimitada por ponto e vírgula/vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "pos_input": {
                "label": "Entrada positiva",
                "description": "Raster (base 0) de posições na pilha."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "power": {
            "name": "Potência",
            "description": "Eleva o primeiro raster à potência do segundo célula a célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "standard_deviation_overlay": {
            "name": "Sobreposição por desvio padrão",
            "description": "Calcula o desvio padrão por célula ao longo de uma pilha raster, propagando NoData se qualquer célula de entrada for NoData.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada como matriz de caminhos ou cadeia delimitada por ponto e vírgula/vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "subtract": {
            "name": "Subtrair",
            "description": "Subtrai o segundo raster do primeiro célula a célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "sum_overlay": {
            "name": "Sobreposição por soma",
            "description": "Calcula a soma por célula ao longo de uma pilha raster, propagando NoData se qualquer célula de entrada for NoData.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada como matriz de caminhos ou cadeia delimitada por ponto e vírgula/vírgula."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "update_nodata_cells": {
            "name": "Atualizar células NoData",
            "description": "Atribui às células NoData de input1 os valores das células válidas correspondentes de input2.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Raster primário a atualizar."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Raster secundário que fornece os valores de substituição."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "weighted_overlay": {
            "name": "Sobreposição ponderada",
            "description": "Combina rasters de fatores usando pesos normalizados, indicadores de custo opcionais e restrições binárias opcionais.",
            "params": {
              "factors": {
                "label": "Fatores",
                "description": "Pilha de rasters de fatores de entrada."
              },
              "weights": {
                "label": "Pesos",
                "description": "Pesos numéricos correspondentes a cada raster de fator."
              },
              "cost": {
                "label": "Custo",
                "description": "Indicadores booleanos opcionais que marcam os fatores de custo."
              },
              "constraints": {
                "label": "Restrições",
                "description": "Pilha opcional de rasters de restrições; valores <= 0 forçam a saída a zero."
              },
              "scale_max": {
                "label": "Máximo da escala",
                "description": "Valor máximo da escala usado após a normalização dos fatores."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "weighted_sum": {
            "name": "Soma ponderada",
            "description": "Calcula uma soma ponderada ao longo de uma pilha raster após normalizar os pesos para que somem um.",
            "params": {
              "input_rasters": {
                "label": "Rasters de entrada",
                "description": "Pilha de rasters de entrada."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "weights": {
                "label": "Pesos",
                "description": "Pesos numéricos correspondentes a cada raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "image_correlation_neighbourhood_analysis": {
            "name": "Análise de vizinhança por correlação de imagens",
            "description": "Realiza uma análise de correlação em janela móvel entre dois rasters e retorna rasters de correlação e de valor-p.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Caminho do primeiro raster de entrada."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do segundo raster de entrada."
              },
              "filter_size": {
                "label": "Tamanho do filtro",
                "description": "Tamanho da janela móvel em células (mínimo 3, padrão 11)."
              },
              "correlation_stat": {
                "label": "Estatística de correlação",
                "description": "Métrica de correlação: pearson, spearman ou kendall (padrão pearson)."
              },
              "output1": {
                "label": "Saída 1",
                "description": "Caminho opcional de saída para o raster de correlação."
              },
              "output2": {
                "label": "Saída 2",
                "description": "Caminho opcional de saída para o raster de significância (valor-p)."
              }
            }
          },
          "natural_neighbour_interpolation": {
            "name": "Interpolação por vizinho natural",
            "description": "Interpola um raster a partir de amostras pontuais usando a ponderação verdadeira por áreas de vizinhos naturais de Sibson.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos de entrada."
              },
              "field_name": {
                "label": "Nome do campo",
                "description": "Campo de atributo numérico opcional; o padrão é a alternativa do FID."
              },
              "use_z": {
                "label": "Usar Z",
                "description": "Usa os valores Z da geometria dos pontos em vez dos atributos."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída quando base_raster não é fornecido."
              },
              "base_raster": {
                "label": "Raster base",
                "description": "Raster base opcional que controla a geometria de saída."
              },
              "clip_to_hull": {
                "label": "Recortar pela envoltória",
                "description": "Limita a interpolação à envoltória convexa dos pontos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "nearest_neighbour_interpolation": {
            "name": "Interpolação por vizinho mais próximo",
            "description": "Interpola um raster a partir de amostras pontuais atribuindo a cada célula o valor da amostra mais próxima.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos de entrada."
              },
              "field_name": {
                "label": "Nome do campo",
                "description": "Campo de atributo numérico opcional; o padrão é a alternativa do FID."
              },
              "use_z": {
                "label": "Usar Z",
                "description": "Usa os valores Z da geometria dos pontos em vez dos atributos."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída quando base_raster não é fornecido."
              },
              "base_raster": {
                "label": "Raster base",
                "description": "Raster base opcional que controla a geometria de saída."
              },
              "max_dist": {
                "label": "Distância máxima",
                "description": "Distância máxima de busca opcional em unidades do mapa; o padrão é infinito."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "conditional_evaluation": {
            "name": "Avaliação condicional",
            "description": "Realiza uma avaliação condicional se-então-senão nas células do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "statement": {
                "label": "Instrução",
                "description": "Expressão condicional avaliada por célula."
              },
              "true": {
                "label": "Verdadeiro",
                "description": "Valor ou raster/expressão usado quando a condição é verdadeira."
              },
              "false": {
                "label": "Falso",
                "description": "Valor ou raster/expressão usado quando a condição é falsa."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "reclass": {
            "name": "Reclassificar",
            "description": "Reclassifica os valores do raster usando intervalos ou pares de atribuição exata.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada."
              },
              "reclass_values": {
                "label": "Valores de reclassificação",
                "description": "Valores de reclassificação como linhas de [novo, de, até_menor_que] ou [novo, antigo] quando assign_mode=true."
              },
              "assign_mode": {
                "label": "Modo de atribuição",
                "description": "Se verdadeiro, usa o modo de atribuição exata com pares [novo_valor, valor_antigo]."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é mantido em memória."
              }
            }
          },
          "reclass_equal_interval": {
            "name": "Reclassificar por intervalos iguais",
            "description": "Reclassifica os valores do raster em intervalos de largura igual sobre uma faixa de valores opcional.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada."
              },
              "interval_size": {
                "label": "Tamanho do intervalo",
                "description": "Largura da classe de intervalo igual."
              },
              "start_value": {
                "label": "Valor inicial",
                "description": "Limite inferior opcional para a reclassificação; o padrão é o mínimo do raster."
              },
              "end_value": {
                "label": "Valor final",
                "description": "Limite superior opcional para a reclassificação; o padrão é o máximo do raster."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é mantido em memória."
              }
            }
          },
          "buffer_raster": {
            "name": "Buffer raster",
            "description": "Cria uma zona de buffer binária em torno das células raster diferentes de zero e não NoData, dentro de uma distância especificada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada onde as células não nulas são os alvos do buffer."
              },
              "buffer_size": {
                "label": "Tamanho do buffer",
                "description": "Limiar de distância do buffer."
              },
              "grid_cell_units": {
                "label": "Unidades em células da grade",
                "description": "Se verdadeiro, interpreta buffer_size em unidades de células da grade em vez de unidades do mapa."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "cost_allocation": {
            "name": "Alocação de custo",
            "description": "Atribui cada célula a uma região de origem usando um raster de retroligação da análise de distância de custo.",
            "params": {
              "source": {
                "label": "Origem",
                "description": "Raster de origem com células de origem positivas."
              },
              "backlink": {
                "label": "Backlink",
                "description": "Raster de backlink de cost_distance."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "cost_distance": {
            "name": "Distância de custo",
            "description": "Calcula os rasters de custo de deslocamento acumulado e de retroligação a partir das superfícies de origem e de custo.",
            "params": {
              "source": {
                "label": "Origem",
                "description": "Raster de origem com células de origem positivas."
              },
              "cost": {
                "label": "Custo",
                "description": "Raster de custo/atrito."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída de custo acumulado."
              },
              "backlink_output": {
                "label": "Saída de backlink",
                "description": "Caminho opcional do raster de saída de backlink."
              }
            }
          },
          "cost_pathway": {
            "name": "Caminho de custo",
            "description": "Traça caminhos de menor custo a partir das células de destino usando um raster de retroligação.",
            "params": {
              "destination": {
                "label": "Destino",
                "description": "Raster de destino com células de destino positivas."
              },
              "backlink": {
                "label": "Backlink",
                "description": "Raster de backlink de cost_distance."
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Se verdadeiro, o fundo da saída é zero em vez de NoData."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "euclidean_allocation": {
            "name": "Alocação euclidiana",
            "description": "Atribui a cada célula válida o valor da célula-alvo diferente de zero mais próxima.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada com células alvo não nulas."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "euclidean_distance": {
            "name": "Distância euclidiana",
            "description": "Calcula a distância euclidiana até a célula-alvo diferente de zero mais próxima em um raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada com células alvo não nulas."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "abs": {
            "name": "Valor absoluto",
            "description": "Calcula o valor absoluto de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "aggregate_raster": {
            "name": "Agregar raster",
            "description": "Reduz a resolução do raster agregando blocos pela média, soma, mínimo, máximo ou amplitude.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada."
              },
              "aggregation_factor": {
                "label": "Fator de agregação",
                "description": "Tamanho do bloco em células de origem."
              },
              "aggregation_type": {
                "label": "Tipo de agregação",
                "description": "Um entre mean, sum, maximum, minimum ou range."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "anova": {
            "name": "ANOVA",
            "description": "Realiza uma ANOVA de um fator sobre os valores do raster agrupados pelas categorias de um raster de classes.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de medições."
              },
              "features": {
                "label": "Feições",
                "description": "Caminho do raster de classes/categorias."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída do relatório HTML (alias: output_html_file)."
              }
            }
          },
          "arccos": {
            "name": "Arco cosseno",
            "description": "Calcula o cosseno inverso (arccos) de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "arcosh": {
            "name": "Arco cosseno hiperbólico",
            "description": "Calcula o cosseno hiperbólico inverso de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "arcsin": {
            "name": "Arco seno",
            "description": "Calcula o seno inverso (arcsin) de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "arctan": {
            "name": "Arco tangente",
            "description": "Calcula a tangente inversa (arctan) de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "arsinh": {
            "name": "Arco seno hiperbólico",
            "description": "Calcula o seno hiperbólico inverso de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "artanh": {
            "name": "Arco tangente hiperbólico",
            "description": "Calcula a tangente hiperbólica inversa de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "atan2": {
            "name": "Atan2",
            "description": "Calcula a tangente inversa de quatro quadrantes usando dois rasters célula a célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "block_maximum": {
            "name": "Máximo por bloco",
            "description": "Rasteriza feições de pontos atribuindo o valor máximo observado dentro de cada célula de saída.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos de entrada."
              },
              "field_name": {
                "label": "Nome do campo",
                "description": "Campo de atributo numérico opcional a rasterizar; o padrão é a alternativa do FID."
              },
              "use_z": {
                "label": "Usar Z",
                "description": "Usa os valores Z da geometria dos pontos em vez dos atributos."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída quando base_raster não é fornecido."
              },
              "base_raster": {
                "label": "Raster base",
                "description": "Raster base opcional que controla a geometria de saída."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "block_minimum": {
            "name": "Mínimo por bloco",
            "description": "Rasteriza feições de pontos atribuindo o valor mínimo observado dentro de cada célula de saída.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos de entrada."
              },
              "field_name": {
                "label": "Nome do campo",
                "description": "Campo de atributo numérico opcional a rasterizar; o padrão é a alternativa do FID."
              },
              "use_z": {
                "label": "Usar Z",
                "description": "Usa os valores Z da geometria dos pontos em vez dos atributos."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída quando base_raster não é fornecido."
              },
              "base_raster": {
                "label": "Raster base",
                "description": "Raster base opcional que controla a geometria de saída."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "boundary_shape_complexity": {
            "name": "Complexidade da forma do limite",
            "description": "Calcula a complexidade da forma do limite das manchas raster usando uma métrica de ramificações do esqueleto afinado.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de IDs de patches de entrada com IDs positivos do tipo inteiro."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "ceil": {
            "name": "Teto",
            "description": "Arredonda cada célula do raster para cima, até o inteiro mais próximo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "centroid_raster": {
            "name": "Centroide raster",
            "description": "Calcula a célula centroide de cada ID de mancha de valor positivo em um raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de patches de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "clip_raster_to_polygon": {
            "name": "Recortar raster por polígono",
            "description": "Recorta um raster pelas extensões dos polígonos; as células fora dos polígonos são definidas como NoData.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada."
              },
              "polygons": {
                "label": "Polígonos",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "maintain_dimensions": {
                "label": "Manter dimensões",
                "description": "Preserva as dimensões originais do raster em vez de recortar pela extensão do polígono."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "clump": {
            "name": "Agrupar",
            "description": "Agrupa células raster contíguas de valor igual em identificadores únicos de mancha.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster categórico de entrada."
              },
              "diag": {
                "label": "Diagonal",
                "description": "Se verdadeiro, inclui a conectividade diagonal (8 vizinhos); caso contrário, usa 4 vizinhos."
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Se verdadeiro, trata as células com valor zero como fundo e as mantém como zero na saída."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "cos": {
            "name": "Cosseno",
            "description": "Calcula o cosseno do valor de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "cosh": {
            "name": "Cosseno hiperbólico",
            "description": "Calcula o cosseno hiperbólico de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "create_plane": {
            "name": "Criar plano",
            "description": "Cria um raster a partir de uma equação de plano usando a geometria de um raster base.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Raster base que define a geometria de saída."
              },
              "gradient": {
                "label": "Gradiente",
                "description": "Gradiente de declividade do plano em graus."
              },
              "aspect": {
                "label": "Orientação",
                "description": "Orientação do plano em graus."
              },
              "constant": {
                "label": "Constante",
                "description": "Termo constante aditivo na equação do plano."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "crispness_index": {
            "name": "Índice de nitidez",
            "description": "Calcula o índice de nitidez para um raster de probabilidade de pertinência.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída do relatório HTML (alias: output_html_file)."
              }
            }
          },
          "cross_tabulation": {
            "name": "Tabulação cruzada",
            "description": "Realiza a tabulação cruzada de dois rasters categóricos.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Caminho do raster de entrada 1."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do raster de entrada 2."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída do relatório HTML (alias: output_html_file)."
              }
            }
          },
          "cumulative_distribution": {
            "name": "Distribuição acumulada",
            "description": "Converte os valores do raster em probabilidades da distribuição acumulada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "dbscan": {
            "name": "DBSCAN",
            "description": "Realiza um agrupamento não supervisionado baseado em densidade DBSCAN em uma pilha de rasters de entrada.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Lista delimitada por vírgula/ponto e vírgula ou matriz JSON de caminhos de rasters de entrada (bandas de feições)."
              },
              "scaling_method": {
                "label": "Método de escalonamento",
                "description": "Escalonamento das feições: 'none' (padrão), 'normalize' (intervalo 0-1) ou 'standardize' (escores z)."
              },
              "search_distance": {
                "label": "Distância de busca",
                "description": "Epsilon: raio de busca da vizinhança no espaço de feições (padrão 1.0)."
              },
              "min_points": {
                "label": "Mínimo de pontos",
                "description": "Número mínimo de vizinhos dentro de epsilon para um ponto central (padrão 5)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída para os rótulos de ID de agrupamento."
              }
            }
          },
          "decrement": {
            "name": "Decremento",
            "description": "Subtrai um valor (padrão 1.0) de cada célula do raster que não seja NoData.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "value": {
                "label": "Valor",
                "description": "A quantidade a subtrair de cada célula. O padrão é 1.0."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "edge_proportion": {
            "name": "Proporção de borda",
            "description": "Calcula a proporção de células de cada mancha que são células de borda e a mapeia de volta para as células da mancha.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de IDs de patches de entrada com IDs positivos do tipo inteiro."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "equal_to": {
            "name": "Igual a",
            "description": "Testa se dois rasters são iguais célula a célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "erase_polygon_from_raster": {
            "name": "Apagar polígono do raster",
            "description": "Define como NoData as células do raster dentro dos polígonos, preservando as células nos buracos dos polígonos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada."
              },
              "polygons": {
                "label": "Polígonos",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "exp": {
            "name": "Exponencial",
            "description": "Calcula e elevado à potência de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "exp2": {
            "name": "Exponencial base 2",
            "description": "Calcula 2 elevado à potência de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "fft_random_field": {
            "name": "Campo aleatório FFT",
            "description": "Cria um campo aleatório espacialmente autocorrelacionado usando síntese espectral por FFT.",
            "params": {
              "base_raster": {
                "label": "Raster base",
                "description": "Caminho do raster base usado para a geometria da grade."
              },
              "range": {
                "label": "Amplitude",
                "description": "Alcance aproximado de correlação em unidades do mapa. Padrão: 1.0."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "filter_raster_features_by_area": {
            "name": "Filtrar feições raster por área",
            "description": "Remove as feições raster rotuladas com inteiros menores que um limiar de contagem de células.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada contendo rótulos de classe inteiros."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Tamanho mínimo da feição em células a reter."
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Se verdadeiro, as feições removidas recebem 0; caso contrário, as feições removidas recebem NoData."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é mantido em memória."
              }
            }
          },
          "find_patch_edge_cells": {
            "name": "Encontrar células de borda de mancha",
            "description": "Identifica as células de borda de cada ID de mancha raster positivo; as células da mancha que não são de borda são definidas como zero.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de IDs de patches de entrada; valores positivos são tratados como células de patch."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "floor": {
            "name": "Piso",
            "description": "Arredonda cada célula do raster para baixo, até o inteiro mais próximo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "greater_than": {
            "name": "Maior que",
            "description": "Testa se o primeiro raster é maior que o segundo célula a célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "heat_map": {
            "name": "Mapa de calor",
            "description": "Gera um raster de mapa de calor por densidade kernel a partir de ocorrências pontuais.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos de entrada."
              },
              "field_name": {
                "label": "Nome do campo",
                "description": "Campo de peso numérico opcional; o padrão são ocorrências não ponderadas."
              },
              "bandwidth": {
                "label": "Largura de banda",
                "description": "Largura de banda do kernel em unidades do mapa."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída quando base_raster não é fornecido."
              },
              "base_raster": {
                "label": "Raster base",
                "description": "Raster base opcional que controla a geometria de saída."
              },
              "kernel_function": {
                "label": "Função de kernel",
                "description": "Tipo de função de kernel; o padrão é quartic."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "idw_interpolation": {
            "name": "Interpolação IDW",
            "description": "Interpola um raster a partir de amostras pontuais usando a ponderação pelo inverso da distância.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos de entrada."
              },
              "field_name": {
                "label": "Nome do campo",
                "description": "Campo de atributo numérico opcional; o padrão é a alternativa do FID."
              },
              "use_z": {
                "label": "Usar Z",
                "description": "Usa os valores Z da geometria dos pontos em vez dos atributos."
              },
              "weight": {
                "label": "Peso",
                "description": "Expoente de distância do IDW; o padrão é 2.0."
              },
              "radius": {
                "label": "Raio",
                "description": "Raio de vizinhança opcional em unidades do mapa; <=0 usa o recurso alternativo dos k vizinhos mais próximos."
              },
              "min_points": {
                "label": "Mínimo de pontos",
                "description": "Número mínimo de vizinhos a usar; o padrão é 0."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída quando base_raster não é fornecido."
              },
              "base_raster": {
                "label": "Raster base",
                "description": "Raster base opcional que controla a geometria de saída."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "image_autocorrelation": {
            "name": "Autocorrelação de imagem",
            "description": "Calcula o I de Moran para uma ou mais imagens raster.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Lista de caminhos dos rasters de entrada."
              },
              "contiguity": {
                "label": "Contiguidade",
                "description": "Regra de vizinhança: rook, king/queen ou bishop."
              }
            }
          },
          "image_correlation": {
            "name": "Correlação de imagens",
            "description": "Calcula a matriz de correlação de Pearson para duas ou mais imagens raster.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Lista de caminhos dos rasters de entrada."
              }
            }
          },
          "image_regression": {
            "name": "Regressão de imagens",
            "description": "Realiza uma regressão linear bivariada entre dois rasters e gera um raster de resíduos e um relatório.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Caminho do raster da variável independente."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do raster da variável dependente."
              },
              "standardize_residuals": {
                "label": "Padronizar resíduos",
                "description": "Se deve padronizar os resíduos pelo erro padrão do modelo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o raster de resíduos."
              }
            }
          },
          "increment": {
            "name": "Incremento",
            "description": "Adiciona um valor (padrão 1.0) a cada célula do raster que não seja NoData.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "value": {
                "label": "Valor",
                "description": "O valor a somar a cada célula. O padrão é 1.0."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "inplace_add": {
            "name": "Somar no local",
            "description": "Realiza uma operação de adição no próprio raster (input1 += input2).",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Raster de entrada a modificar."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do raster de entrada ou constante numérica."
              }
            }
          },
          "inplace_divide": {
            "name": "Dividir no local",
            "description": "Realiza uma operação de divisão no próprio raster (input1 /= input2).",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Raster de entrada a modificar."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do raster de entrada ou constante numérica diferente de zero."
              }
            }
          },
          "inplace_multiply": {
            "name": "Multiplicar no local",
            "description": "Realiza uma operação de multiplicação no próprio raster (input1 *= input2).",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Raster de entrada a modificar."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do raster de entrada ou constante numérica."
              }
            }
          },
          "inplace_subtract": {
            "name": "Subtrair no local",
            "description": "Realiza uma operação de subtração no próprio raster (input1 -= input2).",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Raster de entrada a modificar."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do raster de entrada ou constante numérica."
              }
            }
          },
          "integer_division": {
            "name": "Divisão inteira",
            "description": "Divide dois rasters e trunca cada resultado em direção a zero.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "inverse_pca": {
            "name": "PCA inversa",
            "description": "Reconstrói as imagens de bandas originais a partir dos rasters de componentes PCA usando os autovetores armazenados.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Caminhos dos rasters das componentes."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "pca_report": {
                "label": "Relatório da PCA",
                "description": "Cadeia do relatório JSON produzido pela PCA."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho base de saída opcional."
              }
            }
          },
          "is_nodata": {
            "name": "É NoData",
            "description": "Gera 1 para as células NoData e 0 para todas as células válidas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "kappa_index": {
            "name": "Índice kappa",
            "description": "Calcula o kappa de Cohen e métricas de concordância entre dois rasters categóricos.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Caminho do raster de classificação de entrada."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do raster de referência de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída do relatório HTML (alias: output_html_file)."
              }
            }
          },
          "ks_normality_test": {
            "name": "Teste de normalidade KS",
            "description": "Avalia se os valores do raster provêm de uma distribuição normal.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "num_samples": {
                "label": "Número de amostras",
                "description": "Tamanho opcional da amostra aleatória. Omita para usar todas as células válidas."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída do relatório HTML (alias: output_html_file)."
              }
            }
          },
          "less_than": {
            "name": "Menor que",
            "description": "Testa se o primeiro raster é menor que o segundo célula a célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "list_unique_values_raster": {
            "name": "Listar valores únicos (raster)",
            "description": "Lista as categorias raster válidas únicas e suas frequências.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do CSV de saída."
              },
              "strict_parity": {
                "label": "Paridade estrita",
                "description": "Quando verdadeiro, retorna a saída completa de frequência por categoria (padrão true)."
              },
              "max_values": {
                "label": "Valores máximos",
                "description": "Máximo de valores únicos a incluir quando strict_parity é falso (padrão 10000)."
              }
            }
          },
          "ln": {
            "name": "Logaritmo natural",
            "description": "Calcula o logaritmo natural de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "log10": {
            "name": "Logaritmo base 10",
            "description": "Calcula o logaritmo de base 10 de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "log2": {
            "name": "Logaritmo base 2",
            "description": "Calcula o logaritmo de base 2 de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "map_features": {
            "name": "Mapear feições",
            "description": "Mapeia feições discretas de terreno elevado a partir de um raster usando crescimento de regiões por prioridade decrescente.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada."
              },
              "min_feature_height": {
                "label": "Altura mínima da feição",
                "description": "Separação vertical mínima para feições independentes."
              },
              "min_feature_size": {
                "label": "Tamanho mínimo da feição",
                "description": "Tamanho mínimo da feição em células."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "max": {
            "name": "Máximo",
            "description": "Realiza uma operação MAX entre dois rasters ou entre um raster e um valor constante.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Caminho do primeiro raster ou constante numérica."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do segundo raster ou constante numérica."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "min": {
            "name": "Mínimo",
            "description": "Realiza uma operação MIN entre dois rasters ou entre um raster e um valor constante.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Caminho do primeiro raster ou constante numérica."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do segundo raster ou constante numérica."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "modified_shepard_interpolation": {
            "name": "Interpolação de Shepard modificada",
            "description": "Interpola um raster a partir de amostras pontuais usando a mesclagem de Shepard modificada com ponderação local.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos de entrada."
              },
              "field_name": {
                "label": "Nome do campo",
                "description": "Campo de atributo numérico opcional; o padrão é a alternativa do FID."
              },
              "use_z": {
                "label": "Usar Z",
                "description": "Usa os valores Z da geometria dos pontos em vez dos atributos."
              },
              "weight": {
                "label": "Peso",
                "description": "Expoente do peso de Shepard; o padrão é 2.0."
              },
              "radius": {
                "label": "Raio",
                "description": "Raio de vizinhança opcional em unidades do mapa."
              },
              "min_points": {
                "label": "Mínimo de pontos",
                "description": "Número mínimo de vizinhos; o padrão é 8."
              },
              "use_quadratic_basis": {
                "label": "Usar base quadrática",
                "description": "Aplica correções locais de base quadrática (modo compatível com o legado)."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída quando base_raster não é fornecido."
              },
              "base_raster": {
                "label": "Raster base",
                "description": "Raster base opcional que controla a geometria de saída."
              },
              "use_data_hull": {
                "label": "Usar envoltória dos dados",
                "description": "Limita a interpolação à envoltória convexa dos pontos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "narrowness_index": {
            "name": "Índice de estreiteza",
            "description": "Calcula o índice de estreiteza das manchas raster como a área dividida pela área do maior círculo contido, com base na distância máxima até a borda.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de IDs de patches de entrada com IDs positivos do tipo inteiro."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "negate": {
            "name": "Negar",
            "description": "Inverte o sinal do valor de cada célula do raster que não seja NoData.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "nibble": {
            "name": "Nibble",
            "description": "Preenche as regiões de fundo usando alocação pelo vizinho mais próximo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada a ser aparado."
              },
              "mask": {
                "label": "Máscara",
                "description": "Raster de máscara binária."
              },
              "use_nodata": {
                "label": "Usar nodata",
                "description": "Trata o nodata da entrada como valor de classe (não como fundo)."
              },
              "nibble_nodata": {
                "label": "Preencher nodata",
                "description": "Apara também as áreas de nodata fora da máscara."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "not_equal_to": {
            "name": "Diferente de",
            "description": "Testa se dois rasters são diferentes célula a célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "paired_sample_t_test": {
            "name": "Teste t para amostras pareadas",
            "description": "Realiza um teste t para amostras pareadas em dois rasters usando células válidas pareadas.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Caminho do primeiro raster de entrada."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do segundo raster de entrada."
              },
              "num_samples": {
                "label": "Número de amostras",
                "description": "Tamanho opcional da amostra com reposição."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída do relatório HTML (alias: output_html_file)."
              }
            }
          },
          "phi_coefficient": {
            "name": "Coeficiente phi",
            "description": "Realiza a avaliação da concordância de uma classificação binária usando o coeficiente phi.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Caminho do primeiro raster binário."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do segundo raster binário."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída do relatório HTML (alias: output_html_file)."
              }
            }
          },
          "principal_component_analysis": {
            "name": "Análise de componentes principais",
            "description": "Realiza a PCA em uma pilha de rasters, retornando as imagens dos componentes e um relatório JSON.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Caminhos dos rasters de entrada (≥3)."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "num_components": {
                "label": "Número de componentes",
                "description": "Número de componentes. Padrão: todas."
              },
              "standardized": {
                "label": "Padronizado",
                "description": "Usar matriz de correlação. Padrão: false."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho base de saída opcional."
              }
            }
          },
          "print_geotiff_tags": {
            "name": "Imprimir tags GeoTIFF",
            "description": "Produz um relatório de texto que descreve as tags TIFF/GeoTIFF e os principais metadados de um raster de entrada da família GeoTIFF.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              }
            }
          },
          "quantiles": {
            "name": "Quantis",
            "description": "Transforma os valores do raster em classes de quantis.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "num_quantiles": {
                "label": "Número de quantis",
                "description": "Número de quantis (padrão 5)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "radial_basis_function_interpolation": {
            "name": "Interpolação por funções de base radial",
            "description": "Interpola um raster a partir de amostras pontuais usando a ponderação por similaridade de base radial local.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos de entrada."
              },
              "field_name": {
                "label": "Nome do campo",
                "description": "Campo de atributo numérico opcional; o padrão é a alternativa do FID."
              },
              "use_z": {
                "label": "Usar Z",
                "description": "Usa os valores Z da geometria dos pontos em vez dos atributos."
              },
              "approximate_mode": {
                "label": "Modo aproximado",
                "description": "Se verdadeiro, usa a ponderação aproximada rápida NG; se falso, resolve sistemas RBF locais (estilo legado)."
              },
              "radius": {
                "label": "Raio",
                "description": "Raio de vizinhança opcional em unidades do mapa."
              },
              "min_points": {
                "label": "Mínimo de pontos",
                "description": "Número mínimo de vizinhos a usar."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída quando base_raster não é fornecido."
              },
              "base_raster": {
                "label": "Raster base",
                "description": "Raster base opcional que controla a geometria de saída."
              },
              "func_type": {
                "label": "Tipo de função",
                "description": "Tipo de base radial (thinplatespline, polyharmonic, gaussian, multiquadric, inversemultiquadric)."
              },
              "poly_order": {
                "label": "Ordem do polinômio",
                "description": "Sugestão de ordem polinomial (none, constant, quadratic)."
              },
              "weight": {
                "label": "Peso",
                "description": "Parâmetro/expoente de forma da base dependendo de func_type."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "radius_of_gyration": {
            "name": "Raio de giração",
            "description": "Calcula o raio de giração por mancha e mapeia os valores de volta para as células da mancha.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de IDs de patches de entrada com IDs positivos do tipo inteiro."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "random_field": {
            "name": "Campo aleatório",
            "description": "Cria um raster contendo valores aleatórios da distribuição normal padrão.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Caminho do raster base usado para a geometria da grade."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "random_forest_classification_fit": {
            "name": "Ajustar classificação por floresta aleatória",
            "description": "Ajusta um modelo de classificação random forest e retorna os bytes do modelo serializado.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "training_data": {
                "label": "Dados de treinamento",
                "description": "Caminho dos dados de treinamento vetoriais de pontos/polígonos."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Campo de classe nos atributos de training_data."
              },
              "scaling": {
                "label": "Escalonamento",
                "description": "Modo de escalonamento das feições: none (padrão), normalize, standardize."
              },
              "split_criterion": {
                "label": "Critério de divisão",
                "description": "Sugestão de critério de divisão da árvore (mantida por compatibilidade com o legado)."
              },
              "n_trees": {
                "label": "Número de árvores",
                "description": "Número de árvores na floresta (padrão 200)."
              },
              "min_samples_leaf": {
                "label": "Mínimo de amostras por folha",
                "description": "Número mínimo de amostras exigido em um nó folha (padrão 1)."
              },
              "min_samples_split": {
                "label": "Mínimo de amostras para divisão",
                "description": "Número mínimo de amostras exigido para dividir um nó interno (padrão 2)."
              },
              "test_proportion": {
                "label": "Proporção de teste",
                "description": "Argumento de compatibilidade com o legado; reservado para diagnósticos futuros."
              }
            }
          },
          "random_forest_classification_predict": {
            "name": "Prever classificação por floresta aleatória",
            "description": "Aplica um modelo serializado de classificação random forest a preditores multibanda.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "model_bytes": {
                "label": "Bytes do modelo",
                "description": "Bytes do modelo produzidos por random_forest_classification_fit."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "random_forest_regression_fit": {
            "name": "Ajustar regressão por floresta aleatória",
            "description": "Ajusta um modelo de regressão random forest e retorna os bytes do modelo serializado.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "training_data": {
                "label": "Dados de treinamento",
                "description": "Caminho dos dados de treinamento vetoriais de pontos."
              },
              "field": {
                "label": "Campo",
                "description": "Campo alvo numérico nos atributos de training_data."
              },
              "scaling": {
                "label": "Escalonamento",
                "description": "Modo de escalonamento das feições: none (padrão), normalize, standardize."
              },
              "n_trees": {
                "label": "Número de árvores",
                "description": "Número de árvores na floresta (padrão 200)."
              },
              "min_samples_leaf": {
                "label": "Mínimo de amostras por folha",
                "description": "Número mínimo de amostras exigido em um nó folha (padrão 1)."
              },
              "min_samples_split": {
                "label": "Mínimo de amostras para divisão",
                "description": "Número mínimo de amostras exigido para dividir um nó interno (padrão 2)."
              },
              "test_proportion": {
                "label": "Proporção de teste",
                "description": "Argumento de compatibilidade com o legado; reservado para diagnósticos futuros."
              }
            }
          },
          "random_forest_regression_predict": {
            "name": "Prever regressão por floresta aleatória",
            "description": "Aplica um modelo serializado de regressão random forest a preditores multibanda.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Matriz de rasters de entrada de banda única."
              },
              "model_bytes": {
                "label": "Bytes do modelo",
                "description": "Bytes do modelo produzidos por random_forest_regression_fit."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "random_sample": {
            "name": "Amostra aleatória",
            "description": "Cria um raster contendo células de amostra localizadas aleatoriamente com IDs únicos.",
            "params": {
              "base": {
                "label": "Base",
                "description": "Caminho do raster base usado para a geometria da grade e a máscara de células válidas."
              },
              "num_samples": {
                "label": "Número de amostras",
                "description": "Número de células de amostra a gerar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "raster_area": {
            "name": "Área do raster",
            "description": "Estima a área dos polígonos raster por classe em unidades de célula da grade ou do mapa e grava os totais da classe em cada célula da classe.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster categórico de entrada."
              },
              "units": {
                "label": "Unidades",
                "description": "Unidades de área: 'map units' (padrão) ou 'grid cells'."
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Se verdadeiro, as células de valor zero são excluídas da análise."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "raster_calculator": {
            "name": "Calculadora raster",
            "description": "Avalia uma expressão matemática sobre uma lista de rasters de entrada célula a célula.",
            "params": {
              "expression": {
                "label": "Expressão",
                "description": "Expressão matemática com os nomes das variáveis raster entre aspas."
              },
              "inputs": {
                "label": "Entradas",
                "description": "Caminhos dos rasters de entrada, ordenados."
              },
              "auto_reproject": {
                "label": "Reprojetar automaticamente",
                "description": "Se verdadeiro (padrão), reprojeta automaticamente os rasters da pilha para corresponder a inputs[0] quando o CRS difere."
              },
              "auto_reproject_method": {
                "label": "Método de reprojeção automática",
                "description": "Substituição opcional do método de reamostragem da reprojeção: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "raster_cell_assignment": {
            "name": "Atribuição de células raster",
            "description": "Cria um raster derivado de um raster base atribuindo a cada célula os valores de linha, coluna, x ou y.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster base de entrada."
              },
              "what_to_assign": {
                "label": "O que atribuir",
                "description": "Alvo da atribuição: column, row, x ou y."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "raster_histogram": {
            "name": "Histograma raster",
            "description": "Constrói um histograma de intervalos fixos para as células válidas do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída do relatório HTML (alias: output_html_file)."
              },
              "bins": {
                "label": "Classes do histograma",
                "description": "Número de intervalos do histograma (padrão log2(rows*cols)+1)."
              }
            }
          },
          "raster_perimeter": {
            "name": "Perímetro do raster",
            "description": "Estima o perímetro dos polígonos raster por classe usando uma tabela de consulta com antialiasing e grava os totais da classe em cada célula da classe.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster categórico de entrada."
              },
              "units": {
                "label": "Unidades",
                "description": "Unidades de perímetro: 'map units' (padrão) ou 'grid cells'."
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Se verdadeiro, as células de valor zero são excluídas da análise."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "raster_summary_stats": {
            "name": "Estatísticas resumo do raster",
            "description": "Calcula estatísticas resumidas básicas para as células válidas do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do relatório de saída (.json ou .csv)."
              }
            }
          },
          "reciprocal": {
            "name": "Recíproco",
            "description": "Calcula o recíproco (1/x) de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "rescale_value_range": {
            "name": "Reescalar a faixa de valores",
            "description": "Reescala linearmente os valores do raster para uma faixa de destino.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "out_min": {
                "label": "Mínimo de saída",
                "description": "Valor mínimo de saída."
              },
              "out_max": {
                "label": "Máximo de saída",
                "description": "Valor máximo de saída."
              },
              "clip_min": {
                "label": "Mínimo de corte",
                "description": "Mínimo de entrada opcional para o recorte antes do reescalonamento."
              },
              "clip_max": {
                "label": "Máximo de corte",
                "description": "Máximo de entrada opcional para o recorte antes do reescalonamento."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "root_mean_square_error": {
            "name": "Raiz do erro quadrático médio",
            "description": "Calcula o RMSE e estatísticas de acurácia relacionadas entre dois rasters.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de comparação."
              },
              "base": {
                "label": "Base",
                "description": "Caminho do raster base."
              }
            }
          },
          "round": {
            "name": "Arredondar",
            "description": "Arredonda cada célula do raster para o inteiro mais próximo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "shape_complexity_index_raster": {
            "name": "Índice de complexidade de forma raster",
            "description": "Calcula a complexidade da forma das manchas raster a partir da frequência de transições horizontais/verticais normalizada pela extensão da mancha.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de IDs de patches de entrada com IDs positivos do tipo inteiro."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "sieve": {
            "name": "Peneirar",
            "description": "Remove pequenas manchas isoladas abaixo de um limiar de contagem de células.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster categórico de entrada."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Tamanho mínimo do patch em células a manter."
              },
              "zero_background": {
                "label": "Fundo zero",
                "description": "Zera as células de fundo (valor 0) na saída."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "sin": {
            "name": "Seno",
            "description": "Calcula o seno do valor de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "sinh": {
            "name": "Seno hiperbólico",
            "description": "Calcula o seno hiperbólico de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "sqrt": {
            "name": "Raiz quadrada",
            "description": "Calcula a raiz quadrada de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "square": {
            "name": "Quadrado",
            "description": "Eleva ao quadrado o valor de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "tan": {
            "name": "Tangente",
            "description": "Calcula a tangente do valor de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "tanh": {
            "name": "Tangente hiperbólica",
            "description": "Calcula a tangente hiperbólica de cada célula do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "tin_interpolation": {
            "name": "Interpolação TIN",
            "description": "Interpola um raster a partir de amostras pontuais usando a triangulação de Delaunay e interpolação planar dentro de cada triângulo.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos de entrada."
              },
              "field_name": {
                "label": "Nome do campo",
                "description": "Campo de atributo numérico opcional; o padrão é a alternativa do FID."
              },
              "use_z": {
                "label": "Usar Z",
                "description": "Usa os valores Z da geometria dos pontos em vez dos atributos."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída quando base_raster não é fornecido."
              },
              "base_raster": {
                "label": "Raster base",
                "description": "Raster base opcional que controla a geometria de saída."
              },
              "max_triangle_edge_length": {
                "label": "Comprimento máximo da aresta do triângulo",
                "description": "Comprimento máximo opcional da aresta do triângulo em unidades do mapa."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "to_degrees": {
            "name": "Para graus",
            "description": "Converte cada célula do raster de radianos para graus.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "to_radians": {
            "name": "Para radianos",
            "description": "Converte cada célula do raster de graus para radianos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "trend_surface": {
            "name": "Superfície de tendência",
            "description": "Ajusta uma superfície de tendência polinomial a um raster usando regressão por mínimos quadrados.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "polynomial_order": {
                "label": "Ordem do polinômio",
                "description": "Ordem do polinômio de 1 a 10. Padrão: 1."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "trend_surface_vector_points": {
            "name": "Superfície de tendência a partir de pontos vetoriais",
            "description": "Ajusta uma superfície de tendência polinomial a dados vetoriais de pontos usando regressão por mínimos quadrados.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de pontos de entrada."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula do raster de saída em unidades do mapa."
              },
              "field_name": {
                "label": "Nome do campo",
                "description": "Campo de atributo para os valores Z. Padrão: 'FID'."
              },
              "polynomial_order": {
                "label": "Ordem do polinômio",
                "description": "Ordem do polinômio de 1 a 10. Padrão: 1."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "truncate": {
            "name": "Truncar",
            "description": "Trunca o valor de cada célula do raster para sua parte inteira.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "turning_bands_simulation": {
            "name": "Simulação por bandas rotativas",
            "description": "Cria um campo aleatório espacialmente autocorrelacionado usando o algoritmo de bandas rotativas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster base."
              },
              "range": {
                "label": "Amplitude",
                "description": "Alcance da correlação em unidades do mapa. Padrão: 1.0."
              },
              "iterations": {
                "label": "Iterações",
                "description": "Número de direções de banda. Padrão: 1000."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "two_sample_ks_test": {
            "name": "Teste KS de duas amostras",
            "description": "Realiza um teste de Kolmogorov-Smirnov para duas amostras sobre as distribuições de valores de dois rasters.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Caminho do primeiro raster de entrada."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do segundo raster de entrada."
              },
              "num_samples": {
                "label": "Número de amostras",
                "description": "Tamanho opcional da amostra com reposição por raster."
              }
            }
          },
          "wilcoxon_signed_rank_test": {
            "name": "Teste de postos com sinais de Wilcoxon",
            "description": "Realiza um teste dos postos sinalizados de Wilcoxon sobre as diferenças pareadas entre rasters.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Caminho do primeiro raster de entrada."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Caminho do segundo raster de entrada."
              },
              "num_samples": {
                "label": "Número de amostras",
                "description": "Tamanho opcional da amostra com reposição."
              }
            }
          },
          "z_scores": {
            "name": "Escores Z",
            "description": "Padroniza os valores do raster em escores z usando a média e o desvio padrão globais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "zonal_statistics": {
            "name": "Estatísticas zonais",
            "description": "Resume os valores de um raster de dados dentro das zonas definidas por um raster de feições.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de dados de entrada."
              },
              "features": {
                "label": "Feições",
                "description": "Caminho do raster de definição das zonas."
              },
              "stat_type": {
                "label": "Tipo de estatística",
                "description": "Estatística: 'mean', 'median', 'min', 'max', 'range', 'standard deviation', 'diversity', 'total'. Padrão: 'mean'."
              },
              "zero_is_background": {
                "label": "Zero é fundo",
                "description": "Excluir as células da zona 0. Padrão: false."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "assess_route": {
            "name": "Avaliar rota",
            "description": "Segmenta as linhas de rota e avalia métricas do terreno por segmento a partir de um DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "routes": {
                "label": "Rotas",
                "description": "Caminho do vetor de rotas em polilinhas de entrada."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio de busca da visibilidade em células da grade (padrão 15, mínimo 4)."
              },
              "segment_length": {
                "label": "Comprimento do segmento",
                "description": "Comprimento desejado do segmento de rota em unidades do mapa (padrão 100.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída."
              }
            }
          },
          "breakline_mapping": {
            "name": "Mapeamento de linhas de quebra",
            "description": "Mapeia linhas de quebra aplicando um limiar à curvidade transformada por logaritmo e vetorizando as feições lineares afinadas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Limiar mínimo de curvatura logarítmica usado na extração das linhas de quebra (padrão 0.8)."
              },
              "min_length": {
                "label": "Comprimento mínimo",
                "description": "Comprimento mínimo da linha de saída em células da grade (padrão 3)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (padrão: .shp temporário)."
              }
            }
          },
          "convergence_index": {
            "name": "Índice de convergência",
            "description": "Convergência/divergência do fluxo a partir do alinhamento local da orientação. Identifica vales (convergentes) e cristas (divergentes) sem um roteamento de fluxo completo. Alternativa eficiente aos algoritmos de direção de fluxo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de Z."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "dem_void_filling": {
            "name": "Preenchimento de vazios do MDE",
            "description": "Preenche os vazios do DEM usando uma superfície secundária e deslocamentos de elevação interpolados para uma fusão contínua.",
            "params": {
              "fill": {
                "label": "Preencher",
                "description": "Caminho do raster do DEM de preenchimento ou objeto raster tipado usado para preencher os vazios."
              },
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster do DEM de entrada (com vazios) ou objeto raster tipado."
              },
              "edge_treatment": {
                "label": "Tratamento de bordas",
                "description": "Tratamento da borda do vazio: 'dem', 'fill' ou 'average' (padrão 'dem')."
              },
              "mean_plane_dist": {
                "label": "Distância ao plano médio",
                "description": "Distância em células a partir das bordas do vazio além da qual os deslocamentos assumem o deslocamento médio global (padrão 20)."
              },
              "weight_value": {
                "label": "Valor do peso",
                "description": "Potência da interpolação por inverso da distância usada na interpolação dos deslocamentos próximos à borda (padrão 2.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "deviation_from_mean_elevation": {
            "name": "Desvio em relação à elevação média",
            "description": "Calcula o escore z topográfico local usando a média e o desvio padrão locais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura ímpar do filtro em células (padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura ímpar do filtro em células (padrão filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "difference_from_mean_elevation": {
            "name": "Diferença em relação à elevação média",
            "description": "Calcula a diferença entre cada elevação e a elevação média local.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura ímpar do filtro em células (padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura ímpar do filtro em células (padrão filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "directional_relief": {
            "name": "Relevo direcional",
            "description": "Calcula o relevo direcional por traçado de raios da elevação em um azimute especificado.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "azimuth": {
                "label": "Azimute",
                "description": "Azimute da direção em graus no sentido horário a partir do norte."
              },
              "max_dist": {
                "label": "Distância máxima",
                "description": "Distância máxima opcional do raio em unidades do mapa."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "elev_above_pit": {
            "name": "Elevação acima da cova",
            "description": "Calcula a elevação acima da célula de depressão a jusante mais próxima (ou do sumidouro de borda).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "elev_above_pit_dist": {
            "name": "Distância da elevação acima da cova",
            "description": "Alias de compatibilidade para elev_above_pit.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "elevation_percentile": {
            "name": "Percentil de elevação",
            "description": "Posto percentil local da elevação dentro da vizinhança (0-100). Identifica vales (% baixo), cristas (% alto) e encostas (% médio). Métrica de classificação de formas de relevo independente da elevação absoluta.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura ímpar do filtro em células (padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura ímpar do filtro em células (padrão filter_size_x). Alias: filtery."
              },
              "sig_digits": {
                "label": "Dígitos significativos",
                "description": "Número de dígitos decimais significativos a preservar durante o agrupamento (padrão 2)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "embankment_mapping": {
            "name": "Mapeamento de aterros",
            "description": "Mapeia aterros de vias de transporte a partir de um DEM e de uma rede viária, com remoção opcional da superfície do aterro por interpolação. De autoria de John Lindsay e Nigel VanNieuwenhuizen.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "roads_vector": {
                "label": "Vetor de estradas",
                "description": "Caminho do vetor de estradas de entrada (geometria de polilinhas)."
              },
              "embankment_max_width": {
                "label": "Largura máxima do aterro",
                "description": "Largura máxima do aterro em unidades do mapa (padrão 60.0)."
              },
              "max_upwards_increment": {
                "label": "Incremento máximo ascendente",
                "description": "Incremento ascendente local máximo permitido durante o crescimento (padrão 0.05)."
              },
              "min_road_width": {
                "label": "Largura mínima da estrada",
                "description": "Largura mínima mapeada da estrada em unidades do mapa (padrão 6.0)."
              },
              "remove_embankments": {
                "label": "Remover aterros",
                "description": "Se verdadeiro, também gera um DEM com os aterros removidos por interpolação local."
              },
              "search_dist": {
                "label": "Distância de busca",
                "description": "Distância de reposicionamento das sementes de estrada em unidades do mapa (padrão 2.5)."
              },
              "spillout_slope": {
                "label": "Declividade de extravasamento",
                "description": "Declividade máxima de transbordamento em graus para as transições em aclive (padrão 4.0)."
              },
              "typical_embankment_max_height": {
                "label": "Altura máxima típica do aterro",
                "description": "Altura máxima típica do aterro em unidades de elevação (padrão 2.0)."
              },
              "typical_embankment_width": {
                "label": "Largura típica do aterro",
                "description": "Largura típica do aterro em unidades do mapa (padrão 30.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída da máscara de aterros."
              },
              "output_dem": {
                "label": "DEM de saída",
                "description": "Caminho opcional de saída do DEM com os aterros removidos quando remove_embankments=true."
              }
            }
          },
          "exposure_towards_wind_flux": {
            "name": "Exposição ao fluxo do vento",
            "description": "Calcula a exposição do terreno em relação à direção dominante do vento e à proteção do horizonte a barlavento.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "azimuth": {
                "label": "Azimute",
                "description": "Azimute dominante do vento em graus no sentido horário a partir do norte."
              },
              "max_dist": {
                "label": "Distância máxima",
                "description": "Distância máxima de busca do ângulo do horizonte a barlavento em unidades do mapa."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator opcional de escalonamento vertical para DEMs projetados."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "feature_preserving_smoothing": {
            "name": "Suavização com preservação de feições",
            "description": "Suaviza a rugosidade do DEM preservando as quebras de declividade por meio de filtragem de vetores normais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "filter_size": {
                "label": "Tamanho do filtro",
                "description": "Tamanho ímpar do filtro em células (padrão 11)."
              },
              "iterations": {
                "label": "Iterações",
                "description": "Número de iterações de suavização (padrão 3)."
              },
              "max_elevation_diff": {
                "label": "Diferença máxima de elevação",
                "description": "Variação vertical máxima permitida em relação ao DEM original (padrão inf)."
              },
              "normal_diff_threshold": {
                "label": "Limiar de diferença de normais",
                "description": "Diferença máxima do ângulo normal em graus (padrão 8.0)."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "feature_preserving_smoothing_multiscale": {
            "name": "Suavização multiescala com preservação de feições",
            "description": "Suaviza a rugosidade do DEM com uma continuação multiescala do grosseiro para o fino. Cada escala recalcula as normais, aplica uma difusão robusta e adaptativa do campo de normais e reconstrói as elevações com uma resolução de Poisson filtrada (screened Poisson).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "smoothing_amount": {
                "label": "Quantidade de suavização",
                "description": "Grau geral de suavização em [0,1] (padrão 0.65). Valores maiores aumentam o orçamento de difusão, especialmente nas escalas grosseiras."
              },
              "edge_preservation": {
                "label": "Preservação de bordas",
                "description": "Intensidade da preservação de bordas em [0,1] (padrão 0.75). Valores maiores suprimem mais fortemente a suavização através das principais quebras de declividade."
              },
              "scale_levels": {
                "label": "Níveis de escala",
                "description": "Número de níveis da pirâmide para a suavização do grosseiro ao fino (padrão 3)."
              },
              "fidelity": {
                "label": "Fidelidade",
                "description": "Peso de fidelidade aos dados na reconstrução de Poisson filtrada (padrão 0.45). Valores maiores mantêm o resultado mais próximo do DEM de origem."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "fetch_analysis": {
            "name": "Análise de pista de vento",
            "description": "Calcula a distância a barlavento até o primeiro obstáculo topográfico ao longo de um azimute especificado.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "azimuth": {
                "label": "Azimute",
                "description": "Azimute do vento em graus no sentido horário a partir do norte."
              },
              "hgt_inc": {
                "label": "Incremento de altura",
                "description": "Limiar de incremento de altura em m/m (padrão 0.05)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "fill_missing_data": {
            "name": "Preencher dados faltantes",
            "description": "Preenche lacunas NoData usando ponderação pelo inverso da distância a partir das células válidas da borda da lacuna.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster de entrada ou objeto raster tipado."
              },
              "exclude_edge_nodata": {
                "label": "Excluir nodata de borda",
                "description": "Excluir do preenchimento as regiões NoData conectadas à borda (padrão false). Alias: no_edges."
              },
              "filter_size": {
                "label": "Tamanho do filtro",
                "description": "Raio de busca em células da grade (padrão 11)."
              },
              "weight": {
                "label": "Peso",
                "description": "Expoente de potência do inverso da distância (padrão 2.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "find_ridges": {
            "name": "Encontrar cristas",
            "description": "Identifica células potenciais de cristas e picos em um DEM, com afinamento opcional de linhas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "line_thin": {
                "label": "Afinamento de linhas",
                "description": "Aplicar afinamento iterativo de linhas (padrão true)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "hillshade": {
            "name": "Sombreamento do relevo",
            "description": "Visualização de sombreamento do relevo direcional com fonte única (tons de cinza 0-255). Os parâmetros de azimute e altitude controlam a direção da luz. Visualização rápida do terreno para inspeção do DEM e exibição em mapas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster DEM de entrada"
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Exagero vertical aplicado às elevações"
              },
              "altitude": {
                "label": "Altitude",
                "description": "Altitude da iluminação acima do horizonte em graus"
              },
              "azimuth": {
                "label": "Azimute",
                "description": "Azimute da iluminação em graus no sentido horário a partir do norte"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "hypsometrically_tinted_hillshade": {
            "name": "Sombreamento do relevo com tonalização hipsométrica",
            "description": "Cria uma renderização do terreno no estilo suíço mesclando sombreamento do relevo com múltiplos azimutes, tonalização hipsométrica e névoa atmosférica opcional.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster do DEM de entrada."
              },
              "solar_altitude": {
                "label": "Altitude solar",
                "description": "Altitude solar em graus [0, 90]."
              },
              "hillshade_weight": {
                "label": "Peso do sombreamento",
                "description": "Peso de mesclagem do sombreamento do relevo em [0, 1]."
              },
              "brightness": {
                "label": "Brilho",
                "description": "Controle de brilho em [0, 1]."
              },
              "atmospheric_effects": {
                "label": "Efeitos atmosféricos",
                "description": "Quantidade de névoa atmosférica em [0, 1]."
              },
              "palette": {
                "label": "Paleta",
                "description": "Nome da paleta (atlas, high_relief, arid, soft, muted, viridis, dem, grey, white, etc.)."
              },
              "reverse_palette": {
                "label": "Inverter paleta",
                "description": "Inverter a ordem da paleta."
              },
              "full_360_mode": {
                "label": "Modo 360 completo",
                "description": "Usar iluminação de 8 direções em vez do modo de 4 direções."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Multiplicador de exagero vertical."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída."
              }
            }
          },
          "local_hypsometric_analysis": {
            "name": "Análise hipsométrica local",
            "description": "Calcula a integral hipsométrica local mínima ao longo de uma faixa de escalas de vizinhança amostrada de forma não linear.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "min_scale": {
                "label": "Escala mínima",
                "description": "Raio mínimo de meia-janela em células (padrão 4)."
              },
              "step_size": {
                "label": "Tamanho do passo",
                "description": "Tamanho do passo base em células (padrão 1). Alias: step."
              },
              "num_steps": {
                "label": "Número de passos",
                "description": "Número de escalas a avaliar (padrão 10)."
              },
              "step_nonlinearity": {
                "label": "Não linearidade do passo",
                "description": "Não linearidade do passo de escala em [1,4] (padrão 1.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o raster de HI mínimo local."
              },
              "output_scale": {
                "label": "Escala de saída",
                "description": "Caminho opcional de saída para o raster da escala do HI mínimo."
              }
            }
          },
          "low_points_on_headwater_divides": {
            "name": "Pontos baixos em divisores de cabeceira",
            "description": "Localiza pontos de passagem baixos ao longo dos divisores entre sub-bacias de cabeceira vizinhas.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster do DEM sem depressões de entrada ou objeto raster tipado."
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Caminho do raster de cursos d'água de entrada (valores positivos indicam células de canal)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (padrão: .shp temporário)."
              }
            }
          },
          "max_downslope_elev_change": {
            "name": "Variação máxima de elevação a jusante",
            "description": "Calcula a queda máxima de elevação para as células vizinhas mais baixas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "max_upslope_elev_change": {
            "name": "Variação máxima de elevação a montante",
            "description": "Calcula o ganho máximo de elevação para as células vizinhas mais altas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "min_downslope_elev_change": {
            "name": "Variação mínima de elevação a jusante",
            "description": "Calcula a queda mínima não negativa de elevação para as células vizinhas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "multidirectional_hillshade": {
            "name": "Sombreamento multidirecional",
            "description": "Sombreamento do relevo multidirecional (8+ fontes de luz) que elimina os artefatos de sombreamento de fonte única. Visibilidade equilibrada das feições para terrenos complexos; preferido para publicações e análises detalhadas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster DEM de entrada"
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Exagero vertical aplicado às elevações"
              },
              "altitude": {
                "label": "Altitude",
                "description": "Altitude da iluminação acima do horizonte em graus"
              },
              "full_360_mode": {
                "label": "Modo 360 completo",
                "description": "Combinar 8 fontes de luz ao longo dos 360 graus completos em vez das 4 padrão"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída"
              }
            }
          },
          "num_downslope_neighbours": {
            "name": "Número de vizinhos a jusante",
            "description": "Conta o número de células da vizinhança de 8 mais baixas que cada célula do DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "num_upslope_neighbours": {
            "name": "Número de vizinhos a montante",
            "description": "Conta o número de células da vizinhança de 8 mais altas que cada célula do DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "profile": {
            "name": "Perfil",
            "description": "Cria um gráfico HTML de perfil de elevação para uma ou mais feições de polilinha de entrada amostradas a partir de um raster de superfície.",
            "params": {
              "lines_vector": {
                "label": "Vetor de linhas",
                "description": "Caminho do vetor de polilinhas de entrada."
              },
              "surface": {
                "label": "Superfície",
                "description": "Caminho do raster de superfície de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do relatório HTML de saída."
              }
            }
          },
          "slope_vs_aspect_plot": {
            "name": "Gráfico de declividade versus orientação",
            "description": "Cria um gráfico HTML radial de análise de declividade versus orientação para um DEM de entrada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "aspect_bin_size": {
                "label": "Tamanho da classe de orientação",
                "description": "Tamanho da classe de orientação em graus (padrão 2.0)."
              },
              "min_slope": {
                "label": "Declividade mínima",
                "description": "Ignorar as declividades abaixo deste limiar em graus (padrão 0.1)."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de escalonamento vertical para os valores de elevação."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do relatório HTML de saída."
              }
            }
          },
          "slope_vs_elev_plot": {
            "name": "Gráfico de declividade versus elevação",
            "description": "Cria um gráfico HTML de análise de declividade versus elevação para um ou mais DEMs.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Caminhos dos DEMs de entrada como cadeia separada por ';' ou ',', ou como lista."
              },
              "watershed": {
                "label": "Bacia hidrográfica",
                "description": "Rasters de bacias hidrográficas opcionais correspondentes a cada DEM de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do relatório HTML de saída."
              }
            }
          },
          "surface_area_ratio": {
            "name": "Razão de área superficial",
            "description": "Razão entre a área de superfície 3D e a área planimétrica (método de Jenness). >1.0=terreno rugoso, ≈1.0=plano. Métrica adimensional de rugosidade que permite comparar o terreno entre regiões.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "topographic_hachures": {
            "name": "Hachuras topográficas",
            "description": "Cria polilinhas de hachuras topográficas a partir de um DEM usando linhas de fluxo a jusante e a montante semeadas nas curvas de nível. A atribuição de autoria original é mantida intencionalmente para esta ferramenta.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "base": {
                "label": "Base",
                "description": "Elevação da curva de nível base (padrão 0.0)."
              },
              "depth": {
                "label": "Profundidade",
                "description": "Profundidade de preenchimento recursivo usada nas áreas divergentes (padrão 16)."
              },
              "discretization": {
                "label": "Discretização",
                "description": "Comprimento do passo da linha de fluxo em unidades de célula média (padrão 0.5)."
              },
              "distmax": {
                "label": "Distância máxima",
                "description": "Multiplicador de espaçamento máximo usado para inserir hachuras adicionais (padrão 2.0)."
              },
              "distmin": {
                "label": "Distância mínima",
                "description": "Multiplicador de espaçamento mínimo usado para truncar hachuras próximas (padrão 0.5)."
              },
              "interval": {
                "label": "Intervalo",
                "description": "Valor do intervalo das curvas de nível (padrão 10.0)."
              },
              "separation": {
                "label": "Separação",
                "description": "Separação nominal das sementes de contorno em unidades de célula média (padrão 2.0)."
              },
              "slopemin": {
                "label": "Declividade mínima",
                "description": "Ângulo de declividade mínimo em graus para a continuação do traçado (padrão 0.5)."
              },
              "smooth": {
                "label": "Suavizar",
                "description": "Tamanho do filtro de suavização dos contornos (preferencialmente um inteiro ímpar, padrão 9)."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Ângulo mínimo de curva do contorno em graus mantido durante a simplificação (padrão 10.0)."
              },
              "turnmax": {
                "label": "Giro máximo",
                "description": "Ângulo de giro máximo permitido em graus ao traçar as hachuras (padrão 45.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "map_off_terrain_objects": {
            "name": "Mapear objetos fora do terreno",
            "description": "Mapeia segmentos de objetos acima do terreno em DSMs usando crescimento de regiões restrito pela declividade e filtragem opcional por tamanho mínimo das feições.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster do DSM de entrada ou objeto raster tipado."
              },
              "max_slope": {
                "label": "Declividade máxima",
                "description": "Declividade máxima de conexão em graus [1, 90] (padrão inf, limitado a 90)."
              },
              "min_feature_size": {
                "label": "Tamanho mínimo da feição",
                "description": "Tamanho mínimo do segmento mantido em células (padrão 0). Os segmentos menores são atribuídos à classe de fundo 1."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "remove_off_terrain_objects": {
            "name": "Remover objetos fora do terreno",
            "description": "Remove objetos íngremes acima do terreno de DEMs usando normalização por top-hat branco, crescimento de regiões restrito pela declividade e interpolação local.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "filter_size": {
                "label": "Tamanho do filtro",
                "description": "Largura máxima esperada do objeto em células; ajustada para um tamanho ímpar >= 3 (padrão 11)."
              },
              "slope_threshold": {
                "label": "Limiar de declividade",
                "description": "Declividade mínima da borda do objeto em graus (padrão 15.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "ridge_and_valley_vectors": {
            "name": "Vetores de cristas e vales",
            "description": "Extrai vetores das linhas centrais de cristas e vales a partir de um DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM de entrada."
              },
              "filter_size": {
                "label": "Tamanho do filtro",
                "description": "Tamanho da vizinhança para o percentil de elevação."
              },
              "ep_threshold": {
                "label": "Limiar EP",
                "description": "Limiar de percentil de elevação [5, 50]."
              },
              "slope_threshold": {
                "label": "Limiar de declividade",
                "description": "Limiar mínimo de declividade em graus."
              },
              "min_length": {
                "label": "Comprimento mínimo",
                "description": "Comprimento mínimo da linha central em células."
              },
              "output_ridges": {
                "label": "Saída de cristas",
                "description": "Caminho de saída das linhas centrais das cristas."
              },
              "output_valleys": {
                "label": "Saída de vales",
                "description": "Caminho de saída das linhas centrais dos vales."
              }
            }
          },
          "smooth_vegetation_residual": {
            "name": "Suavizar o resíduo de vegetação",
            "description": "Reduz a rugosidade residual do dossel mascarando respostas locais altas de DEV em escalas pequenas e reinterpolando as elevações mascaradas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "max_scale": {
                "label": "Escala máxima",
                "description": "Raio máximo de meia-janela do DEV em células (padrão 30)."
              },
              "dev_threshold": {
                "label": "Limiar de desvio",
                "description": "Magnitude mínima do DEV usada para sinalizar as células de rugosidade (padrão 1.0)."
              },
              "scale_threshold": {
                "label": "Limiar de escala",
                "description": "Escala máxima considerada como rugosidade (padrão 5)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "average_horizon_distance": {
            "name": "Distância média ao horizonte",
            "description": "Calcula a distância média até o horizonte ao longo das direções de azimute.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster do DEM/DSM de entrada."
              },
              "az_fraction": {
                "label": "Fração de azimute",
                "description": "Passo de azimute em graus [1, 45]."
              },
              "max_dist": {
                "label": "Distância máxima",
                "description": "Distância máxima de busca em unidades do mapa."
              },
              "observer_hgt_offset": {
                "label": "Deslocamento de altura do observador",
                "description": "Deslocamento da altura do observador acima do terreno."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída."
              }
            }
          },
          "horizon_angle": {
            "name": "Ângulo do horizonte",
            "description": "Calcula o ângulo do horizonte (declividade máxima) ao longo de uma direção de azimute especificada.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster do DEM de entrada."
              },
              "azimuth": {
                "label": "Azimute",
                "description": "Azimute em graus [0, 360)."
              },
              "max_dist": {
                "label": "Distância máxima",
                "description": "Distância máxima de busca em unidades do mapa."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída."
              }
            }
          },
          "horizon_area": {
            "name": "Área do horizonte",
            "description": "Calcula a área do polígono do horizonte (hectares).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster do DEM/DSM de entrada."
              },
              "az_fraction": {
                "label": "Fração de azimute",
                "description": "Passo de azimute em graus [1, 45]."
              },
              "max_dist": {
                "label": "Distância máxima",
                "description": "Distância máxima de busca em unidades do mapa."
              },
              "observer_hgt_offset": {
                "label": "Deslocamento de altura do observador",
                "description": "Deslocamento da altura do observador acima do terreno."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída."
              }
            }
          },
          "openness": {
            "name": "Abertura",
            "description": "Abertura topográfica de Yokoyama: métricas de exposição positiva (cristas/picos expostos) e negativa (vales encaixados). Classificação de formas de relevo e análise de visibilidade/microclima.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "dist": {
                "label": "Distância",
                "description": "Distância de busca em células (padrão 20)."
              },
              "neg_output": {
                "label": "Saída negativa",
                "description": "Caminho opcional de saída para a abertura negativa."
              },
              "pos_output": {
                "label": "Saída positiva",
                "description": "Caminho opcional de saída para a abertura positiva."
              }
            }
          },
          "shadow_animation": {
            "name": "Animação de sombras",
            "description": "Cria um visualizador HTML interativo e um GIF animado mostrando as sombras do terreno ao longo de um dia.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster do DEM/DSM de entrada."
              },
              "date": {
                "label": "Data",
                "description": "Data no formato DD/MM/YYYY."
              },
              "delay": {
                "label": "Atraso",
                "description": "Atraso do GIF por quadro em milissegundos."
              },
              "image_height": {
                "label": "Altura da imagem",
                "description": "Altura da imagem exibida em pixels."
              },
              "label": {
                "label": "Rótulo",
                "description": "Rótulo opcional exibido no visualizador."
              },
              "location": {
                "label": "Localização",
                "description": "Cadeia de localização LAT/LON/UTC_OFFSET, por exemplo 43.5448/-80.2482/-4."
              },
              "max_dist": {
                "label": "Distância máxima",
                "description": "Distância máxima de busca do horizonte em unidades do mapa."
              },
              "palette": {
                "label": "Paleta",
                "description": "Nome da paleta hipsométrica (por exemplo soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "time_interval": {
                "label": "Intervalo de tempo",
                "description": "Intervalo entre quadros em minutos [1, 60]."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do HTML de saída."
              }
            }
          },
          "shadow_image": {
            "name": "Imagem de sombras",
            "description": "Gera um raster de intensidade das sombras do terreno para uma data, hora e local especificados.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster do DEM/DSM de entrada."
              },
              "date": {
                "label": "Data",
                "description": "Data no formato DD/MM/YYYY."
              },
              "location": {
                "label": "Localização",
                "description": "Cadeia de localização LAT/LON/UTC_OFFSET, por exemplo 43.5448/-80.2482/-4."
              },
              "max_dist": {
                "label": "Distância máxima",
                "description": "Distância máxima de busca do horizonte em unidades do mapa."
              },
              "palette": {
                "label": "Paleta",
                "description": "Nome da paleta hipsométrica (por exemplo soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "time": {
                "label": "Hora",
                "description": "Hora local no formato HH:MM ou HH:MMAM/HH:MMPM."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "sky_view_factor": {
            "name": "Fator de visão do céu",
            "description": "Calcula a proporção de céu visível a partir de um DEM/DSM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster do DEM/DSM de entrada."
              },
              "az_fraction": {
                "label": "Fração de azimute",
                "description": "Passo de azimute em graus [1, 45]."
              },
              "max_dist": {
                "label": "Distância máxima",
                "description": "Distância máxima de busca em unidades do mapa."
              },
              "observer_hgt_offset": {
                "label": "Deslocamento de altura do observador",
                "description": "Deslocamento da altura do observador acima do terreno."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída."
              }
            }
          },
          "skyline_analysis": {
            "name": "Análise da linha do horizonte",
            "description": "Realiza a análise da linha do horizonte para um ou mais pontos de observação e grava um traçado vetorial do horizonte e um relatório HTML.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster do DEM/DSM de entrada."
              },
              "points": {
                "label": "Pontos",
                "description": "Caminho do vetor de pontos de entrada."
              },
              "az_fraction": {
                "label": "Fração de azimute",
                "description": "Passo de azimute em graus [0.01, 45]."
              },
              "max_dist": {
                "label": "Distância máxima",
                "description": "Distância máxima de busca em unidades do mapa."
              },
              "observer_hgt_offset": {
                "label": "Deslocamento de altura do observador",
                "description": "Deslocamento da altura do observador acima do terreno."
              },
              "output_as_polygons": {
                "label": "Saída como polígonos",
                "description": "Gravar horizontes como polígonos em vez de polilinhas."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              },
              "output_html": {
                "label": "HTML de saída",
                "description": "Caminho opcional do relatório HTML."
              }
            }
          },
          "time_in_daylight": {
            "name": "Tempo sob luz do dia",
            "description": "Calcula a proporção do período diurno em que cada célula está iluminada (fora da sombra do terreno/de objetos).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster do DEM/DSM de entrada."
              },
              "az_fraction": {
                "label": "Fração de azimute",
                "description": "Tamanho da classe de azimute em graus (0, 360)."
              },
              "end_day": {
                "label": "Dia final",
                "description": "Dia do ano final (1..366)."
              },
              "end_time": {
                "label": "Hora final",
                "description": "Hora final HH:MM:SS ou 'sunset'."
              },
              "latitude": {
                "label": "Latitude",
                "description": "Latitude alternativa opcional em graus; caso contrário, é inferida do CRS do DEM."
              },
              "longitude": {
                "label": "Longitude",
                "description": "Longitude alternativa opcional em graus; caso contrário, é inferida do CRS do DEM."
              },
              "max_dist": {
                "label": "Distância máxima",
                "description": "Distância máxima de busca do horizonte em unidades do mapa."
              },
              "start_day": {
                "label": "Dia inicial",
                "description": "Dia do ano inicial (1..366)."
              },
              "start_time": {
                "label": "Hora de início",
                "description": "Hora inicial HH:MM:SS ou 'sunrise'."
              },
              "utc_offset": {
                "label": "Deslocamento UTC",
                "description": "Cadeia opcional de deslocamento UTC como UTC+00:00; se omitida, é estimada a partir da longitude central."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída."
              }
            }
          },
          "viewshed": {
            "name": "Bacia visual",
            "description": "Calcula as contagens de visibilidade das estações a partir de estações pontuais sobre um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "stations": {
                "label": "Estações",
                "description": "Arquivo vetorial de pontos de entrada com as estações de observação."
              },
              "height": {
                "label": "Altura",
                "description": "Altura da estação de observação acima do solo em unidades z do DEM (padrão 2.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "visibility_index": {
            "name": "Índice de visibilidade",
            "description": "Calcula um índice de visibilidade baseado na topografia a partir de bacias visuais amostradas.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster do DEM de entrada."
              },
              "max_dist": {
                "label": "Distância máxima",
                "description": "Distância máxima de busca da visibilidade em unidades do mapa."
              },
              "resolution_factor": {
                "label": "Fator de resolução",
                "description": "Fator de resolução da amostragem [1, 25]."
              },
              "station_height": {
                "label": "Altura da estação",
                "description": "Altura do observador acima do solo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída."
              }
            }
          },
          "accumulation_curvature": {
            "name": "Curvatura de acumulação",
            "description": "Calcula a curvatura de acumulação a partir de um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "aspect": {
            "name": "Orientação",
            "description": "Direção da declividade máxima (0°=N, 90°=E, 180°=S, 270°=W). Fundamental para análises de radiação solar, padrões de vegetação, microclima e exposição.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de Z."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "casorati_curvature": {
            "name": "Curvatura de Casorati",
            "description": "Calcula a curvatura de Casorati a partir de um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "curvedness": {
            "name": "Curvidade",
            "description": "Calcula o descritor de forma da superfície de curvidade a partir de um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "difference_curvature": {
            "name": "Curvatura de diferença",
            "description": "Calcula a curvatura de diferença a partir de um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "gaussian_curvature": {
            "name": "Curvatura gaussiana",
            "description": "Calcula a curvatura gaussiana (intrínseca) (produto das curvaturas principais). Indica a topologia local da superfície: positiva (bacia/domo), negativa (sela), zero (cilíndrica). Classifica o terreno em categorias de formas de relevo: feições convexas (cristas), feições côncavas (vales), feições de sela (passos/gargantas). Usada na classificação avançada de formas de relevo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional quando as unidades verticais e horizontais diferem (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída para melhor legibilidade (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "generating_function": {
            "name": "Função geradora",
            "description": "Calcula a função geradora a partir de um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "horizontal_excess_curvature": {
            "name": "Curvatura de excesso horizontal",
            "description": "Calcula a curvatura de excesso horizontal a partir de um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "maximal_curvature": {
            "name": "Curvatura máxima",
            "description": "Calcula a curvatura maximal (curvatura principal máxima) a partir de um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "mean_curvature": {
            "name": "Curvatura média",
            "description": "Calcula a curvatura média (média das curvaturas principais). Relacionada à curvatura total, mas enfatiza a suavidade da superfície. Valores próximos de 0 indicam terreno suave; valores altos indicam mudanças abruptas de curvatura. Útil para a caracterização de superfícies e a detecção de linhas de quebra.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional quando as unidades verticais e horizontais diferem (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída para melhor legibilidade (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "minimal_curvature": {
            "name": "Curvatura mínima",
            "description": "Calcula a curvatura minimal (curvatura principal mínima) a partir de um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "plan_curvature": {
            "name": "Curvatura planar",
            "description": "Calcula a curvatura em planta (das curvas de nível), que mede a convergência/divergência do fluxo através das curvas de nível. Valores positivos (convergentes) indicam concentração do fluxo em direção ao centro (côncavo); valores negativos (divergentes) indicam dispersão do fluxo para longe do centro (convexo). Identifica zonas de concentração lateral do fluxo (vales) versus zonas de dispersão (cristas). Essencial para prever a distribuição da umidade do solo e a suscetibilidade a deslizamentos de terra.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional quando as unidades verticais e horizontais diferem (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída para melhor legibilidade (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "principal_curvature_direction": {
            "name": "Direção da curvatura principal",
            "description": "Calcula o ângulo de direção da curvatura principal (graus).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "profile_curvature": {
            "name": "Curvatura de perfil",
            "description": "Calcula a curvatura de perfil (no sentido do declive), que mede a aceleração/desaceleração do fluxo ao longo da direção da declividade. Valores positivos (côncavos) indicam zonas de aceleração do fluxo (erosivas); valores negativos (convexos) indicam zonas de desaceleração do fluxo (deposicionais). Revela a forma da encosta: côncava (fundos de vale, erosão), convexa (cristas, remoção de material), linear (transicional).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional quando as unidades verticais e horizontais diferem (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída para melhor legibilidade (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "relative_aspect": {
            "name": "Orientação relativa",
            "description": "Calcula a orientação do terreno em relação a um azimute especificado pelo usuário (0 a 180 graus).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "azimuth": {
                "label": "Azimute",
                "description": "Azimute de referência em graus no sentido horário a partir do norte."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de escala vertical opcional."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "ring_curvature": {
            "name": "Curvatura anelar",
            "description": "Calcula a curvatura anelar (torção ao quadrado das linhas de fluxo) a partir de um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "rotor": {
            "name": "Rotor",
            "description": "Calcula o rotor (torção das linhas de fluxo) a partir de um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "shape_index": {
            "name": "Índice de forma",
            "description": "Calcula o descritor de forma da superfície índice de forma a partir de um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "slope": {
            "name": "Declividade",
            "description": "Declividade de Zevenbergen-Thorne (graus/radianos/porcentagem). Métrica geomorfométrica fundamental; entrada para cálculos posteriores de curvatura, direção de fluxo, sombreamento e visibilidade.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "units": {
                "label": "Unidades",
                "description": "Unidades de saída: degrees, radians, percent."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de Z."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "tangential_curvature": {
            "name": "Curvatura tangencial",
            "description": "Calcula a curvatura tangencial (componente na direção E-W), semelhante à curvatura em planta, mas direcional. Usada para uma caracterização abrangente da curvatura, capturando a divergência lateral do fluxo perpendicular à direção da declividade. Frequentemente combinada com a curvatura de perfil para uma compreensão completa da curvatura 3D.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional quando as unidades verticais e horizontais diferem (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída para melhor legibilidade (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "total_curvature": {
            "name": "Curvatura total",
            "description": "Calcula a curvatura total (média quadrática das curvaturas principais). Métrica escalar independente da direção. Valores altos indicam terreno altamente curvo (picos, depressões); valores baixos indicam terreno plano. Útil como métrica adimensional de rugosidade para a classificação do terreno e a detecção de anomalias.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional quando as unidades verticais e horizontais diferem (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída para melhor legibilidade (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "unsphericity": {
            "name": "Não esfericidade",
            "description": "Calcula a curvatura de não esfericidade (metade da diferença das curvaturas principais) a partir de um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "vertical_excess_curvature": {
            "name": "Curvatura de excesso vertical",
            "description": "Calcula a curvatura de excesso vertical a partir de um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de z opcional (padrão 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Transformação logarítmica opcional dos valores de saída (padrão false). Alias: log."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "average_normal_vector_angular_deviation": {
            "name": "Desvio angular médio do vetor normal",
            "description": "Calcula o desvio angular médio local entre as normais da superfície original e da suavizada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "filter_size": {
                "label": "Tamanho do filtro",
                "description": "Tamanho ímpar da vizinhança em células (padrão 11). Alias: filter."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de escala vertical opcional."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "circular_variance_of_aspect": {
            "name": "Variância circular da orientação",
            "description": "Calcula a variância circular local da orientação dentro de uma vizinhança móvel.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "filter": {
                "label": "Filtro",
                "description": "Tamanho ímpar da vizinhança em células (padrão 11)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "edge_density": {
            "name": "Densidade de bordas",
            "description": "Calcula a densidade local de quebras de declividade usando as diferenças angulares dos vetores normais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "filter_size": {
                "label": "Tamanho do filtro",
                "description": "Tamanho ímpar da vizinhança em células (padrão 11). Alias: filter."
              },
              "norm_diff": {
                "label": "Diferença de normais",
                "description": "Limiar angular do vetor normal em graus (padrão 5)."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de escala vertical opcional."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "ruggedness_index": {
            "name": "Índice de rugosidade",
            "description": "Rugosidade do terreno pelo TRI de Riley (soma dos quadrados das diferenças de elevação). Métrica de classificação do terreno independente da escala: baixo=planícies suaves, alto=montanhas rugosas. Mapeamento ecológico e geomorfológico de formas de relevo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "spherical_std_dev_of_normals": {
            "name": "Desvio padrão esférico das normais",
            "description": "Calcula o desvio padrão esférico das normais locais da superfície.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "filter_size": {
                "label": "Tamanho do filtro",
                "description": "Tamanho ímpar da vizinhança em células (padrão 11). Alias: filter."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de escala vertical opcional."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "standard_deviation_of_slope": {
            "name": "Desvio padrão da declividade",
            "description": "Calcula o desvio padrão local da declividade como métrica de rugosidade do terreno.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "filter_size": {
                "label": "Tamanho do filtro",
                "description": "Tamanho ímpar do filtro em células (padrão 11)."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura ímpar do filtro em células (padrão filter_size). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura ímpar do filtro em células (padrão filter_size). Alias: filtery."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de Z quando as unidades verticais e horizontais diferem (padrão 1.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado permanece em memória."
              }
            }
          },
          "elev_relative_to_min_max": {
            "name": "Elevação relativa ao mín-máx",
            "description": "Expressa cada elevação como uma porcentagem (0–100) da amplitude de elevação do raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "geomorphons": {
            "name": "Geomórfons",
            "description": "Classifica as formas de relevo usando padrões ternários de linha de visada em 8 direções derivados de comparações dos ângulos zenital e nadiral, ou as 10 formas comuns de geomorphons.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "analyze_residuals": {
                "label": "Analisar resíduos",
                "description": "Se verdadeiro, remove a tendência do DEM ajustando um plano linear antes da classificação."
              },
              "flatness_distance": {
                "label": "Distância de planura",
                "description": "Distância em células após a qual o limiar de planura decai com a distância ao horizonte (padrão 0)."
              },
              "flatness_threshold": {
                "label": "Limiar de planura",
                "description": "Limiar de planura em graus (padrão 1.0), aplicado à diferença entre os ângulos zenital e nadiral."
              },
              "output_forms": {
                "label": "Saída de formas",
                "description": "Se verdadeiro, gera as 10 classes comuns de formas de relevo; caso contrário, gera o código ternário bruto do geomórfono ordenado no sentido anti-horário a partir do leste."
              },
              "search_distance": {
                "label": "Distância de busca",
                "description": "Distância máxima de consulta em células por direção (padrão 50); a célula da extremidade é incluída."
              },
              "skip_distance": {
                "label": "Distância de salto",
                "description": "Distância em células a ignorar antes de avaliar a linha de visada (padrão 0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "hypsometric_analysis": {
            "name": "Análise hipsométrica",
            "description": "Cria um relatório HTML da curva hipsométrica (área-elevação) para um ou mais DEMs.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Caminhos dos DEMs de entrada como cadeia separada por ';' ou ',', ou como lista."
              },
              "watershed": {
                "label": "Bacia hidrográfica",
                "description": "Rasters de bacias hidrográficas opcionais correspondentes a cada DEM de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do relatório HTML de saída."
              }
            }
          },
          "multiscale_topographic_position_class": {
            "name": "Classe de posição topográfica multiescala",
            "description": "Classifica cada célula do DEM em um sistema de posição topográfica relativa ampla/local de nove classes usando dois mosaicos de escalas DEVmax.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "local_min_scale": {
                "label": "Escala mínima local",
                "description": "Raio mínimo de meia-janela em células para o intervalo de escalas locais (padrão 5)."
              },
              "local_max_scale": {
                "label": "Escala máxima local",
                "description": "Raio máximo de meia-janela em células para o intervalo de escalas locais (padrão 80)."
              },
              "local_step_size": {
                "label": "Tamanho do passo local",
                "description": "Incremento de escala em células para o intervalo de escalas locais (padrão 1). Alias: local_step."
              },
              "broad_min_scale": {
                "label": "Escala mínima ampla",
                "description": "Raio mínimo de meia-janela em células para o intervalo de escalas amplas (padrão 500)."
              },
              "broad_max_scale": {
                "label": "Escala máxima ampla",
                "description": "Raio máximo de meia-janela em células para o intervalo de escalas amplas (padrão 2000)."
              },
              "broad_step_size": {
                "label": "Tamanho do passo amplo",
                "description": "Incremento de escala em células para o intervalo de escalas amplas (padrão 20). Alias: broad_step."
              },
              "local_threshold": {
                "label": "Limiar local",
                "description": "Limiar de DEV usado para classificar o mosaico de escala local nos estados de depressão, posição intermediária e elevação arredondada (padrão 0.5)."
              },
              "broad_threshold": {
                "label": "Limiar amplo",
                "description": "Limiar de DEV usado para classificar o mosaico de escala ampla nos estados de terras baixas, intermediárias e terras altas (padrão 0.5)."
              },
              "min_patch_size": {
                "label": "Tamanho mínimo do patch",
                "description": "Tamanho mínimo opcional do patch em células para a filtragem de patches após a classificação (padrão 0, desativado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o raster categórico de nove classes."
              },
              "output_confidence": {
                "label": "Saída de confiança",
                "description": "Caminho opcional de saída para um raster de confiança no intervalo [0, 1]."
              }
            }
          },
          "pennock_landform_classification": {
            "name": "Classificação de formas de relevo de Pennock",
            "description": "Classifica os elementos de relevo nas sete classes de terreno de Pennock et al. (1987).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "plan_curv_threshold": {
                "label": "Limiar de curvatura planar",
                "description": "Limiar de curvatura em planta em graus (padrão 0.0)."
              },
              "prof_curv_threshold": {
                "label": "Limiar de curvatura de perfil",
                "description": "Limiar de curvatura em perfil em graus (padrão 0.1)."
              },
              "slope_threshold": {
                "label": "Limiar de declividade",
                "description": "Limiar de declividade em graus (padrão 3.0)."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator opcional de escalonamento vertical (se < 0 e o CRS for geográfico, é estimado a partir da latitude média)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "percent_elev_range": {
            "name": "Porcentagem da amplitude de elevação",
            "description": "Calcula a posição topográfica local como porcentagem da amplitude de elevação da vizinhança.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura ímpar do filtro em células (padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura ímpar do filtro em células (padrão filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "relative_topographic_position": {
            "name": "Posição topográfica relativa",
            "description": "Calcula a RTP usando os valores mínimo, médio e máximo de elevação da vizinhança.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "filter_size_x": {
                "label": "Tamanho do filtro X",
                "description": "Largura ímpar do filtro em células (padrão 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Tamanho do filtro Y",
                "description": "Altura ímpar do filtro em células (padrão filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída."
              }
            }
          },
          "max_anisotropy_dev": {
            "name": "Desvio máximo de anisotropia",
            "description": "Calcula a anisotropia máxima do desvio de elevação ao longo de uma faixa de escalas de vizinhança. Escrito por Dan Newman.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "min_scale": {
                "label": "Escala mínima",
                "description": "Raio mínimo de meia-janela em células (padrão 3)."
              },
              "max_scale": {
                "label": "Escala máxima",
                "description": "Raio máximo de meia-janela em células (padrão 100)."
              },
              "step_size": {
                "label": "Tamanho do passo",
                "description": "Incremento de escala em células (padrão 2). Alias: step."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o raster de magnitude da anisotropia."
              },
              "output_scale": {
                "label": "Escala de saída",
                "description": "Caminho opcional de saída para o raster que armazena a escala de resposta máxima."
              }
            }
          },
          "max_anisotropy_dev_signature": {
            "name": "Assinatura do desvio máximo de anisotropia",
            "description": "Calcula assinaturas de anisotropia multiescala para locais pontuais de entrada e grava um relatório HTML. Escrito por Dan Newman.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster do DEM de entrada."
              },
              "points": {
                "label": "Pontos",
                "description": "Caminho do arquivo vetorial de pontos ou multipontos de entrada."
              },
              "min_scale": {
                "label": "Escala mínima",
                "description": "Raio mínimo de meia-janela em células (padrão 1)."
              },
              "max_scale": {
                "label": "Escala máxima",
                "description": "Raio máximo de meia-janela em células (padrão 100)."
              },
              "step_size": {
                "label": "Tamanho do passo",
                "description": "Incremento de escala em células (padrão 1). Alias: step."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o relatório HTML de assinaturas."
              }
            }
          },
          "max_difference_from_mean": {
            "name": "Diferença máxima em relação à média",
            "description": "Calcula a diferença absoluta máxima em relação à média ao longo de uma faixa de escalas de vizinhança.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "min_scale": {
                "label": "Escala mínima",
                "description": "Raio mínimo de meia-janela em células (padrão 1)."
              },
              "max_scale": {
                "label": "Escala máxima",
                "description": "Raio máximo de meia-janela em células (padrão 100)."
              },
              "step_size": {
                "label": "Tamanho do passo",
                "description": "Incremento de escala em células (padrão 1). Alias: step."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o raster de magnitude da diferença máxima."
              },
              "output_scale": {
                "label": "Escala de saída",
                "description": "Caminho opcional de saída para o raster que armazena a escala de resposta máxima."
              }
            }
          },
          "max_elevation_deviation": {
            "name": "Desvio máximo de elevação",
            "description": "Calcula o desvio de elevação padronizado máximo (DEVmax) ao longo de uma faixa de escalas de vizinhança.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "min_scale": {
                "label": "Escala mínima",
                "description": "Raio mínimo de meia-janela em células (padrão 1)."
              },
              "max_scale": {
                "label": "Escala máxima",
                "description": "Raio máximo de meia-janela em células (padrão 100)."
              },
              "step_size": {
                "label": "Tamanho do passo",
                "description": "Incremento de escala em células (padrão 1). Alias: step."
              },
              "min_vertical": {
                "label": "Mínimo vertical",
                "description": "Limiar mínimo do desvio padrão local; as respostas de relevo mais fraco são suprimidas (padrão 0.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o raster de magnitude do DEVmax."
              },
              "output_scale": {
                "label": "Escala de saída",
                "description": "Caminho opcional de saída para o raster que armazena a escala de resposta máxima."
              }
            }
          },
          "max_elev_dev_signature": {
            "name": "Assinatura do desvio máximo de elevação",
            "description": "Calcula assinaturas multiescala de desvio de elevação para locais pontuais de entrada e grava um relatório HTML.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster do DEM de entrada."
              },
              "points": {
                "label": "Pontos",
                "description": "Caminho do arquivo vetorial de pontos ou multipontos de entrada."
              },
              "min_scale": {
                "label": "Escala mínima",
                "description": "Raio mínimo de meia-janela em células (padrão 1)."
              },
              "max_scale": {
                "label": "Escala máxima",
                "description": "Raio máximo de meia-janela em células (padrão 100)."
              },
              "step_size": {
                "label": "Tamanho do passo",
                "description": "Incremento de escala em células (padrão 10). Alias: step."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o relatório HTML de assinaturas."
              }
            }
          },
          "multiscale_curvatures": {
            "name": "Curvaturas multiescala",
            "description": "Calcula curvaturas multiescala e índices baseados em curvatura a partir de um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster do DEM de entrada ou objeto raster tipado. Alias: dem."
              },
              "curv_type": {
                "label": "Tipo de curvatura",
                "description": "Tipo de curvatura."
              },
              "out_mag": {
                "label": "Magnitude de saída",
                "description": "Caminho opcional de saída da magnitude. Alias: output."
              },
              "out_scale": {
                "label": "Escala de saída",
                "description": "Caminho opcional de saída da escala quando num_steps > 1."
              },
              "min_scale": {
                "label": "Escala mínima",
                "description": "Raio mínimo da vizinhança de busca em células da grade."
              },
              "step": {
                "label": "Passo",
                "description": "Tamanho do passo."
              },
              "num_steps": {
                "label": "Número de passos",
                "description": "Número de passos de escala amostrados."
              },
              "step_nonlinearity": {
                "label": "Não linearidade do passo",
                "description": "Fator de não linearidade do passo."
              },
              "log_transform": {
                "label": "Transformação logarítmica",
                "description": "Aplicar transformação logarítmica com sinal. Alias: log."
              },
              "standardize": {
                "label": "Padronizar",
                "description": "Padronizar cada escala em escores z."
              }
            }
          },
          "multiscale_elevated_index": {
            "name": "Índice multiescala de elevação",
            "description": "Calcula o índice de elevação multiescala (MsEI) e rasters de escala-chave usando resíduos do espaço de escalas gaussiano.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "min_scale": {
                "label": "Escala mínima",
                "description": "Raio mínimo de busca em células da grade (padrão 2)."
              },
              "num_steps": {
                "label": "Número de passos",
                "description": "Número de escalas a avaliar (padrão 100)."
              },
              "step_nonlinearity": {
                "label": "Não linearidade do passo",
                "description": "Não linearidade do passo de escala em [1,4] (padrão 1.1)."
              },
              "step_size": {
                "label": "Tamanho do passo",
                "description": "Tamanho do passo base em células (padrão 1). Alias: step."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o raster de índice."
              },
              "output_scale": {
                "label": "Escala de saída",
                "description": "Caminho opcional de saída para o raster da escala-chave."
              }
            }
          },
          "multiscale_elevation_percentile": {
            "name": "Percentil de elevação multiescala",
            "description": "Calcula o percentil de elevação local mais extremo ao longo de uma faixa de escalas de vizinhança.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "min_scale": {
                "label": "Escala mínima",
                "description": "Raio mínimo de meia-janela em células (padrão 4)."
              },
              "num_steps": {
                "label": "Número de passos",
                "description": "Número de escalas a avaliar (padrão 10)."
              },
              "step_size": {
                "label": "Tamanho do passo",
                "description": "Incremento de escala em células (padrão 1). Alias: step."
              },
              "step_nonlinearity": {
                "label": "Não linearidade do passo",
                "description": "Expoente de escalonamento não linear; >1.0 agrupa as escalas em direção às resoluções mais finas (padrão 1.0)."
              },
              "sig_digits": {
                "label": "Dígitos significativos",
                "description": "Dígitos decimais significativos usados durante o agrupamento por percentil (padrão 3)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o raster de magnitude do percentil."
              },
              "output_scale": {
                "label": "Escala de saída",
                "description": "Caminho opcional de saída para o raster que armazena a escala da resposta percentílica mais extrema."
              }
            }
          },
          "multiscale_low_lying_index": {
            "name": "Índice multiescala de áreas baixas",
            "description": "Calcula o índice de áreas baixas multiescala (MsLLI) e rasters de escala-chave usando resíduos do espaço de escalas gaussiano.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "min_scale": {
                "label": "Escala mínima",
                "description": "Raio mínimo de busca em células da grade (padrão 2)."
              },
              "num_steps": {
                "label": "Número de passos",
                "description": "Número de escalas a avaliar (padrão 100)."
              },
              "step_nonlinearity": {
                "label": "Não linearidade do passo",
                "description": "Não linearidade do passo de escala em [1,4] (padrão 1.1)."
              },
              "step_size": {
                "label": "Tamanho do passo",
                "description": "Tamanho do passo base em células (padrão 1). Alias: step."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o raster de índice."
              },
              "output_scale": {
                "label": "Escala de saída",
                "description": "Caminho opcional de saída para o raster da escala-chave."
              }
            }
          },
          "multiscale_roughness": {
            "name": "Rugosidade multiescala",
            "description": "Calcula a rugosidade da superfície ao longo de uma faixa de escalas de vizinhança.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "min_scale": {
                "label": "Escala mínima",
                "description": "Raio mínimo de meia-janela em células (padrão 1)."
              },
              "max_scale": {
                "label": "Escala máxima",
                "description": "Raio máximo de meia-janela em células (padrão 100)."
              },
              "step_size": {
                "label": "Tamanho do passo",
                "description": "Incremento de escala em células (padrão 1). Alias: step."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de Z quando as unidades verticais e horizontais diferem (padrão 1.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o raster de magnitude da rugosidade."
              },
              "output_scale": {
                "label": "Escala de saída",
                "description": "Caminho opcional de saída para o raster que armazena a escala de resposta máxima."
              }
            }
          },
          "multiscale_roughness_signature": {
            "name": "Assinatura de rugosidade multiescala",
            "description": "Calcula assinaturas de rugosidade multiescala para locais pontuais de entrada e grava um relatório HTML.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster do DEM de entrada."
              },
              "points": {
                "label": "Pontos",
                "description": "Caminho do arquivo vetorial de pontos ou multipontos de entrada."
              },
              "min_scale": {
                "label": "Escala mínima",
                "description": "Raio mínimo de meia-janela em células (padrão 1)."
              },
              "max_scale": {
                "label": "Escala máxima",
                "description": "Raio máximo de meia-janela em células (padrão 100)."
              },
              "step_size": {
                "label": "Tamanho do passo",
                "description": "Incremento de escala em células (padrão 1). Alias: step."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de Z quando as unidades verticais e horizontais diferem (padrão 1.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o relatório HTML de assinaturas."
              }
            }
          },
          "multiscale_std_dev_normals": {
            "name": "Desvio padrão multiescala das normais",
            "description": "Calcula o desvio padrão esférico máximo das normais da superfície ao longo de uma faixa de escalas amostrada de forma não linear.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "min_scale": {
                "label": "Escala mínima",
                "description": "Raio mínimo de meia-janela em células (padrão 4)."
              },
              "step": {
                "label": "Passo",
                "description": "Tamanho do passo base em células usado pelo esquema de escalas não linear (padrão 1)."
              },
              "num_steps": {
                "label": "Número de passos",
                "description": "Número de escalas amostradas (padrão 10)."
              },
              "step_nonlinearity": {
                "label": "Não linearidade do passo",
                "description": "Expoente de não linearidade do esquema de escalas (padrão 1.0)."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de Z quando as unidades verticais e horizontais diferem (padrão 1.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o raster de magnitude do desvio padrão esférico."
              },
              "output_scale": {
                "label": "Escala de saída",
                "description": "Caminho opcional de saída para o raster que armazena a escala de resposta máxima."
              }
            }
          },
          "multiscale_std_dev_normals_signature": {
            "name": "Assinatura do desvio padrão multiescala das normais",
            "description": "Calcula assinaturas de escala do desvio padrão esférico para locais pontuais de entrada e grava um relatório HTML.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster do DEM de entrada."
              },
              "points": {
                "label": "Pontos",
                "description": "Caminho do arquivo vetorial de pontos ou multipontos de entrada."
              },
              "min_scale": {
                "label": "Escala mínima",
                "description": "Raio mínimo de meia-janela em células (padrão 4)."
              },
              "step": {
                "label": "Passo",
                "description": "Tamanho do passo base em células usado pelo esquema de escalas não linear (padrão 1)."
              },
              "num_steps": {
                "label": "Número de passos",
                "description": "Número de escalas amostradas (padrão 10)."
              },
              "step_nonlinearity": {
                "label": "Não linearidade do passo",
                "description": "Expoente de não linearidade do esquema de escalas (padrão 1.0)."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Fator de conversão de Z quando as unidades verticais e horizontais diferem (padrão 1.0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o relatório HTML de assinaturas."
              }
            }
          },
          "multiscale_topographic_position_image": {
            "name": "Imagem de posição topográfica multiescala",
            "description": "Cria uma imagem RGB compactada de posição topográfica multiescala a partir de rasters DEVmax local, meso e amplo.",
            "params": {
              "local": {
                "label": "Local",
                "description": "Caminho do raster de DEVmax de escala local de entrada."
              },
              "meso": {
                "label": "Meso",
                "description": "Caminho do raster de DEVmax de meso-escala de entrada."
              },
              "broad": {
                "label": "Amplo",
                "description": "Caminho do raster de DEVmax de escala ampla de entrada."
              },
              "hillshade": {
                "label": "Sombreamento do relevo",
                "description": "Caminho opcional do raster de sombreamento do relevo usado para a modulação da iluminação."
              },
              "lightness": {
                "label": "Luminosidade",
                "description": "Fator de escalonamento da luminosidade da imagem (padrão 1.2)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para o raster RGB empacotado."
              }
            }
          },
          "topographic_position_animation": {
            "name": "Animação de posição topográfica",
            "description": "Cria um visualizador HTML interativo e um GIF animado do DEV ou DEVmax ao longo de escalas amostradas de forma não linear.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do raster DEM de entrada ou objeto raster tipado."
              },
              "delay": {
                "label": "Atraso",
                "description": "Atraso do GIF por quadro em milissegundos."
              },
              "image_height": {
                "label": "Altura da imagem",
                "description": "Altura da imagem exibida em pixels."
              },
              "label": {
                "label": "Rótulo",
                "description": "Rótulo opcional exibido no visualizador."
              },
              "min_scale": {
                "label": "Escala mínima",
                "description": "Raio mínimo de meia-janela em células (padrão 1)."
              },
              "num_steps": {
                "label": "Número de passos",
                "description": "Número de passos da animação (padrão 10)."
              },
              "palette": {
                "label": "Paleta",
                "description": "Nome da paleta usada para colorir os valores de DEV."
              },
              "step_nonlinearity": {
                "label": "Não linearidade do passo",
                "description": "Expoente de escala não linear em [1, 4] que controla o espaçamento do grosseiro ao fino."
              },
              "use_dev_max": {
                "label": "Usar desvio máximo",
                "description": "Se verdadeiro, os quadros acumulam a resposta absoluta de DEV mais forte encontrada até o momento."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do HTML de saída."
              }
            }
          },
          "topo_render": {
            "name": "Renderização topográfica",
            "description": "Cria uma renderização topográfica pseudo-3D usando tonalização por paleta, sombreamento do relevo, sombras e atenuação.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Caminho do raster do DEM de entrada."
              },
              "palette": {
                "label": "Paleta",
                "description": "Nome da paleta (soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "reverse_palette": {
                "label": "Inverter paleta",
                "description": "Inverter a ordem da paleta."
              },
              "azimuth": {
                "label": "Azimute",
                "description": "Azimute da fonte de luz em graus [0, 360]."
              },
              "altitude": {
                "label": "Altitude",
                "description": "Altitude da fonte de luz em graus [0, 90]."
              },
              "clipping_polygon": {
                "label": "Polígono de recorte",
                "description": "Caminho opcional do vetor de polígonos; apenas as células do DEM dentro do(s) polígono(s) são renderizadas."
              },
              "background_hgt_offset": {
                "label": "Deslocamento de altura do fundo",
                "description": "Deslocamento vertical da elevação mínima do DEM até o plano de fundo."
              },
              "background_clr": {
                "label": "Cor de fundo",
                "description": "Cor RGBA do fundo como matriz [r,g,b,a]."
              },
              "attenuation_parameter": {
                "label": "Parâmetro de atenuação",
                "description": "Expoente de atenuação com a distância (>= 0)."
              },
              "ambient_light": {
                "label": "Luz ambiente",
                "description": "Quantidade de luz ambiente em [0, 1]."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Multiplicador de exagero vertical."
              },
              "max_dist": {
                "label": "Distância máxima",
                "description": "Distância máxima de busca de sombras em unidades do mapa."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída."
              }
            }
          },
          "add_surface_information": {
            "name": "Adicionar informações de superfície",
            "description": "Anexa estatísticas de superfície por feição a partir de um raster de elevação — Z, comprimento 3D da superfície, área 3D da superfície, Z mín/máx/médio e declividade mín/máx/média — como campos de atributo, sem alterar a geometria de entrada, como o ArcGIS Add Surface Information.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (pontos, linhas ou polígonos) que compartilha o CRS da superfície."
              },
              "surface": {
                "label": "Superfície",
                "description": "Raster de elevação/superfície a amostrar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "properties": {
                "label": "Propriedades",
                "description": "Lista separada por vírgula dos grupos de propriedades de superfície a acrescentar: Z, SURFACE_LENGTH, SURFACE_AREA, MIN_MAX_MEAN_Z, MIN_MAX_AVG_SLOPE. Padrão: todos os aplicáveis à geometria da camada."
              },
              "sample_distance": {
                "label": "Distância de amostragem",
                "description": "Intervalo de densificação em unidades do CRS para a amostragem de linhas/perímetros; os segmentos longos são divididos para que acompanhem a superfície. Padrão: o tamanho da célula do raster."
              },
              "method": {
                "label": "Método",
                "description": "Amostragem da superfície nos vértices: 'bilinear' (padrão) ou 'nearest'."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) da superfície a amostrar (padrão 1)."
              }
            }
          },
          "add_z_information": {
            "name": "Adicionar informações Z",
            "description": "Anexa estatísticas de geometria derivadas de Z a feições 3D — Z pontual/mín/máx/médio, comprimento 3D, área e volume da superfície de malha, estatísticas de declividade e contagem de vértices (ArcGIS Add Z Information). vector_summary_statistics e attribute_histogram resumem atributos em vez de geometria, e polygon_volume / surface_volume medem um raster contra um plano de referência, de modo que nada anota atualmente uma feição vetorial 3D a partir do seu próprio Z.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições 3D de ponto, linha, polígono ou multipatch. Observe que um Z igual a zero é indistinguível de um Z ausente, portanto 'features_with_z' é uma indicação e não uma garantia."
              },
              "output": {
                "label": "Saída",
                "description": "Feições de entrada com os campos solicitados acrescentados. Se omitido, armazenado em memória."
              },
              "properties": {
                "label": "Propriedades",
                "description": "Subconjunto separado por vírgula de spot_z, min_z, max_z, mean_z, length_3d, surface_area, volume, min_slope, max_slope, mean_slope, point_count, vertex_count. Padrão: todos eles (os campos não aplicáveis a uma geometria ficam nulos)."
              },
              "noise_filtering": {
                "label": "Filtragem de ruído",
                "description": "Porcentagem (0-50) removida de cada extremidade da distribuição de Z antes de min_z / max_z, de modo que um único vértice atípico não defina os extremos relatados. Padrão 0."
              }
            }
          },
          "adjust_3d_z": {
            "name": "Ajustar Z em 3D",
            "description": "Aplica uma conversão de unidade Z, um deslocamento vertical e/ou um fator multiplicativo às ordenadas Z de feições 3D.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (as feições devem carregar ordenadas Z)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída. Se omitido, o resultado é armazenado em memória."
              },
              "factor": {
                "label": "Fator",
                "description": "Fator multiplicativo aplicado a Z (padrão 1.0). Útil para exagero vertical ou para uma escala de datum."
              },
              "offset": {
                "label": "Deslocamento",
                "description": "Deslocamento vertical aditivo aplicado após o fator, nas unidades de destino (padrão 0.0)."
              },
              "from_unit": {
                "label": "Unidade de origem",
                "description": "Unidade Z de origem predefinida (meters, feet, us_feet, centimeters, millimeters, kilometers, miles, yards, inches). Requer to_unit."
              },
              "to_unit": {
                "label": "Unidade de destino",
                "description": "Unidade Z de destino predefinida. Requer from_unit. Z é escalonado por (metros-por-from_unit / metros-por-to_unit)."
              }
            }
          },
          "adjust_stream_to_raster": {
            "name": "Ajustar curso d'água ao raster",
            "description": "Move os vértices das polilinhas de cursos d'água para o caminho de fluxo implícito por um DEM, de modo que a hidrografia vetorial e a superfície de elevação concordem, ajustando os nós às células de alta acumulação e traçando a cadeia de ponteiros D8 entre eles. O inverso da gravação de cursos d'água. Como o ArcGIS Adjust Stream To Raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições de polilinhas de cursos d'água a ajustar."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster de superfície que define o caminho de fluxo verdadeiro."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho dos cursos d'água ajustados de saída. Se omitido, armazenado em memória."
              },
              "snap_distance": {
                "label": "Distância de ajuste",
                "description": "Raio de busca em unidades do mapa para ajustar os nós a uma célula de alta acumulação (padrão: 5 células)."
              },
              "channel_threshold": {
                "label": "Limiar de canal",
                "description": "Valor de acumulação de fluxo (em células) a partir do qual uma célula conta como canalizada para o ajuste (padrão: 1% da acumulação máxima do DEM)."
              },
              "remove_disconnected": {
                "label": "Remover desconectados",
                "description": "Descartar as linhas que não podem ser roteadas de forma alguma (padrão true). Quando falso, elas são repassadas inalteradas e sinalizadas."
              },
              "output_stream_raster": {
                "label": "Raster de cursos d'água de saída",
                "description": "Raster opcional que marca as células dos cursos d'água ajustados."
              },
              "output_flow_direction": {
                "label": "Direção de fluxo de saída",
                "description": "Raster de ponteiro D8 opcional derivado do DEM."
              },
              "output_split_points": {
                "label": "Pontos de divisão de saída",
                "description": "Pontos opcionais onde o traçado do ponteiro falhou e foi usado um recurso alternativo de menor custo."
              }
            }
          },
          "aggregate_multidimensional_raster": {
            "name": "Agregar raster multidimensional",
            "description": "Agrupa as fatias de um cubo raster ao longo de sua dimensão e reduz cada grupo a uma banda de saída — cenas diárias em composições mensais, uma década em médias anuais (ArcGIS Aggregate Multidimensional Raster). O cell_statistics da rodada 17 reduz uma pilha apenas a uma única camada e não tem noção de dimensão, enquanto o multidimensional_anomaly da rodada 16 realiza a operação oposta e preserva a contagem de fatias.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Um raster multibanda (cada banda é uma fatia) ou uma lista de rasters corregistrados separada por vírgula."
              },
              "output": {
                "label": "Saída",
                "description": "Raster multibanda de saída, uma banda por grupo. Se omitido, armazenado em memória."
              },
              "dimension": {
                "label": "Dimensão",
                "description": "Nome da dimensão, usado apenas no relatório (padrão 'slice')."
              },
              "dimension_values": {
                "label": "Valores da dimensão",
                "description": "Coordenada de cada fatia separada por vírgula, estritamente crescente. O padrão é o índice da fatia em base 1."
              },
              "aggregation_definition": {
                "label": "Definição de agregação",
                "description": "'all' (padrão), 'interval_value', 'interval_count' ou 'interval_ranges'."
              },
              "interval_value": {
                "label": "Valor do intervalo",
                "description": "Largura do grupo em unidades da dimensão, para 'interval_value'."
              },
              "interval_count": {
                "label": "Número de intervalos",
                "description": "Número de grupos de largura igual, para 'interval_count'."
              },
              "interval_ranges": {
                "label": "Faixas de intervalo",
                "description": "Grupos explícitos como 'start:end,start:end', para 'interval_ranges'."
              },
              "aggregation_method": {
                "label": "Método de agregação",
                "description": "'mean' (padrão), 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'range', 'std', 'sum' ou 'variety'."
              },
              "percentile_value": {
                "label": "Valor do percentil",
                "description": "Percentil em [0, 100] para o método 'percentile' (padrão 50)."
              },
              "ignore_nodata": {
                "label": "Ignorar nodata",
                "description": "Ignorar as fatias nodata por célula (padrão true). Quando falso, uma única fatia nodata torna todo o grupo nodata nessa célula."
              }
            }
          },
          "aggregate_points": {
            "name": "Agregar pontos",
            "description": "Agrupa pontos que estão a uma distância de agregação uns dos outros em polígonos de agrupamento (envoltória convexa ou união de buffers), cada um com uma contagem de pontos e somas opcionais de campos por agrupamento, como o ArcGIS Aggregate Points.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada (Point ou MultiPoint)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "aggregation_distance": {
                "label": "Distância de agregação",
                "description": "Distância máxima entre pontos para que eles se juntem ao mesmo agrupamento (unidades do mapa)."
              },
              "min_points": {
                "label": "Mínimo de pontos",
                "description": "Número mínimo de pontos que um agrupamento precisa ter para ser gerado (padrão 2; defina 1 para manter os isolados)."
              },
              "method": {
                "label": "Método",
                "description": "'convex_hull' (padrão) ou 'buffer' (união com buffer erodida de volta)."
              },
              "sum_fields": {
                "label": "Campos de soma",
                "description": "Campos numéricos separados por vírgula a somar por agrupamento (colunas de saída 'sum_<field>')."
              }
            }
          },
          "aggregate_polygons": {
            "name": "Agregar polígonos",
            "description": "Combina polígonos dentro de uma distância de agregação em polígonos maiores (fechamento morfológico), com filtros de área mínima e tamanho mínimo de buraco e uma camada opcional de barreiras que a agregação não pode cruzar.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "aggregation_distance": {
                "label": "Distância de agregação",
                "description": "Os polígonos situados a esta distância (unidades do CRS) uns dos outros são agregados. Define o raio do fechamento morfológico como metade deste valor."
              },
              "min_area": {
                "label": "Área mínima",
                "description": "Descartar os polígonos agregados cuja área (unidades do CRS ao quadrado) esteja abaixo deste valor. Padrão: manter todos."
              },
              "min_hole_size": {
                "label": "Tamanho mínimo do buraco",
                "description": "Preencher os buracos interiores cuja área (unidades do CRS ao quadrado) esteja abaixo deste valor. Padrão: manter todos os buracos."
              },
              "barrier": {
                "label": "Barreira",
                "description": "Camada vetorial de barreiras opcional (linhas ou polígonos) que a agregação não pode cruzar; as pontes que atravessam uma barreira são cortadas. Os polígonos de entrada existentes nunca são divididos."
              }
            }
          },
          "align_features": {
            "name": "Alinhar feições",
            "description": "Conforma as bordas de linhas/polígonos de origem a uma camada alvo confiável próxima dentro de uma distância de busca, puxando trechos inteiros de borda (não apenas as extremidades) com um afunilamento suave e limites compartilhados coincidentes, como o ArcGIS Align Features.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de origem a alinhar (linhas ou polígonos)."
              },
              "target": {
                "label": "Alvo",
                "description": "Camada alvo confiável (linhas, ou limites de polígonos) para a qual os vértices de origem são puxados."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "search_distance": {
                "label": "Distância de busca",
                "description": "Distância máxima (unidades do CRS) que um vértice de origem pode ser puxado em direção ao alvo. Obrigatório."
              },
              "match_field": {
                "label": "Campo de correspondência",
                "description": "Campo de atributo opcional da origem; apenas as arestas alvo cujo valor de target_match_field corresponde são candidatas para os vértices dessa feição."
              },
              "target_match_field": {
                "label": "Campo de correspondência do alvo",
                "description": "Campo de atributo do alvo comparado com match_field. Se omitido, assume o nome de match_field; requer match_field."
              }
            }
          },
          "analyze_changes_ccdc": {
            "name": "Analisar mudanças com CCDC",
            "description": "Detecção contínua de mudanças CCDC em uma série temporal densa de imagens (como o ArcGIS Analyze Changes Using CCDC): regressão OLS harmônica (sazonal) por pixel, seguida de um teste deslizante de resíduos (k×RMSE, mínimo de anomalias consecutivas) que declara quebras e reajusta os segmentos. Emite rasters de contagem de quebras, data da primeira quebra e RMSE/declividade/amplitude do segmento inicial — o histórico de mudanças sazonal e com múltiplas quebras que o landtrendr anual e o change_vector_analysis de duas datas não conseguem produzir.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Um único raster multibanda (cada banda é uma fatia de tempo) OU uma lista separada por vírgula de caminhos de rasters de banda única corregistrados, em ordem temporal."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de contagem de quebras de saída (quebras detectadas por pixel). Se omitido, armazenado em memória."
              },
              "dates": {
                "label": "Datas",
                "description": "Datas numéricas separadas por vírgula (anos decimais ou números de dia) correspondentes às fatias. Padrão 0,1,2,..."
              },
              "period": {
                "label": "Período",
                "description": "Duração de um ciclo sazonal nas unidades de 'dates' (padrão 1.0 para anos decimais; use 365 para números de dia)."
              },
              "harmonic_order": {
                "label": "Ordem harmônica",
                "description": "Número de pares harmônicos seno/cosseno na frequência anual (padrão 1 = apenas anual; 2 acrescenta o termo semestral)."
              },
              "change_threshold": {
                "label": "Limiar de mudança",
                "description": "Limiar de anomalia como um múltiplo k do RMSE do segmento (padrão 3.0). Um resíduo > k×RMSE sinaliza uma observação."
              },
              "min_consecutive": {
                "label": "Mínimo consecutivo",
                "description": "Número de observações sinalizadas consecutivas necessário para declarar uma quebra (padrão 3)."
              },
              "min_observations": {
                "label": "Mínimo de observações",
                "description": "Mínimo de observações válidas usadas para inicializar o modelo harmônico de um segmento (padrão 12). Os pixels com menos observações válidas tornam-se nodata."
              },
              "band": {
                "label": "Banda",
                "description": "Para uma entrada em lista separada por vírgula: banda (base 1) a ler de cada raster (padrão 1). Ignorado para uma única entrada multibanda."
              },
              "break_date_output": {
                "label": "Saída de data de quebra",
                "description": "Raster opcional da data da primeira quebra detectada por pixel (nodata onde não há quebra)."
              },
              "rmse_output": {
                "label": "Saída de RMSE",
                "description": "Raster opcional do RMSE do modelo harmônico do segmento inicial."
              },
              "slope_output": {
                "label": "Saída de declividade",
                "description": "Raster opcional do coeficiente de tendência linear (declividade) do segmento inicial."
              },
              "amplitude_output": {
                "label": "Saída de amplitude",
                "description": "Raster opcional da amplitude do primeiro harmônico do segmento inicial sqrt(a²+b²)."
              }
            }
          },
          "apply_radiometric_calibration": {
            "name": "Aplicar calibração radiométrica",
            "description": "Converte números digitais brutos de SAR em retroespalhamento calibrado — beta zero, sigma zero ou gamma zero — para que as aquisições se tornem fisicamente comparáveis e os limiares publicados se apliquem (ArcGIS Apply Radiometric Calibration). Nada em nenhum dos registros faz isso: rescale_value_range é um estiramento linear sem significado radiométrico, e multilook, sar_coherence, os filtros de speckle de Lee e compute_sar_indices consomem quaisquer valores que recebam.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster SAR em números digitais, amplitude, intensidade ou dB (ver 'input_units')."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de retroespalhamento calibrado de saída. Se omitido, armazenado em memória."
              },
              "calibration_type": {
                "label": "Tipo de calibração",
                "description": "'sigma0' (padrão), 'beta0' ou 'gamma0'. sigma0 e gamma0 exigem 'incidence_angle'."
              },
              "calibration_constant": {
                "label": "Constante de calibração",
                "description": "Constante de calibração do sensor A (padrão 1.0). Ignorada quando 'calibration_lut' é fornecido."
              },
              "calibration_lut": {
                "label": "LUT de calibração",
                "description": "Raster corregistrado opcional com as constantes de calibração A por célula, que substitui 'calibration_constant'."
              },
              "incidence_angle": {
                "label": "Ângulo de incidência",
                "description": "Ângulo de incidência local em graus: uma constante ou o caminho de um raster corregistrado. Obrigatório para 'sigma0' e 'gamma0'."
              },
              "input_units": {
                "label": "Unidades de entrada",
                "description": "'dn' (padrão), 'amplitude', 'intensity' ou 'db'. dn e amplitude são elevados ao quadrado para obter potência; db é primeiro delinearizado."
              },
              "output_units": {
                "label": "Unidades de saída",
                "description": "'linear' (padrão) ou 'db'."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a calibrar (padrão 1)."
              }
            }
          },
          "apportion_polygon": {
            "name": "Repartir polígono",
            "description": "Transfere atributos numéricos de uma camada de polígonos de origem para uma camada de polígonos alvo, repartidos pela área de sobreposição (reagregação dasimétrica entre sistemas de zonas), como o ArcGIS Apportion Polygon.",
            "params": {
              "target": {
                "label": "Alvo",
                "description": "Camada de polígonos alvo (recebe os valores repartidos; suas feições e atributos são preservados)."
              },
              "source": {
                "label": "Origem",
                "description": "Camada de polígonos de origem que carrega os valores a distribuir."
              },
              "fields": {
                "label": "Campos",
                "description": "Nome(s) do(s) campo(s) numérico(s) na origem a repartir, separados por vírgula."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (uma cópia do alvo com as colunas repartidas). Se omitido, armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "'area' (padrão; reparte pela área de sobreposição) ou 'weight' (reparte pela área de sobreposição multiplicada pelo 'weight_field' do alvo)."
              },
              "weight_field": {
                "label": "Campo de peso",
                "description": "Campo numérico do alvo usado como peso adicional quando method=weight."
              },
              "suffix": {
                "label": "Sufixo",
                "description": "Sufixo para as colunas de saída repartidas. Padrão '_app'."
              }
            }
          },
          "areal_interpolation": {
            "name": "Interpolação areal",
            "description": "Prediz valores agregados para polígonos alvo a partir de polígonos de origem com uma geografia diferente, ajustando uma superfície subjacente suave e reintegrando-a em vez de ponderar por área (ArcGIS Areal Interpolation Layer To Polygons). apportion_polygon assume que a quantidade é uniforme dentro de cada polígono de origem — a clássica falha do problema da unidade de área modificável — e não fornece erros padrão; o conjunto de krigagem incluído é inteiramente de suporte pontual e não aceita observações poligonais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Polígonos de origem que carregam o campo medido."
              },
              "target": {
                "label": "Alvo",
                "description": "Polígonos alvo para os quais os valores serão previstos."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numérico de valores nos polígonos de origem."
              },
              "output": {
                "label": "Saída",
                "description": "Polígonos alvo com PREDICTED, PRED_STD_ERR e os diagnósticos acrescentados. Se omitido, armazenado em memória."
              },
              "field_type": {
                "label": "Tipo de campo",
                "description": "'count' (padrão): um total extensivo, reescalonado para preservar a soma de origem. 'average': uma média intensiva, prevista diretamente sem reescalonamento."
              },
              "discretization": {
                "label": "Discretização",
                "description": "Número aproximado de pontos interiores usados para representar o suporte de área de cada polígono (padrão 25). Valores maiores são mais precisos e muito mais lentos."
              },
              "model": {
                "label": "Modelo",
                "description": "Modelo de variograma: 'exponential' (padrão), 'spherical' ou 'gaussian'."
              },
              "preserve_total": {
                "label": "Preservar total",
                "description": "Reescalonar as previsões de contagem para que o total do alvo corresponda ao total da origem (padrão true para 'count', sempre desativado para 'average'). Aplicado apenas quando os alvos cobrem as origens — o fator aplicado é relatado como 'mass_scale', de modo que uma execução com cobertura parcial fica visível."
              }
            }
          },
          "attribute_uncertainty": {
            "name": "Incerteza de atributos",
            "description": "Propagação de erro por Monte Carlo com semente sobre um atributo incerto (como o ArcGIS Attribute Uncertainty): sorteia realizações NORMAL/UNIFORME a partir de um campo de erro por feição ou de um par de limites e anexa estatísticas de média/desvio padrão/p5/p50/p95/CV.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial (ou tabela) de entrada com o atributo incerto."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo numérico que contém a estimativa (média/centro da distribuição) de cada feição."
              },
              "error_field": {
                "label": "Campo de erro",
                "description": "Campo numérico que contém a incerteza simétrica: um erro padrão para NORMAL ou uma semilargura para UNIFORM. Forneça este OU ambos lower_field/upper_field."
              },
              "lower_field": {
                "label": "Campo inferior",
                "description": "Campo numérico com o limite inferior do valor. Use junto com upper_field em vez de error_field."
              },
              "upper_field": {
                "label": "Campo superior",
                "description": "Campo numérico com o limite superior do valor. Use junto com lower_field em vez de error_field."
              },
              "distribution": {
                "label": "Distribuição",
                "description": "Distribuição do erro: NORMAL (padrão) ou UNIFORM."
              },
              "iterations": {
                "label": "Iterações",
                "description": "Número de realizações de Monte Carlo por feição (padrão 1000)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente para o gerador de números aleatórios determinístico (padrão 1)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada vetorial de saída com as estatísticas acrescentadas. Se omitido, armazenado em memória."
              }
            }
          },
          "band_collection_statistics": {
            "name": "Estatísticas de coleção de bandas",
            "description": "Mín/máx/média/desvio padrão por banda, mais as matrizes de covariância e correlação entre bandas de uma pilha raster (como o ArcGIS Band Collection Statistics) — o resumo multivariado (precursor de PCA / classificação) que falta ao conjunto incluído; distinto do cell_statistics por pixel.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Um raster multibanda (cada banda é uma camada) ou uma lista de rasters corregistrados separada por vírgula."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do CSV para o relatório de estatísticas. As matrizes são sempre retornadas no resultado."
              },
              "detail": {
                "label": "Detalhe",
                "description": "'detailed' (padrão) inclui as matrizes de covariância/correlação; 'brief' retorna apenas as estatísticas por banda."
              }
            }
          },
          "bivariate_spatial_association": {
            "name": "Associação espacial bivariada",
            "description": "Estatística L de Lee, global e local, que mede onde duas variáveis contínuas covariam espacialmente, com valor-p de teste de permutação com semente e uma classe Alto-Alto/Alto-Baixo/Baixo-Alto/Baixo-Baixo por feição — como o ArcGIS Bivariate Spatial Association. A contraparte de campo contínuo do colocation_analysis.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada com dois campos numéricos."
              },
              "x_field": {
                "label": "Campo X",
                "description": "Campo da primeira variável numérica."
              },
              "y_field": {
                "label": "Campo Y",
                "description": "Campo da segunda variável numérica."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de saída com os campos de L local, valor-p e classe. Se omitido, armazenado em memória."
              },
              "neighbors": {
                "label": "Vizinhos",
                "description": "Número de vizinhos mais próximos para os pesos espaciais (padrão 8)."
              },
              "permutations": {
                "label": "Permutações",
                "description": "Número de permutações para o teste de significância (padrão 199; 0 desativa)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente do gerador de números aleatórios das permutações (padrão 1), para resultados reproduzíveis."
              }
            }
          },
          "block_statistics": {
            "name": "Estatísticas por bloco",
            "description": "Particiona um raster em blocos não sobrepostos, reduz cada um por uma estatística e grava esse valor de volta em todas as células do bloco na resolução de entrada (ArcGIS Block Statistics). Complementa os já disponíveis focal_statistics (janela sobreposta), zonal_statistics (por camada de zonas) e cell_statistics (ao longo de uma pilha); ao contrário do aggregate_raster incluído, preserva o tamanho da célula, de modo que entrada - média do bloco fornece uma superfície de resíduos locais, e adiciona as estatísticas categóricas maioria/minoria/mediana/variedade.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é armazenado em memória."
              },
              "statistic": {
                "label": "Estatística",
                "description": "Um entre mean (padrão), majority, maximum, median, minimum, minority, range, std, sum, variety."
              },
              "neighborhood": {
                "label": "Vizinhança",
                "description": "Forma do bloco: rectangle (padrão), circle, annulus ou wedge."
              },
              "size": {
                "label": "Tamanho",
                "description": "Dimensões do bloco em células: 'width,height' para rectangle (padrão '3,3'), 'radius' para circle/wedge ou 'inner,outer' para annulus."
              },
              "start_angle": {
                "label": "Ângulo inicial",
                "description": "Ângulo inicial da cunha em graus no sentido anti-horário a partir do leste (padrão 0)."
              },
              "end_angle": {
                "label": "Ângulo final",
                "description": "Ângulo final da cunha em graus no sentido anti-horário a partir do leste (padrão 90)."
              },
              "ignore_nodata": {
                "label": "Ignorar nodata",
                "description": "Se verdadeiro (padrão), os blocos são calculados apenas a partir das células válidas; se falso, qualquer célula nodata torna todo o bloco nodata."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler (padrão 1)."
              }
            }
          },
          "boundary_clean": {
            "name": "Limpeza de limites",
            "description": "Suaviza os limites das zonas de um raster categórico e remove ruído pontual por filtragem de maioria ou por limpeza de limites com expansão/contração, a limpeza padrão antes da poligonização — como o ArcGIS Boundary Clean / Majority Filter.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster categórico (de valores inteiros) de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída. Se omitido, armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "'majority' (remoção de ruído pela maioria dos vizinhos; padrão) ou 'expand_shrink' (suavização Boundary Clean)."
              },
              "neighbors": {
                "label": "Vizinhos",
                "description": "Conectividade da vizinhança: 4 (rook) ou 8 (queen; padrão)."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Apenas no modo majority: 'majority' (maioria estrita dos vizinhos; padrão) ou 'half' (pelo menos metade)."
              },
              "iterations": {
                "label": "Iterações",
                "description": "Número de passagens a executar (padrão 1)."
              },
              "sort": {
                "label": "Ordenar",
                "description": "Apenas no modo expand_shrink: prioridade das zonas pela contagem de células — 'descending' (as zonas maiores vencem; padrão), 'ascending' (as zonas menores vencem) ou 'none'."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler (padrão 1)."
              }
            }
          },
          "buffer_3d": {
            "name": "Buffer 3D",
            "description": "Gera buffers de pontos e linhas 3D como geometria volumétrica (esferas e cápsulas) emitida como superfície triangulada, como o ArcGIS Buffer 3D.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos ou polilinhas 3D de entrada (a ausência de Z é tratada como 0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              },
              "distance": {
                "label": "Distância",
                "description": "Raio do buffer em unidades do mapa."
              },
              "distance_field": {
                "label": "Campo de distância",
                "description": "Campo de raio por feição opcional, que substitui 'distance'."
              },
              "shape": {
                "label": "Forma",
                "description": "round (padrão; extremidades hemisféricas) ou flat (cilindro com extremidades planas)."
              },
              "quality": {
                "label": "Qualidade",
                "description": "Resolução da tesselação: segmentos ao longo da circunferência (padrão 12, mín. 4, máx. 64)."
              }
            }
          },
          "buffer_vector": {
            "name": "Buffer vetorial",
            "description": "Estende geometrias por uma distância especificada, criando buffers poligonais com estilos de extremidade/junção personalizáveis. A dissolução opcional mescla buffers sobrepostos em polígonos unificados.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "distance": {
                "label": "Distância",
                "description": "Distância do buffer em unidades do mapa."
              },
              "quadrant_segments": {
                "label": "Segmentos por quadrante",
                "description": "Resolução do arco em segmentos por quadrante; o padrão é 8."
              },
              "cap_style": {
                "label": "Estilo de extremidade",
                "description": "Estilo de extremidade da linha: round, flat ou square."
              },
              "join_style": {
                "label": "Estilo de junção",
                "description": "Estilo de junção dos cantos: round, bevel ou mitre."
              },
              "mitre_limit": {
                "label": "Limite de mitra",
                "description": "Limite da junção em esquadria usado quando join_style=mitre; o padrão é 5.0."
              },
              "dissolve": {
                "label": "Dissolver",
                "description": "Dissolver os buffers sobrepostos em um único polígono unificado; o padrão é false."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída."
              }
            }
          },
          "build_balanced_zones": {
            "name": "Construir zonas equilibradas",
            "description": "Agrupa polígonos contíguos em um número alvo de zonas conectadas que equilibram a contagem de feições, a soma de um atributo ou a homogeneidade de um atributo, usando o particionamento por árvore geradora SKATER.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de polígonos de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "zones": {
                "label": "Zonas",
                "description": "Número desejado de zonas a criar."
              },
              "criterion": {
                "label": "Critério",
                "description": "Objetivo de balanceamento: 'homogeneity' (padrão), 'equal_count' ou 'equal_sum' (do primeiro campo)."
              },
              "fields": {
                "label": "Campos",
                "description": "Campo(s) numérico(s) de análise separados por vírgula. Obrigatório para 'homogeneity' e 'equal_sum'; determina os pesos das arestas da árvore geradora."
              },
              "contiguity": {
                "label": "Contiguidade",
                "description": "Regra de adjacência: 'rook' (aresta compartilhada, padrão) ou 'queen' (aresta ou vértice compartilhado)."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Distância máxima para que dois segmentos de limite contem como compartilhados (rook). Padrão 1e-6."
              }
            }
          },
          "build_seamlines": {
            "name": "Construir linhas de junção",
            "description": "Dado um conjunto de rasters sobrepostos (e contornos opcionais), calcula onde cada imagem deve ser cortada para que o mosaico se una ao longo de uma costura minimamente visível, emitindo um polígono de linha de costura não sobreposto por imagem via atribuição por Voronoi, ordem de prioridade, radiometria ou sensível a bordas. Como o ArcGIS Build Seamlines.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Caminhos dos rasters a mosaicar, separados por vírgula ou ponto e vírgula."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho dos polígonos de linhas de costura de saída (uma feição por raster de entrada). Se omitido, armazenado em memória."
              },
              "footprints": {
                "label": "Contornos",
                "description": "Camada de polígonos opcional que fornece a extensão válida de cada raster, na ordem de entrada. Derivada dos dados válidos quando omitida."
              },
              "method": {
                "label": "Método",
                "description": "'voronoi' (padrão), 'order', 'radiometry' ou 'edge_detection'."
              },
              "sort_ascending": {
                "label": "Ordenar em ordem crescente",
                "description": "Para o método 'order': true (padrão) dá prioridade aos rasters anteriores, false dá prioridade aos posteriores."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de análise (padrão: o menor tamanho de célula de entrada)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) usada pelos métodos radiométricos (padrão 1)."
              },
              "min_region_size": {
                "label": "Tamanho mínimo da região",
                "description": "Reatribuir a uma imagem vizinha as regiões atribuídas menores que este número de células (padrão 0, ou seja, manter todas)."
              },
              "blend_width": {
                "label": "Largura de mistura",
                "description": "Largura da transição suave em unidades do mapa, gravada como atributo para o mosaicamento posterior (padrão 0)."
              },
              "blend_type": {
                "label": "Tipo de mistura",
                "description": "'both' (padrão), 'inside' ou 'outside'; gravado como atributo."
              }
            }
          },
          "calculate_adjacent_fields": {
            "name": "Calcular campos adjacentes",
            "description": "Preenche oito campos direcionais de folhas vizinhas (N, NE, E, SE, S, SW, W, NW) em cada ladrilho de uma grade de índice de série de mapas com o nome da página adjacente, para rótulos de margem do tipo \"continua na folha …\" — como o ArcGIS Calculate Adjacent Fields.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Grade de índice de série de mapas em polígonos de entrada (por exemplo, a saída de grid_index_features)."
              },
              "page_name_field": {
                "label": "Campo de nome da página",
                "description": "Campo cujo valor rotula cada página (gravado nos campos direcionais dos vizinhos)."
              },
              "output": {
                "label": "Saída",
                "description": "Vetor de polígonos de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "include_diagonal": {
                "label": "Incluir diagonal",
                "description": "Também preencher os quatro campos diagonais (NE, SE, SW, NW) a partir dos ladrilhos que se tocam pelos cantos. Padrão true."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Quantizar os vértices em uma grade deste tamanho (unidades do CRS) antes de fazer a correspondência dos limites. Padrão 0 (coordenadas exatas)."
              }
            }
          },
          "calculate_central_meridian_and_parallels": {
            "name": "Calcular meridiano central e paralelos",
            "description": "Calcula, por feição, um meridiano central e dois paralelos padrão a partir da extensão de cada feição, para páginas de séries de mapas e atlas, como o ArcGIS Calculate Central Meridian And Parallels.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições de entrada em coordenadas geográficas (longitude/latitude), tipicamente uma grade de páginas de grid_index_features."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              },
              "field": {
                "label": "Campo",
                "description": "Nome do campo de meridiano central a gravar (padrão 'central_meridian')."
              },
              "standard_offset": {
                "label": "Deslocamento padrão",
                "description": "Fração do intervalo de latitude usada para recuar cada paralelo padrão em relação à borda da feição (padrão 0.1667, a regra de 1/6 da Esri). Deve estar em [0, 0.5)."
              }
            }
          },
          "calculate_composite_index": {
            "name": "Calcular índice composto",
            "description": "Combina vários atributos numéricos em um índice composto (como o ArcGIS Calculate Composite Index): escalonamento por variável (mín-máx/escore z/percentil) com inversão opcional, combinação ponderada (média/soma/média geométrica) e reescalonamento da saída — o irmão vetorial do fuzzy_overlay.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial (ou tabela) de entrada com campos de variáveis numéricas."
              },
              "fields": {
                "label": "Campos",
                "description": "Campos de variáveis separados por vírgula; acrescente ':reverse' a um campo cujos valores altos devam reduzir o índice (por exemplo 'income:reverse,unemployment')."
              },
              "output": {
                "label": "Saída",
                "description": "Camada vetorial de saída com os campos de índice adicionados. Se omitido, armazenado em memória."
              },
              "scaling": {
                "label": "Escalonamento",
                "description": "Escalonamento por variável: 'minmax' (padrão), 'zscore', 'percentile' ou 'none'."
              },
              "weights": {
                "label": "Pesos",
                "description": "Pesos separados por vírgula correspondentes a 'fields' (padrão: pesos iguais)."
              },
              "combine": {
                "label": "Combinar",
                "description": "Como combinar as variáveis escalonadas: 'mean' (padrão), 'sum' ou 'geometric_mean'."
              },
              "output_range": {
                "label": "Intervalo de saída",
                "description": "Reescalonar o índice combinado: 'minmax' (0–1, padrão), 'zero_to_100', 'zscore' ou 'none'."
              }
            }
          },
          "calculate_distance_band": {
            "name": "Calcular banda de distância",
            "description": "Relata a distância mínima, média e máxima na qual cada feição tem pelo menos N vizinhos (como o ArcGIS Calculate Distance Band from Neighbor Count) — o diagnóstico de limiar que garante que nenhuma feição fique com zero vizinhos antes das estatísticas espaciais baseadas em distância. O generate_spatial_weights_matrix incluído constrói a matriz, mas nunca relata essa banda.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos/feições de entrada (CRS projetado; distâncias nas suas unidades)."
              },
              "neighbors": {
                "label": "Vizinhos",
                "description": "Número de vizinhos k (>= 1). Padrão 1."
              },
              "distance_method": {
                "label": "Método de distância",
                "description": "'euclidean' (padrão) ou 'manhattan'."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do CSV para uma tabela feature_id,kth_neighbor_distance."
              }
            }
          },
          "calculate_end_time": {
            "name": "Calcular hora de término",
            "description": "Preenche um campo de hora final a partir da hora inicial do registro seguinte dentro de cada grupo de entidades, transformando observações instantâneas em registros com extensão temporal (ArcGIS Calculate End Time). transform_fields faz transformações por valor e summary_statistics agrega grupos, mas nada realizava um preenchimento temporal ordenado por linha.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial ou tabela de entrada."
              },
              "start_field": {
                "label": "Campo inicial",
                "description": "Campo de carimbo de tempo: um epoch numérico ou uma cadeia de data/data-hora ISO-8601."
              },
              "end_field": {
                "label": "Campo final",
                "description": "Campo que recebe a hora final (padrão 'END_TIME'). Criado se ausente, sobrescrito se presente."
              },
              "id_fields": {
                "label": "Campos de ID",
                "description": "Campos de agrupamento separados por vírgula ou ponto e vírgula. As horas finais são derivadas apenas dentro de um grupo, nunca através dos limites entre grupos."
              },
              "last_record": {
                "label": "Último registro",
                "description": "O que gravar na última linha de cada grupo: 'null' (padrão), 'same_as_start' ou 'duration' (início + default_duration)."
              },
              "default_duration": {
                "label": "Duração padrão",
                "description": "Segundos somados ao início para last_record 'duration'."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de saída. Se omitido, armazenado em memória."
              }
            }
          },
          "calculate_grid_convergence_angle": {
            "name": "Calcular ângulo de convergência meridiana",
            "description": "Calcula, por feição, o ângulo de convergência de grade entre o norte da grade e o norte verdadeiro a partir da lon/lat do centroide e de um meridiano central (por padrão, o meridiano central UTM da própria feição), gravando-o em um campo para a rotação correta de símbolos/rótulos em mapas projetados — como o ArcGIS Calculate Grid Convergence Angle. Convenção geográfica (horária a partir do norte) ou aritmética (anti-horária a partir do leste). Matemática pura, sem PROJ; sem relação com a métrica de terreno convergence_index incluída. A geometria é lida como graus de lon/lat.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (qualquer tipo de geometria) em coordenadas geográficas (graus lon/lat, EPSG:4326)."
              },
              "angle_field": {
                "label": "Campo de ângulo",
                "description": "Nome do campo de ponto flutuante que conterá o ângulo de convergência em graus. Padrão 'GRID_CONV'."
              },
              "angle_type": {
                "label": "Tipo de ângulo",
                "description": "Convenção angular: 'geographic' (graus no sentido horário a partir do norte, positivo para leste) ou 'arithmetic' (graus no sentido anti-horário a partir do leste, 90 − geográfico). Padrão 'geographic'."
              },
              "central_meridian": {
                "label": "Meridiano central",
                "description": "Longitude do meridiano central em graus. Se omitida, cada feição usa o meridiano central de sua própria zona UTM, derivado de sua longitude."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              }
            }
          },
          "calculate_missing_z_values": {
            "name": "Calcular valores Z faltantes",
            "description": "Preenche valores Z ausentes ou de marcador de posição ao longo de feições 3D interpolando a partir dos valores Z válidos de cada lado, como o ArcGIS Calculate Missing Z Values.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de feições de entrada com vértices 3D."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              },
              "placeholder": {
                "label": "Marcador de posição",
                "description": "Valor sentinela que marca um Z ausente (por exemplo -9999). Os vértices sem nenhum Z são sempre tratados como ausentes."
              },
              "method": {
                "label": "Método",
                "description": "Método de preenchimento: 'linear' (padrão; interpola pela distância ao longo da feição) ou 'nearest'."
              },
              "extrapolate": {
                "label": "Extrapolar",
                "description": "Preencher as lacunas iniciais/finais estendendo o vértice válido mais próximo (padrão false; os vértices não preenchidos são contados em vez disso)."
              }
            }
          },
          "calculate_motion_statistics": {
            "name": "Calcular estatísticas de movimento",
            "description": "Anota pontos de trajeto com carimbo de tempo com estatísticas de movimento — velocidade, aceleração, rumo, distância do segmento e acumulada, tempo decorrido e indicador de inatividade — agrupados por trajeto e ordenados por tempo, como o ArcGIS Calculate Motion Statistics.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada com observações com carimbo de tempo."
              },
              "track_field": {
                "label": "Campo de trajeto",
                "description": "Campo que identifica cada trajeto/objeto em movimento."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo que contém o tempo de cada ponto: segundos numéricos ou um carimbo de tempo ISO-8601."
              },
              "output": {
                "label": "Saída",
                "description": "Vetor de pontos de saída (atributos originais + campos de movimento). Se omitido, armazenado em memória."
              },
              "window": {
                "label": "Janela",
                "description": "Número de pontos anteriores usados para a 'avg_speed' suavizada (padrão 1 = instantânea)."
              },
              "idle_distance": {
                "label": "Distância de inatividade",
                "description": "Raio de inatividade: um ponto está inativo quando o objeto se deslocou no máximo esta distância nos últimos idle_duration segundos. Padrão 0 (detecção de inatividade desligada)."
              },
              "idle_duration": {
                "label": "Duração de inatividade",
                "description": "Janela retroativa (segundos) para a detecção de inatividade. Padrão 60."
              }
            }
          },
          "calculate_polygon_main_angle": {
            "name": "Calcular ângulo principal do polígono",
            "description": "Grava a orientação dominante de cada polígono (a direção do lado longo de seu retângulo delimitador de área mínima, via calibradores rotativos) em um campo de ângulo — como o ArcGIS Calculate Polygon Main Angle. A orientação vetorial por polígono que falta ao patch_orientation incluído, apenas raster; alimenta a rotação de símbolos/rótulos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de polígonos de saída com o campo de ângulo adicionado. Se omitido, armazenado em memória."
              },
              "angle_field": {
                "label": "Campo de ângulo",
                "description": "Nome do campo de ângulo a gravar (padrão 'MainAngle')."
              },
              "convention": {
                "label": "Convenção",
                "description": "'arithmetic' (anti-horário a partir do leste; padrão), 'geographic' (horário a partir do norte) ou 'graphic' (horário a partir do leste)."
              }
            }
          },
          "calculate_rates": {
            "name": "Calcular taxas",
            "description": "Calcula taxas suavizadas a partir de campos de contagem e população (como o ArcGIS Calculate Rates): taxa bruta, Bayes empírico global de Marshall ou Bayes empírico espacial sobre os k vizinhos mais próximos — o passo padrão de estabilização antes da análise de hotspots de taxas de doenças/crimes.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de polígonos ou de pontos de entrada com campos de contagem e de população."
              },
              "count_field": {
                "label": "Campo de contagem",
                "description": "Campo que contém a contagem de eventos (numerador)."
              },
              "population_field": {
                "label": "Campo de população",
                "description": "Campo que contém a população em risco (denominador)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de saída com os campos de taxa adicionados. Se omitido, armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "'crude', 'eb_global' (padrão) ou 'eb_spatial'."
              },
              "per": {
                "label": "Por",
                "description": "Multiplicador da taxa, por exemplo 100000 para taxas por 100 mil (padrão 100000)."
              },
              "neighbors": {
                "label": "Vizinhos",
                "description": "Apenas eb_spatial: número de vizinhos mais próximos para a taxa de referência local (padrão 8)."
              }
            }
          },
          "calculate_transformation_errors": {
            "name": "Calcular erros de transformação",
            "description": "Ajusta uma transformação de similaridade/afim/projetiva a partir de ligações de deslocamento e relata o erro residual de cada ligação mais o RMSE geral, para que pontos de controle ruins possam ser encontrados e removidos antes da transformação. Como o ArcGIS Calculate Transformation Errors.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Linhas de ligação de deslocamento: o primeiro vértice é o ponto de origem (from), o último vértice o ponto de destino (to)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho de saída da tabela de ligações com os campos de resíduos acrescentados. Se omitido, armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "'affine' (padrão, 6 parâmetros), 'similarity' (4) ou 'projective' (8)."
              },
              "keep_geometry": {
                "label": "Manter geometria",
                "description": "Manter a geometria de cada ligação na saída (padrão true). Defina como false para obter uma tabela pura."
              }
            }
          },
          "calculate_transit_service_frequency": {
            "name": "Calcular frequência do serviço de transporte",
            "description": "Frequência de serviço de transporte público GTFS em janela: para uma data de serviço (via calendar/calendar_dates) e uma janela de tempo, conta as viagens que atendem cada parada ou linha de rota e relata viagens por hora, como o ArcGIS Calculate Transit Service Frequency.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho de um diretório de feed GTFS extraído."
              },
              "target": {
                "label": "Alvo",
                "description": "'stops' (um ponto por parada, padrão) ou 'lines' (uma polilinha por rota)."
              },
              "date": {
                "label": "Data",
                "description": "Data de serviço AAAAMMDD, resolvida via calendar.txt/calendar_dates.txt. Se omitida, todos os serviços contam."
              },
              "start_time": {
                "label": "Hora de início",
                "description": "Início da janela HH:MM ou HH:MM:SS (os horários GTFS podem ultrapassar 24:00). Se omitido, todo o dia conta."
              },
              "duration_minutes": {
                "label": "Duração (minutos)",
                "description": "Duração da janela em minutos (usada com start_time; também define o denominador por hora)."
              },
              "count": {
                "label": "Contagem",
                "description": "'departures' (padrão) ou 'arrivals' — qual campo de horário de parada contar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              }
            }
          },
          "calculate_utm_zone": {
            "name": "Calcular zona UTM",
            "description": "Calcula a zona UTM ideal e o código EPSG WGS84 para cada feição a partir da longitude/latitude do centroide, adicionando um campo de zona (1–60) e um campo EPSG (326##/327##) — para séries de mapas com projeção adaptativa, como o ArcGIS Calculate UTM Zone. Matemática pura com as exceções da Noruega/Svalbard; sem PROJ. A geometria é lida como graus de lon/lat.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (qualquer tipo de geometria) em coordenadas geográficas (graus lon/lat, EPSG:4326)."
              },
              "zone_field": {
                "label": "Campo de zona",
                "description": "Nome do campo inteiro que conterá o número da zona UTM (1–60). Padrão 'utm_zone'."
              },
              "epsg_field": {
                "label": "Campo EPSG",
                "description": "Nome do campo inteiro que conterá o código EPSG UTM WGS84 (326## norte, 327## sul). Padrão 'utm_epsg'."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              }
            }
          },
          "cartogram": {
            "name": "Cartograma",
            "description": "Distorce polígonos para que a área seja proporcional a um valor de atributo: não contíguo (escalona cada polígono em torno de seu centroide) ou Dorling (círculos proporcionais com remoção de sobreposição).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo numérico ao qual a área de cada feição deve ser proporcional."
              },
              "method": {
                "label": "Método",
                "description": "'non_contiguous' (padrão; escalona os polígonos no local) ou 'dorling' (círculos proporcionais)."
              },
              "iterations": {
                "label": "Iterações",
                "description": "Iterações de remoção de sobreposição do método Dorling (padrão 100). Ignorado por non_contiguous."
              }
            }
          },
          "causal_inference_analysis": {
            "name": "Análise de inferência causal",
            "description": "Estima o efeito causal de um tratamento binário sobre um desfecho via pareamento por escore de propensão, ponderação por probabilidade inversa ou ajuste por regressão, com IC por bootstrap com semente e uma tabela de balanceamento de covariáveis por confundidor antes/depois do ajuste (como o ArcGIS Causal Inference Analysis).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de feições de entrada."
              },
              "outcome_field": {
                "label": "Campo de desfecho",
                "description": "Campo numérico de resultado (variável dependente)."
              },
              "treatment_field": {
                "label": "Campo de tratamento",
                "description": "Campo de tratamento binário (0/1 ou booleano). Tratamentos contínuos não são suportados nesta versão."
              },
              "confounding_fields": {
                "label": "Campos de confundimento",
                "description": "Campo(s) numérico(s) de confundimento a ajustar, separados por vírgula."
              },
              "method": {
                "label": "Método",
                "description": "'ps_matching' (padrão, pareamento por vizinho mais próximo com calibre sobre o escore de propensão), 'ipw' (ponderação estabilizada pelo inverso da probabilidade) ou 'regression_adjustment' (resultado ~ tratamento + confundidores)."
              },
              "add_spatial_confounders": {
                "label": "Adicionar confundidores espaciais",
                "description": "Se verdadeiro, amplia o conjunto de confundidores com as coordenadas x/y de cada feição mais a média dos k vizinhos mais próximos de cada confundidor (padrão false)."
              },
              "balance_threshold": {
                "label": "Limiar de balanceamento",
                "description": "Limiar da diferença padronizada de médias para a verificação de balanceamento após o ajuste (padrão 0.1)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (cópia da entrada + colunas de escore de propensão / peso / identificador de pareamento). Se omitido, armazenado em memória."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente inteira para o intervalo de confiança bootstrap determinístico (padrão 42)."
              }
            }
          },
          "cell_position_statistics": {
            "name": "Estatísticas de posição de célula",
            "description": "Estatísticas de posição e classificação por célula ao longo de uma pilha de rasters alinhados (ArcGIS Highest Position, Lowest Position, Popularity e Rank): qual camada contém o valor extremo, o valor que ocorre um determinado número de vezes ou o n-ésimo menor valor. cell_statistics reduz uma pilha a um valor e nunca pode relatar de qual camada esse valor veio, e o find_argument_statistics incluído trabalha ao longo do eixo de argumento de um raster multibanda sem a semântica de seletor de popularidade/classificação.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Um raster multibanda (cada banda é uma camada) ou uma lista de rasters corregistrados separada por vírgula."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de saída. Se omitido, armazenado em memória."
              },
              "statistic": {
                "label": "Estatística",
                "description": "'highest_position' (padrão), 'lowest_position', 'popularity' ou 'rank'."
              },
              "selector": {
                "label": "Seletor",
                "description": "Obrigatório para 'popularity' e 'rank': o caminho de um raster corregistrado, ou um número constante, que fornece a contagem de ocorrências por célula (popularity) ou a posição (base 1) a selecionar."
              },
              "ignore_nodata": {
                "label": "Ignorar nodata",
                "description": "Ignorar as observações nodata por célula (padrão true). Quando falso, qualquer observação nodata torna a célula nodata."
              },
              "process_as_multiband": {
                "label": "Processar como multibanda",
                "description": "'single_band' (padrão): cada banda de cada entrada é uma camada de uma única pilha. 'multi_band': a banda i de cada entrada forma sua própria pilha, gerando um resultado multibanda."
              }
            }
          },
          "cell_records_to_sectors": {
            "name": "Registros de células para setores",
            "description": "Constrói a geometria de cobertura de antenas a partir de pontos de torres de celular: polígonos em cunha ou linhas bissetoras de setor a partir de azimute, largura de feixe e raio por torre — como o ArcGIS Cell Site Records To Feature Class / Generate Sector Lines.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada com antenas/torres."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "output_type": {
                "label": "Tipo de saída",
                "description": "Geometria a emitir: 'wedge' (polígonos de cobertura, padrão) ou 'line' (linhas bissetoras dos setores)."
              },
              "azimuth_field": {
                "label": "Campo de azimute",
                "description": "Campo que contém o azimute de cada antena (graus da bússola, 0 = norte, sentido horário). Recorre a 'azimuth' quando ausente."
              },
              "beamwidth_field": {
                "label": "Campo de largura do feixe",
                "description": "Campo que contém a largura de feixe de cada antena em graus. Recorre a 'beamwidth' quando ausente."
              },
              "radius_field": {
                "label": "Campo de raio",
                "description": "Campo que contém o raio de cobertura de cada antena em unidades do CRS. Recorre a 'radius' quando ausente."
              },
              "azimuth": {
                "label": "Azimute",
                "description": "Azimute padrão em graus da bússola quando nenhum campo é fornecido / um valor está ausente. Padrão 0."
              },
              "beamwidth": {
                "label": "Largura do feixe",
                "description": "Largura de feixe padrão em graus (0 < bw ≤ 360; ≥ 360 = omnidirecional). Padrão 65."
              },
              "radius": {
                "label": "Raio",
                "description": "Raio de cobertura padrão em unidades do CRS (deve ser positivo). Padrão 1000."
              },
              "segments": {
                "label": "Segmentos",
                "description": "Número de segmentos retos usados para aproximar cada arco de setor (≥ 1). Padrão 16."
              }
            }
          },
          "cell_statistics": {
            "name": "Estatísticas de células",
            "description": "Estatística por pixel ao longo de uma pilha de rasters alinhados (como o ArcGIS Cell Statistics): média, maioria, máximo, mediana, mínimo, minoria, percentil, amplitude, desvio padrão, soma ou variedade — o redutor local multi-raster que os sum_overlay/weighted_sum incluídos (apenas soma) e as ferramentas de vizinhança/zonais não fornecem.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Um raster multibanda (cada banda é uma camada) ou uma lista de rasters corregistrados separada por vírgula."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de banda única de saída com o valor reduzido. Se omitido, armazenado em memória."
              },
              "statistic": {
                "label": "Estatística",
                "description": "'mean' (padrão), 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'range', 'std', 'sum' ou 'variety'."
              },
              "ignore_nodata": {
                "label": "Ignorar nodata",
                "description": "Ignorar as observações nodata por célula (padrão true). Quando falso, qualquer observação nodata torna a célula nodata."
              },
              "percentile_value": {
                "label": "Valor do percentil",
                "description": "Percentil em [0, 100] para a estatística 'percentile' (padrão 50 = mediana)."
              }
            }
          },
          "central_feature": {
            "name": "Feição central / média direcional linear",
            "description": "A feição central (a feição de entrada com a menor distância total a todas as outras) ou a média direcional linear (rumo médio, variância circular e comprimento médio de feições lineares) — os dois membros de Medição de Distribuições Geográficas que faltam ao directional_distribution (ArcGIS Central Feature / Linear Directional Mean).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (pontos para central_feature; linhas para linear_directional_mean)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "statistic": {
                "label": "Estatística",
                "description": "'central_feature' (padrão) ou 'linear_directional_mean'."
              },
              "weight_field": {
                "label": "Campo de peso",
                "description": "Campo numérico opcional que pondera cada feição (apenas central_feature)."
              },
              "case_field": {
                "label": "Campo de caso",
                "description": "Campo opcional pelo qual agrupar as feições; um resultado por valor distinto."
              },
              "distance": {
                "label": "Distância",
                "description": "Métrica de distância para central_feature: 'euclidean' (padrão) ou 'manhattan'."
              },
              "orientation_only": {
                "label": "Apenas orientação",
                "description": "Tratar as linhas como não direcionadas (orientação módulo 180°) para linear_directional_mean. Padrão false."
              }
            }
          },
          "change_point_detection": {
            "name": "Detecção de pontos de mudança",
            "description": "Detecta mudanças abruptas na série temporal em cada localização de um cubo espaço-temporal H3 (como o ArcGIS Change Point Detection): segmentação binária com custo de mudança de média ou de declividade e penalidade escalonada por sensibilidade (ou um número fixo de pontos de mudança), relatando por célula a contagem de mudanças, o ano da maior mudança e as médias dos segmentos. A segmentação temporal que o change_vector_analysis de duas datas e os testes monotônicos de Mann-Kendall não conseguem fazer.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos de entrada com eventos com carimbo de tempo (lon/lat)."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo que contém o tempo de cada ponto: um número ou um carimbo de tempo ISO-8601."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de polígonos H3 de saída com os atributos de pontos de mudança. Se omitido, armazenado em memória."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo numérico a agregar por grupo (padrão: contagem de pontos)."
              },
              "change_type": {
                "label": "Tipo de mudança",
                "description": "'mean' (mudanças de nível; padrão) ou 'slope' (mudanças de tendência)."
              },
              "method": {
                "label": "Método",
                "description": "'auto' (baseado em penalidade, padrão) ou 'defined' (exatamente num_change_points)."
              },
              "num_change_points": {
                "label": "Número de pontos de mudança",
                "description": "Método defined: número de pontos de mudança a encontrar por localização (padrão 1)."
              },
              "sensitivity": {
                "label": "Sensibilidade",
                "description": "Método auto: escala da penalidade; maior = menos pontos de mudança (padrão 1.0)."
              },
              "time_step": {
                "label": "Passo de tempo",
                "description": "Duração de um passo de tempo nas unidades de time_field (padrão 1)."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Resolução H3 de 0 a 15 (padrão 7)."
              }
            }
          },
          "classification_accuracy_assessment": {
            "name": "Avaliação da acurácia da classificação",
            "description": "Avalia um raster classificado (ou pontos que já carregam uma classe predita) contra pontos de referência rotulados com a verdade de campo, produzindo uma matriz de confusão, acurácia global, acurácia do produtor/usuário por classe e kappa de Cohen — como o ArcGIS Compute Confusion Matrix.",
            "params": {
              "points": {
                "label": "Pontos",
                "description": "Camada de pontos de referência (avaliação de acurácia) que carrega o campo de classe de verdade de campo."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Atributo dos pontos que contém o rótulo de classe de verdade de campo (referência)."
              },
              "input": {
                "label": "Entrada",
                "description": "Raster classificado a amostrar em cada ponto de referência (célula mais próxima). Forneça este OU 'classified_field'."
              },
              "classified_field": {
                "label": "Campo classificado",
                "description": "Atributo dos pontos que já contém a classe prevista (do mapa), usado em vez de amostrar um raster. Forneça este OU 'input'."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) do raster classificado a amostrar (padrão 1)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída para os pontos de referência anotados com REF_CLASS, MAP_CLASS, CORRECT. Se omitido, armazenado em memória."
              }
            }
          },
          "collapse_dual_lines_to_centerline": {
            "name": "Colapsar linhas duplas para eixo central",
            "description": "Detecta pares de linhas aproximadamente paralelas dentro de uma tolerância de largura (pistas duplas, contornos de vias) e substitui cada par por uma única linha central, reconectando as junções — como o ArcGIS Collapse Dual Lines To Centerline.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de linhas de entrada (CRS projetado; larguras nas suas unidades)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "min_width": {
                "label": "Largura mínima",
                "description": "Separação mínima entre linhas pareadas, em unidades do CRS (padrão 0)."
              },
              "max_width": {
                "label": "Largura máxima",
                "description": "Separação máxima entre linhas pareadas, em unidades do CRS. Obrigatória (a largura de colapso)."
              },
              "attribute": {
                "label": "Atributo",
                "description": "Campo opcional que deve coincidir para que duas linhas sejam pareadas (por exemplo, nome ou classe da estrada)."
              },
              "sample_distance": {
                "label": "Distância de amostragem",
                "description": "Intervalo de densificação para o teste de paralelismo, em unidades do CRS. Padrão: max_width / 2."
              },
              "min_overlap": {
                "label": "Sobreposição mínima",
                "description": "Fração mínima de uma linha que deve correr paralela à sua parceira para que sejam pareadas (0-1, padrão 0.5)."
              }
            }
          },
          "collapse_hydro_polygon": {
            "name": "Colapsar polígono hidrográfico",
            "description": "Colapsa polígonos de água estreitos em linhas centrais mantendo os trechos largos como polígonos (como o ArcGIS Collapse Hydro Polygon): traça a linha central de cada polígono ao longo de seu eixo principal via pontos médios de seções transversais perpendiculares, mede a largura local e colapsa onde a largura mediana está no limiar ou abaixo dele. A generalização polígono→linha com limiar de largura que o collapse_dual_lines_to_centerline para contornos de vias e o river_centerlines raster não fazem.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de polígonos de água de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de linhas centrais de saída para os polígonos colapsados (estreitos). Se omitido, armazenado em memória."
              },
              "collapse_width": {
                "label": "Largura de colapso",
                "description": "Os polígonos cuja largura mediana é igual ou inferior a este valor colapsam para uma linha central."
              },
              "sample_distance": {
                "label": "Distância de amostragem",
                "description": "Espaçamento das estações de seção transversal ao longo do eixo (padrão: collapse_width / 2)."
              },
              "min_length": {
                "label": "Comprimento mínimo",
                "description": "Descartar as linhas centrais colapsadas mais curtas que este valor (padrão 0)."
              },
              "retained": {
                "label": "Retidos",
                "description": "Camada de polígonos de saída opcional para os trechos largos (não colapsados)."
              }
            }
          },
          "collapse_road_detail": {
            "name": "Colapsar detalhe viário",
            "description": "Colapsa pequenos laços e desvios de vias (rotatórias, \"ossos de cachorro\", desvios deslocados) abaixo de um limiar de diâmetro em conexões diretas únicas para exibição em pequena escala, preservando a conectividade da rede — como o ArcGIS Collapse Road Detail.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de estradas (linhas) de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "collapse_distance": {
                "label": "Distância de colapso",
                "description": "Diâmetro máximo de detalhe a colapsar. Os laços/desvios cujo diâmetro envolvente está abaixo deste valor (metros para um CRS geográfico, unidades do CRS caso contrário) são colapsados; os maiores são mantidos."
              },
              "road_class_field": {
                "label": "Campo de classe da estrada",
                "description": "Campo opcional de classe de estrada. Quando definido, apenas os laços cujas estradas de fronteira compartilham todas o mesmo valor de classe são colapsados (os entroncamentos entre classes diferentes são preservados)."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Distância dentro da qual as extremidades das estradas são tratadas como o mesmo entroncamento. Padrão 1e-6."
              }
            }
          },
          "collect_events": {
            "name": "Coletar eventos",
            "description": "Colapsa pontos de incidentes coincidentes em localizações únicas, cada uma com uma contagem ICOUNT dos eventos ali ocorridos, como o ArcGIS Collect Events.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada (Point ou MultiPoint)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Tolerância de ajuste em unidades do mapa; os pontos cujas coordenadas são arredondadas para a mesma célula são tratados como coincidentes (padrão 1e-8, ou seja, praticamente exato)."
              }
            }
          },
          "colocation_analysis": {
            "name": "Análise de colocalização",
            "description": "Quociente de colocalização local (Leslie & Kronenfeld) que mede se pontos da categoria A são encontrados desproporcionalmente entre vizinhos da categoria B, com valor-p de teste de permutação com semente — como o ArcGIS Colocation Analysis.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada com um campo de categoria."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (uma cópia da entrada com os campos de colocalização). Se omitido, armazenado em memória."
              },
              "category_field": {
                "label": "Campo de categoria",
                "description": "Campo que contém a categoria de cada ponto."
              },
              "category_a": {
                "label": "Categoria A",
                "description": "Categoria focal (A): os pontos cuja colocalização com B é medida."
              },
              "category_b": {
                "label": "Categoria B",
                "description": "Categoria vizinha (B): os pontos contra os quais A é testada."
              },
              "neighbors": {
                "label": "Vizinhos",
                "description": "Número de vizinhos mais próximos k (padrão 8)."
              },
              "weight": {
                "label": "Peso",
                "description": "Ponderação dos vizinhos: 'gaussian' (decaimento com a distância, padrão) ou 'uniform'."
              },
              "permutations": {
                "label": "Permutações",
                "description": "Número de permutações de rótulos para o teste de significância (padrão 99; 0 desativa)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente do gerador de números aleatórios das permutações (padrão 1), para resultados reproduzíveis."
              }
            }
          },
          "color_polygons": {
            "name": "Colorir polígonos",
            "description": "Atribui a cada polígono um pequeno índice inteiro de cor de modo que dois polígonos adjacentes nunca compartilhem um valor (como o ArcGIS Calculate Color Theorem Field) — estilização coroplética segura quanto à adjacência via coloração de grafos DSATUR sobre contiguidade por aresta compartilhada (ou canto compartilhado).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de polígonos de saída com o campo de cor adicionado. Se omitido, armazenado em memória."
              },
              "field": {
                "label": "Campo",
                "description": "Nome do campo de índice de cor a gravar (padrão 'color_id')."
              },
              "adjacency": {
                "label": "Adjacência",
                "description": "'edge' (rook, fronteira compartilhada; padrão) ou 'edge_or_corner' (queen, fronteira ou vértice compartilhado)."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Tamanho da grade à qual ajustar os vértices antes de fazer a correspondência dos limites (padrão 0 = exato)."
              }
            }
          },
          "combine": {
            "name": "Combinar",
            "description": "Atribui um ID de zona único a cada combinação única de valores entre dois ou mais rasters categóricos corregistrados, mais uma tabela de atributos de valores (ID, contagem, uma coluna por entrada).",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Lista separada por vírgula de >=2 rasters categóricos/inteiros corregistrados a combinar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída para a grade de identificadores de condições únicas. Se omitido, armazenado em memória."
              },
              "csv_output": {
                "label": "Saída CSV",
                "description": "Caminho opcional do CSV para a tabela de atributos de valores (valor, contagem, uma coluna por raster de entrada)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler de cada raster de entrada. Padrão 1."
              }
            }
          },
          "compare_spatial_weights": {
            "name": "Comparar pesos espaciais",
            "description": "Classifica conceitualizações candidatas de pesos espaciais (KNN, banda de distância fixa, contiguidade por arestas / arestas+cantos, Delaunay) pela intensidade com que cada uma captura o agrupamento espacial de um ou mais campos de análise, usando o I de Moran global padronizado por linha com seu escore z e valor-p bilateral — como o ArcGIS Compare Neighborhood Conceptualizations. Emite uma tabela de comparação classificada e o único melhor método.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (pontos/linhas/polígonos; a contiguidade exige polígonos)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho da tabela de comparação de saída — um CSV (extensão .csv) ou uma tabela vetorial sem geometria. Se omitido, armazenado em memória."
              },
              "input_fields": {
                "label": "Campos de entrada",
                "description": "Lista separada por vírgula dos nomes dos campos numéricos a analisar quanto ao agrupamento espacial."
              },
              "id_field": {
                "label": "Campo de ID",
                "description": "Campo que contém o identificador único de cada feição (aceito por compatibilidade; não é necessário para calcular o I de Moran)."
              },
              "methods": {
                "label": "Métodos",
                "description": "Conceitualizações candidatas separadas por vírgula entre: knn, fixed_distance_band, contiguity_edges, contiguity_edges_corners, delaunay. Padrão 'knn,contiguity_edges,contiguity_edges_corners'. Os métodos que não se aplicam à geometria (ou que geram erro) são ignorados."
              },
              "number_of_neighbors": {
                "label": "Número de vizinhos",
                "description": "Número de vizinhos mais próximos k para o método knn. Padrão 8."
              },
              "threshold_distance": {
                "label": "Distância limiar",
                "description": "Corte da banda de distância em unidades do mapa. Obrigatório apenas quando fixed_distance_band está entre os métodos."
              }
            }
          },
          "composite_bands": {
            "name": "Compor bandas",
            "description": "Empilha vários rasters de banda única em um raster multibanda, na ordem fornecida (ArcGIS Composite Bands). O create_colour_composite incluído é fixo em três bandas RGB, de modo que não havia como montar a entrada de N bandas que band_collection_statistics, principal_component_analysis, spectral_index e o conjunto OBIA exigem.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Caminhos dos rasters separados por vírgula ou ponto e vírgula, na ordem das bandas de saída. Pelo menos um."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) tomada de cada entrada quando a entrada é ela própria multibanda (padrão 1)."
              },
              "nodata_policy": {
                "label": "Política de nodata",
                "description": "'any' (padrão): uma célula é nodata se qualquer banda for nodata. 'all': apenas se todas forem."
              },
              "nodata": {
                "label": "Nodata",
                "description": "Valor nodata da saída (padrão: o nodata da primeira entrada)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster multibanda de saída. Se omitido, armazenado em memória."
              }
            }
          },
          "compute_accuracy_for_object_detection": {
            "name": "Calcular acurácia da detecção de objetos",
            "description": "Avalia feições detectadas contra a verdade de campo usando correspondência por IoU, relatando precisão, revocação, precisão média por classe e mAP geral, como o ArcGIS Compute Accuracy For Object Detection.",
            "params": {
              "detected": {
                "label": "Detectados",
                "description": "Feições detectadas (polígonos ou caixas delimitadoras)."
              },
              "ground_truth": {
                "label": "Verdade de campo",
                "description": "Feições de referência com as quais pontuar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional da tabela de acurácia de saída. Se omitido, armazenado em memória."
              },
              "detected_class_field": {
                "label": "Campo de classe detectada",
                "description": "Campo de rótulo de classe nas detecções. Omita para pontuar tudo como uma única classe."
              },
              "ground_truth_class_field": {
                "label": "Campo de classe da verdade de campo",
                "description": "Campo de rótulo de classe na verdade de campo. Omita para pontuar tudo como uma única classe."
              },
              "confidence_field": {
                "label": "Campo de confiança",
                "description": "Campo de escore de confiança nas detecções, usado para ordená-las na precisão média. Sem ele, as detecções são pontuadas na ordem de entrada."
              },
              "min_iou": {
                "label": "IoU mínimo",
                "description": "Interseção sobre união mínima para que uma detecção conte como correspondência (padrão 0.5)."
              }
            }
          },
          "compute_sar_indices": {
            "name": "Calcular índices SAR",
            "description": "Deriva índices SAR polarimétricos — RVI (Radar Vegetation Index), RFDI (Radar Forest Degradation Index), CSI (Canopy Structure Index) e DPSVI (Dual-Pol SAR Vegetation Index) — a partir do retroespalhamento multipolarização (ArcGIS Compute SAR Indices). spectral_index cobre apenas a matemática de bandas ópticas: suas fórmulas e convenções de bandas são do domínio da reflectância e ele não tem noção de canais de polarização, de modo que a cadeia SAR do catálogo (multilook, sar_coherence, filtros de speckle) atualmente não tem um ponto final de análise.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster SAR calibrado multipolarização (uma banda por polarização)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de índice de saída. Se omitido, armazenado em memória."
              },
              "index": {
                "label": "Índice",
                "description": "'rvi' (padrão), 'rfdi', 'csi' ou 'dpsvi'."
              },
              "polarization_bands": {
                "label": "Bandas de polarização",
                "description": "Mapeamento de bandas em base 1, por exemplo 'vv=1,vh=2' ou 'hh=1,hv=2,vv=3'. O padrão depende do número de bandas: 2 bandas = 'vv=1,vh=2', 3 ou mais bandas = 'hh=1,hv=2,vv=3'."
              },
              "input_units": {
                "label": "Unidades de entrada",
                "description": "'linear' (padrão) ou 'db'. A entrada em dB é convertida para potência linear antes da aritmética de razões, porque razões de decibéis não têm significado."
              }
            }
          },
          "construct_sight_lines": {
            "name": "Construir linhas de visada",
            "description": "Constrói feições de linhas de visada entre pontos observadores e feições alvo, com deslocamentos de altura do observador/alvo, amostragem ao longo de alvos lineares e areais, campos opcionais de azimute e ângulo vertical e distância 2D ou 3D. Como o ArcGIS Construct Sight Lines.",
            "params": {
              "observers": {
                "label": "Observadores",
                "description": "Feições pontuais de observação."
              },
              "targets": {
                "label": "Alvos",
                "description": "Feições alvo de ponto, linha ou polígono."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho das linhas de visada de saída. Se omitido, armazenado em memória."
              },
              "observer_height_field": {
                "label": "Campo de altura do observador",
                "description": "Campo opcional que fornece o deslocamento de altura de cada observador (somado ao seu Z)."
              },
              "target_height_field": {
                "label": "Campo de altura do alvo",
                "description": "Campo opcional que fornece o deslocamento de altura de cada alvo (somado ao seu Z)."
              },
              "join_field": {
                "label": "Campo de junção",
                "description": "Campo opcional presente em ambas as entradas; apenas os observadores e alvos que compartilham um valor são pareados. Sem ele, cada observador é pareado com cada alvo."
              },
              "sample_distance": {
                "label": "Distância de amostragem",
                "description": "Espaçamento em unidades do mapa para os pontos alvo gerados ao longo dos limites de linhas/polígonos (padrão: um ponto por vértice)."
              },
              "output_direction": {
                "label": "Direção de saída",
                "description": "Adicionar os campos AZIMUTH e VERT_ANGLE (padrão false)."
              },
              "distance_method": {
                "label": "Método de distância",
                "description": "'2d' (padrão) ou '3d' para o campo DISTANCE."
              }
            }
          },
          "contiguous_cartogram": {
            "name": "Cartograma contíguo",
            "description": "Cartograma de equalização de densidade (difusão de Gastner-Newman): distorce as áreas dos polígonos proporcionalmente a um atributo mantendo o mapa como uma folha conectada com fronteiras compartilhadas (ArcGIS Generate Contiguous Cartogram). A ferramenta cartogram disponível implementa apenas os métodos não contíguo e Dorling, ambos destruindo a adjacência, e a documentação de seu próprio módulo adia a forma contígua.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de polígonos contíguos."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Atributo numérico positivo a cujo total as áreas devem se tornar proporcionais."
              },
              "grid_size": {
                "label": "Tamanho da grade",
                "description": "Resolução da grade de densidade; deve ser uma potência de dois (padrão 256). O principal controle de acurácia/custo."
              },
              "iterations": {
                "label": "Iterações",
                "description": "Passos de difusão (padrão 20). Mais passos igualam mais a densidade ao custo de mais distorção."
              },
              "blur": {
                "label": "Desfoque",
                "description": "Pré-suavização gaussiana do campo de densidade, em células da grade (padrão 0.5). Evita a distorção extrema produzida por uma descontinuidade abrupta de densidade."
              },
              "sea_density": {
                "label": "Densidade do mar",
                "description": "Densidade fora da área de estudo: 'mean' (padrão) ou 'min'. Isso altera materialmente o resultado na borda do mapa."
              },
              "densify_spacing": {
                "label": "Espaçamento de densificação",
                "description": "Comprimento máximo do segmento de aresta em células da grade antes que vértices sejam inseridos (padrão 1.0). Caso contrário, as fronteiras retas longas se separam de suas vizinhas."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de polígonos de saída com os vértices deslocados e os atributos originais. Se omitido, armazenado em memória."
              }
            }
          },
          "contour_list": {
            "name": "Lista de curvas de nível",
            "description": "Gera curvas de nível em uma lista explícita de valores em vez de um intervalo fixo, como polilinhas encadeadas ou polígonos preenchidos, cada um rotulado com seu nível (ArcGIS Contour List). O contours_from_raster incluído aceita apenas 'interval' e 'base', de modo que as séries irregulares usadas em cartas reais — degraus de profundidade IHO, estágios de recorrência de cheias, quebras de classe publicadas — precisam de uma execução por valor e uma mesclagem, e ainda assim não podem sair como uma única camada rotulada por nível.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de superfície de entrada."
              },
              "contour_values": {
                "label": "Valores das curvas de nível",
                "description": "Lista separada por vírgula dos níveis a contornar, nas unidades z do próprio raster."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de contornos de saída. Se omitido, armazenado em memória."
              },
              "geometry_type": {
                "label": "Tipo de geometria",
                "description": "'polyline' (padrão) para linhas de contorno, ou 'polygon' para a região preenchida igual ou acima de cada nível."
              },
              "min_length": {
                "label": "Comprimento mínimo",
                "description": "Descartar as linhas de contorno mais curtas que isso, em unidades do mapa, o que remove os pontinhos produzidos por uma superfície ruidosa."
              },
              "close_rings": {
                "label": "Fechar anéis",
                "description": "Repetir o primeiro vértice nos contornos que se fecham sobre si mesmos (padrão true)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a contornar (padrão 1)."
              }
            }
          },
          "contour_with_barriers": {
            "name": "Curvas de nível com barreiras",
            "description": "Traça linhas de contorno de isovalor de uma superfície que terminam em feições de barreira em vez de cruzá-las.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de superfície contínua de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de linhas de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "barriers": {
                "label": "Barreiras",
                "description": "Camada vetorial de barreiras opcional (linhas ou polígonos). Os contornos não cruzarão estas feições."
              },
              "interval": {
                "label": "Intervalo",
                "description": "Intervalo entre contornos em unidades da superfície. Os níveis são base + k*intervalo dentro da faixa de dados. Ignorado se 'levels' for fornecido."
              },
              "base": {
                "label": "Base",
                "description": "Valor base a partir do qual o intervalo é medido (padrão 0)."
              },
              "levels": {
                "label": "Níveis",
                "description": "Valores de contorno explícitos separados por vírgula (por exemplo \"10,20,30\"). Substitui interval/base."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler (padrão 1)."
              }
            }
          },
          "convert_coordinate_notation": {
            "name": "Converter notação de coordenadas",
            "description": "Converte a coordenada de cada feição entre notações — graus decimais (DD), graus-minutos-segundos (DMS), graus-minutos decimais (DDM), UTM e MGRS/USNG — gravando um novo campo na notação de destino, como o ArcGIS Convert Coordinate Notation. Matemática pura de grade (transversa de Mercator de Krüger + letras MGRS em WGS84); sem PROJ.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos (ou tabela) de entrada."
              },
              "input_notation": {
                "label": "Notação de entrada",
                "description": "Notação da coordenada de entrada: DD, DMS, DDM, UTM ou MGRS."
              },
              "output_notation": {
                "label": "Notação de saída",
                "description": "Notação de destino a gravar: DD, DMS, DDM, UTM ou MGRS."
              },
              "coord_field": {
                "label": "Campo de coordenadas",
                "description": "Campo que contém a cadeia da coordenada de entrada. Se omitido, é usada a geometria do ponto (válido apenas quando input_notation=DD; geometria x=lon, y=lat)."
              },
              "output_field": {
                "label": "Campo de saída",
                "description": "Nome do campo a gravar. Padrão: a notação de saída em minúsculas (por exemplo 'utm')."
              },
              "precision": {
                "label": "Precisão",
                "description": "Dígitos MGRS por eixo (1=10 km … 5=1 m, até 9). Padrão 5. Ignorado pelas demais notações."
              },
              "update_geometry": {
                "label": "Atualizar geometria",
                "description": "Se verdadeiro, reconstrói a geometria de cada feição como um ponto lon/lat em EPSG:4326 a partir da coordenada interpretada. Padrão false (mantém a geometria/CRS de entrada)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              }
            }
          },
          "convert_sar_units": {
            "name": "Converter unidades SAR",
            "description": "Converte um raster SAR entre as representações de amplitude, intensidade, potência linear, decibéis, complexo-para-intensidade e fase desdobrada-para-deslocamento (ArcGIS Convert SAR Units). raster_calculator pode avaliar a aritmética, mas não carrega nenhuma das semânticas ou salvaguardas — retorna -inf para células de valor zero em uma conversão logarítmica, e nada no catálogo registra em qual unidade um raster SAR está, de modo que filtros de speckle e índices de razão são rotineiramente aplicados à representação errada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster SAR de entrada. Para 'complex_to_intensity' este é um raster I/Q de duas bandas (a convenção de multilook / sar_coherence)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída. Se omitido, armazenado em memória."
              },
              "conversion": {
                "label": "Conversão",
                "description": "'linear_to_db', 'db_to_linear', 'amplitude_to_intensity', 'intensity_to_amplitude', 'complex_to_intensity' ou 'phase_to_displacement'."
              },
              "wavelength": {
                "label": "Comprimento de onda",
                "description": "Comprimento de onda do radar em metros para 'phase_to_displacement' (padrão 0.05546576, banda C do Sentinel-1)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler (padrão 1). Ignorado para 'complex_to_intensity', que sempre lê as bandas 1 e 2 como I e Q."
              }
            }
          },
          "coregister_rasters": {
            "name": "Corregistrar rasters",
            "description": "Alinha automaticamente um raster secundário a uma referência por correlação cruzada normalizada de uma grade de ladrilhos, refinamento de pico subpixel, ajuste de transformação por mínimos quadrados com aparamento de outliers e reamostragem (ArcGIS Apply Coregistration). Esta é a pré-condição que faltava para toda a cadeia InSAR do catálogo: sar_coherence, flatten_interferogram e goldstein_phase_filter exigem entrada corregistrada e nada a produzia. georeference_raster_from_control_points precisa de pontos de controle escolhidos manualmente, image_correlation apenas pontua a similaridade e warp_raster precisa de uma transformação fornecida.",
            "params": {
              "reference": {
                "label": "Referência",
                "description": "Raster de referência. A saída é gravada na grade deste raster."
              },
              "secondary": {
                "label": "Secundário",
                "description": "Raster a alinhar à referência. Todas as suas bandas são reamostradas."
              },
              "output": {
                "label": "Saída",
                "description": "Raster secundário reamostrado de saída na grade de referência. Se omitido, armazenado em memória."
              },
              "tie_points": {
                "label": "Pontos de amarração",
                "description": "Camada de pontos de saída com os pontos de amarração aceitos, seu deslocamento medido e sua correlação. Sempre produzida; armazenada em memória quando nenhum caminho é fornecido."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) usada na correspondência (padrão 1). Uma entrada de duas bandas é correspondida por sua magnitude complexa, a menos que este valor seja fornecido."
              },
              "transform": {
                "label": "Transformação",
                "description": "'translation', 'affine' (padrão) ou 'polynomial2'."
              },
              "tile_size": {
                "label": "Tamanho do ladrilho",
                "description": "Lado de cada ladrilho de correspondência em células (padrão 32)."
              },
              "grid_size": {
                "label": "Tamanho da grade",
                "description": "Número de ladrilhos por eixo (padrão 8, portanto 64 ladrilhos)."
              },
              "max_shift": {
                "label": "Deslocamento máximo",
                "description": "Semilargura da janela de busca inteira em células (padrão 8)."
              },
              "min_correlation": {
                "label": "Correlação mínima",
                "description": "Rejeitar os pontos de amarração cuja correlação normalizada de pico esteja abaixo deste valor (padrão 0.3)."
              },
              "outlier_sigma": {
                "label": "Sigma de outliers",
                "description": "Aparar os pontos de amarração cujo resíduo de ajuste exceda este número de desvios padrão (padrão 3.0). Defina como 0 para desativar o aparamento."
              },
              "resample": {
                "label": "Reamostrar",
                "description": "'bilinear' (padrão) ou 'nearest'."
              }
            }
          },
          "corridor": {
            "name": "Corredor",
            "description": "Corredor de menor custo entre duas superfícies de custo acumulado (ArcGIS Corridor): soma dois rasters de distância de custo em uma superfície de corredor cujo mínimo é o caminho de menor custo, depois opcionalmente aplica um limiar para a faixa quase ótima. Modo direto (dois rasters de custo) ou modo de conveniência (um raster de atrito + dois rasters de origem).",
            "params": {
              "cost1": {
                "label": "Custo 1",
                "description": "Primeiro raster de custo acumulado (a partir da fonte A). Modo direto."
              },
              "cost2": {
                "label": "Custo 2",
                "description": "Segundo raster de custo acumulado (a partir da fonte B). Modo direto."
              },
              "cost": {
                "label": "Custo",
                "description": "Raster de atrito/custo de passagem. Modo de conveniência (com source1/source2)."
              },
              "source1": {
                "label": "Fonte 1",
                "description": "Primeiro raster de fontes (as células positivas são fontes). Modo de conveniência."
              },
              "source2": {
                "label": "Fonte 2",
                "description": "Segundo raster de fontes (as células positivas são fontes). Modo de conveniência."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de corredor de saída. Se omitido, armazenado em memória."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Manter apenas as células cujo custo de corredor seja igual ou inferior a este valor absoluto (as demais são mascaradas como nodata)."
              },
              "percent": {
                "label": "Percentual",
                "description": "Manter apenas as células dentro desta porcentagem acima do custo mínimo de corredor (por exemplo, 5 = dentro de 5%). Ignorado se 'threshold' estiver definido."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler do(s) raster(es) de entrada. Padrão 1."
              }
            }
          },
          "cost_back_link": {
            "name": "Vínculo reverso de custo",
            "description": "Emite o raster de direção de vizinho 0-8 que codifica, para cada célula, o próximo passo ao longo da rota de menor custo de volta à origem mais próxima, mais a superfície de custo acumulado (ArcGIS Cost Back Link e Path Back Link). cost_distance, cost_pathway e cost_allocation calculam isso internamente e o descartam, de modo que retraçar N destinos atualmente custa N soluções completas de custo em vez de uma passagem de acumulação mais N caminhadas baratas.",
            "params": {
              "source": {
                "label": "Origem",
                "description": "Células de origem: um raster (qualquer célula diferente de zero e não nodata é uma origem) ou uma camada vetorial de pontos/multipontos."
              },
              "cost": {
                "label": "Custo",
                "description": "Raster de custo por unidade de distância. Opcional quando 'surface' é fornecido (nesse caso, o custo assume 1 em toda parte, resultando em pura distância de superfície)."
              },
              "surface": {
                "label": "Superfície",
                "description": "Raster de elevação opcional que habilita a variante Path Back Link: o espaçamento horizontal é substituído pela distância de superfície real sqrt(dxy^2 + dz^2)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de retroligação de saída (0 = origem, 1-8 = direção em direção à origem, 1 = leste, no sentido anti-horário). Se omitido, armazenado em memória."
              },
              "out_distance": {
                "label": "Distância de saída",
                "description": "Raster de custo acumulado. Sempre produzido; recorre a um identificador em memória quando nenhum caminho é fornecido."
              },
              "max_distance": {
                "label": "Distância máxima",
                "description": "Corte de acumulação opcional: as células com custo superior a este valor permanecem inalcançáveis."
              }
            }
          },
          "cost_connectivity": {
            "name": "Conectividade de custo",
            "description": "Rede de menor custo conectando vários locais sobre uma superfície de custo (como o ArcGIS Cost Connectivity / Optimal Region Connections): alocação de Dijkstra multiorigem, caminhos de menor custo par a par entre regiões adjacentes e sua árvore geradora mínima — a rede de menor custo que os cost_distance e path_distance incluídos, de origem única, não conseguem construir.",
            "params": {
              "sources": {
                "label": "Fontes",
                "description": "Camada de pontos com os locais/regiões a conectar."
              },
              "cost": {
                "label": "Custo",
                "description": "Raster de custo/atrito (custo de travessia por célula; as células nodata são barreiras)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de polilinhas de saída com os caminhos de menor custo. Se omitido, armazenado em memória."
              },
              "connections": {
                "label": "Conexões",
                "description": "'mst' (árvore geradora mínima que conecta todos os locais; padrão) ou 'all_neighbors' (todos os caminhos entre regiões adjacentes)."
              },
              "id_field": {
                "label": "Campo de ID",
                "description": "Campo opcional para rotular as origens (padrão: o índice em base 1)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) do raster de custo (padrão 1)."
              }
            }
          },
          "count_overlapping_features": {
            "name": "Contar feições sobrepostas",
            "description": "Achata polígonos sobrepostos em regiões disjuntas, cada uma com o número (e opcionalmente os IDs) das feições de entrada que a cobrem, como o ArcGIS Count Overlapping Features.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada (as feições podem se sobrepor)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída (driver a partir da extensão) com um campo 'count'. Se omitido, armazenado em memória."
              },
              "min_count": {
                "label": "Contagem mínima",
                "description": "Manter apenas as regiões cobertas por pelo menos este número de feições (padrão 1; use 2 apenas para sobreposições)."
              },
              "id_field": {
                "label": "Campo de ID",
                "description": "Campo opcional que identifica cada feição de entrada (usado na coluna de identificadores / no relatório). Padrão: o índice da feição."
              },
              "report_ids": {
                "label": "Relatar IDs",
                "description": "Caminho opcional do CSV para uma tabela de junção region_id,feature_id (uma linha por feição de cobertura)."
              }
            }
          },
          "create_accuracy_assessment_points": {
            "name": "Criar pontos de avaliação de acurácia",
            "description": "Gera pontos de referência distribuídos aleatoriamente, estratificados pelas classes de um raster classificado ou de uma camada de polígonos, pré-preenchidos com a classe do mapa e prontos para rotulagem de verdade de campo (ArcGIS Create Accuracy Assessment Points). classification_accuracy_assessment consome esses pontos, mas nada os produzia, e create_spatial_sampling_locations estratifica por feição ou campo de polígono em vez de por classe raster e não tem alocação equalizada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster classificado, ou uma camada de polígonos classificada com 'class_field'."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Atributo de classe, obrigatório quando 'input' é uma camada vetorial. Ignorado para entrada raster, que usa o valor da célula."
              },
              "num_points": {
                "label": "Número de pontos",
                "description": "Número total de pontos de referência (padrão 500)."
              },
              "sampling_strategy": {
                "label": "Estratégia de amostragem",
                "description": "Um entre 'stratified_random' (padrão, aloca proporcionalmente à área da classe), 'equalized_stratified' (contagem igual por classe) ou 'random' (ignora a classe)."
              },
              "min_points_per_class": {
                "label": "Mínimo de pontos por classe",
                "description": "Piso aplicado sob 'stratified_random' para que as classes raras não sejam descartadas (padrão 1)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) de uma entrada raster (padrão 1)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente para o gerador de números aleatórios determinístico (padrão 1)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de pontos de saída com CLASSVALUE (classe do mapa), GrndTruth (-1 até ser coletada) e Stratum. Se omitido, armazenado em memória."
              }
            }
          },
          "create_cartographic_partitions": {
            "name": "Criar partições cartográficas",
            "description": "Produz polígonos de partição adaptativos e não sobrepostos, cada um contendo aproximadamente uma contagem alvo de feições (mais densos onde os dados se agrupam), para que grandes tarefas de generalização / mascaramento possam ser ladrilhadas com segurança de cobertura — uma contraparte em Rust puro do ArcGIS Create Cartographic Partitions.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (qualquer geometria). Cada feição é reduzida a um ponto representativo e atribuída a uma partição."
              },
              "feature_count": {
                "label": "Número de feições",
                "description": "Número máximo desejado de feições por partição. Uma célula é dividida enquanto ainda contiver mais feições que este número. Padrão 1000."
              },
              "output": {
                "label": "Saída",
                "description": "Vetor de polígonos de saída com as partições (driver a partir da extensão). Se omitido, armazenado em memória."
              }
            }
          },
          "create_overpass": {
            "name": "Criar viaduto",
            "description": "Constrói polígonos de máscara de recorte (e linhas opcionais de decoração com marcas em asa) onde uma linha \"acima\" cruza uma linha \"abaixo\", de modo que a linha inferior seja mascarada no cruzamento.",
            "params": {
              "above": {
                "label": "Acima",
                "description": "Vetor de linhas com as feições que passam POR CIMA do cruzamento (a máscara é orientada ao longo delas). Formato detectado automaticamente, ou identificador em memória."
              },
              "below": {
                "label": "Abaixo",
                "description": "Vetor de linhas com as feições mascaradas POR BAIXO do cruzamento (as linhas a serem interrompidas). Formato detectado automaticamente, ou identificador em memória."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para os polígonos de máscara (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "output_decoration": {
                "label": "Decoração de saída",
                "description": "Caminho opcional de saída para as linhas de decoração em asa. Se omitido, armazenado em memória (ainda assim é retornado como 'output_decoration')."
              },
              "margin_along": {
                "label": "Margem longitudinal",
                "description": "Semicomprimento de cada máscara ao longo da linha superior, em unidades do CRS (o comprimento da máscara é o dobro deste valor). Padrão 1.0."
              },
              "margin_across": {
                "label": "Margem transversal",
                "description": "Semilargura de cada máscara transversalmente à linha superior, em unidades do CRS (a largura da máscara é o dobro deste valor). Padrão 1.0."
              },
              "wing_type": {
                "label": "Tipo de asa",
                "description": "Estilo de decoração: 'none', 'perpendicular' (padrão; um traço transversal em cada extremidade da máscara) ou 'parallel' (linhas de contorno ao longo de cada lado)."
              }
            }
          },
          "create_routes": {
            "name": "Criar rotas",
            "description": "Dissolve feições lineares por um campo identificador de rota, ordena seus segmentos em uma única polilinha por rota e atribui medidas lineares (valores M) a partir do comprimento geométrico ou de campos de medida inicial/final.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de linhas de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "route_id_field": {
                "label": "Campo de ID da rota",
                "description": "Atributo que identifica cada rota; as linhas de entrada são agrupadas por ele, gerando uma rota de saída por valor distinto."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de rotas de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "measure_source": {
                "label": "Fonte da medida",
                "description": "Como as medidas são atribuídas: LENGTH (0..comprimento geométrico), ONE_FIELD (início a partir de um campo, fim = início + comprimento) ou TWO_FIELDS (início/fim a partir de campos, interpolados). Padrão LENGTH."
              },
              "from_measure_field": {
                "label": "Campo de medida inicial",
                "description": "Campo numérico que fornece a medida inicial de cada rota (usado por ONE_FIELD e TWO_FIELDS). Lido do primeiro segmento da rota."
              },
              "to_measure_field": {
                "label": "Campo de medida final",
                "description": "Campo numérico que fornece a medida final de cada rota (usado por TWO_FIELDS). Lido do primeiro segmento da rota."
              },
              "measure_factor": {
                "label": "Fator da medida",
                "description": "Multiplicador aplicado à medida natural (baseada no comprimento), por exemplo 0.001 para converter metros em quilômetros. Padrão 1.0."
              },
              "measure_offset": {
                "label": "Deslocamento da medida",
                "description": "Valor somado a cada medida ao longo da rota (desloca todos os valores m da rota). Padrão 0.0."
              },
              "ignore_gaps": {
                "label": "Ignorar lacunas",
                "description": "Para LENGTH/ONE_FIELD, excluir da medida acumulada os saltos retos entre segmentos disjuntos, de modo que as lacunas não inflacionem as distâncias. Padrão false."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "As extremidades situadas a esta distância (unidades do CRS) são tratadas como coincidentes ao costurar os segmentos. Padrão 1e-6."
              }
            }
          },
          "create_spatial_sampling_locations": {
            "name": "Criar locais de amostragem espacial",
            "description": "Gera pontos de amostragem sobre uma área de estudo poligonal por desenho aleatório simples, estratificado, sistemático (quadrado/hexágono/triângulo) ou por conglomerados, com aleatoriedade reprodutível por semente.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de polígonos da área de estudo (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de pontos de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "'simple_random' (padrão), 'stratified', 'systematic' ou 'cluster'."
              },
              "num_samples": {
                "label": "Número de amostras",
                "description": "Número total de pontos de amostra para simple_random, stratified e cluster. Padrão 100."
              },
              "strata_field": {
                "label": "Campo de estratos",
                "description": "Para stratified: agrupa as feições de entrada em estratos por este atributo. Se omitido, cada feição de entrada é seu próprio estrato."
              },
              "allocation": {
                "label": "Alocação",
                "description": "Para stratified: 'proportional' à área do estrato (padrão), 'equal' por estrato ou 'population_field' proporcional ao total de um campo."
              },
              "population_field": {
                "label": "Campo de população",
                "description": "Para allocation=population_field: o campo numérico cujo total por estrato orienta a alocação."
              },
              "bin_shape": {
                "label": "Forma da célula",
                "description": "Para systematic: malha 'square' (padrão), 'hexagon' ou 'triangle'."
              },
              "bin_size": {
                "label": "Tamanho da célula",
                "description": "Espaçamento (unidades do CRS) para as malhas sistemáticas e os grupos de conglomerados. Obrigatório para esses métodos."
              },
              "num_clusters": {
                "label": "Número de agrupamentos",
                "description": "Para cluster: quantos grupos selecionar aleatoriamente. Padrão 10."
              },
              "min_distance": {
                "label": "Distância mínima",
                "description": "Espaçamento mínimo entre os pontos de simple_random / stratified / cluster (unidades do CRS). Padrão 0 (sem restrição)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente para o gerador de números aleatórios determinístico (padrão 1)."
              }
            }
          },
          "create_spatially_balanced_points": {
            "name": "Criar pontos espacialmente equilibrados",
            "description": "Gera pontos de amostragem espacialmente bem distribuídos (quase-aleatórios de Halton) dentro de um polígono de restrição, opcionalmente ponderados por um raster de probabilidade de inclusão, cada um marcado com uma ordem de amostra balanceada, como o ArcGIS Create Spatially Balanced Points.",
            "params": {
              "constraint": {
                "label": "Restrição",
                "description": "Camada de polígonos de restrição; os pontos são gerados dentro destes polígonos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "num_points": {
                "label": "Número de pontos",
                "description": "Número de pontos de amostra a gerar."
              },
              "probability": {
                "label": "Probabilidade",
                "description": "Raster de probabilidade de inclusão opcional; as células de valores maiores têm mais chance de ser amostradas (normalizado pelo seu máximo)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente aleatória para uma amostragem reproduzível (padrão 1)."
              }
            }
          },
          "create_underpass": {
            "name": "Criar passagem inferior",
            "description": "Em cruzamentos de linhas, constrói polígonos de máscara orientados ao longo da feição superior e corta uma lacuna correspondente na feição inferior para que ela pareça passar por baixo (ArcGIS Create Underpass). Irmão do create_overpass disponível, que mascara a linha inferior para que a superior pareça contínua; uma passagem inferior, por sua vez, precisa da quebra decorativa, que é o que distingue o portal de um túnel de uma ponte. Emite tanto as máscaras quanto as linhas inferiores aparadas.",
            "params": {
              "above": {
                "label": "Acima",
                "description": "Vetor de linhas com as feições que passam POR CIMA do cruzamento (as máscaras são orientadas ao longo delas). Formato detectado automaticamente, ou identificador em memória."
              },
              "below": {
                "label": "Abaixo",
                "description": "Vetor de linhas com as feições que passam POR BAIXO do cruzamento (as linhas que recebem a lacuna). Formato detectado automaticamente, ou identificador em memória."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para os polígonos de máscara da passagem inferior. Se omitido, armazenado em memória."
              },
              "output_lines": {
                "label": "Saída de linhas",
                "description": "Caminho opcional de saída para a camada inferior com as lacunas da passagem inferior recortadas. Se omitido, armazenado em memória (ainda assim é retornado como 'output_lines')."
              },
              "margin_along": {
                "label": "Margem longitudinal",
                "description": "Semicomprimento de cada máscara medido AO LONGO da linha superior, em unidades do CRS; a máscara se estende pelo dobro deste valor nessa direção. Padrão 1.0."
              },
              "margin_across": {
                "label": "Margem transversal",
                "description": "Semilargura de cada máscara TRANSVERSALMENTE à linha superior, em unidades do CRS. Para um cruzamento perpendicular, é isso que delimita a lacuna recortada na linha inferior, portanto o comprimento removido é o dobro deste valor. Padrão 1.0."
              },
              "min_angle": {
                "label": "Ângulo mínimo",
                "description": "Ignorar os cruzamentos em que as duas linhas se encontram com um ângulo menor que este, em graus, já que uma máscara quase paralela é instável. Padrão 15."
              }
            }
          },
          "cul_de_sac_masks": {
            "name": "Máscaras de ruas sem saída",
            "description": "Gera polígonos de máscara de recorte sensíveis à escala nos bulbos de ruas sem saída em uma rede viária, como o ArcGIS Cul-De-Sac Masks.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de eixos de estradas."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional dos polígonos de máscara de saída. Se omitido, armazenado em memória."
              },
              "reference_scale": {
                "label": "Escala de referência",
                "description": "Denominador da escala do mapa para a qual a máscara é dimensionada (por exemplo, 24000 para 1:24.000)."
              },
              "symbol_width": {
                "label": "Largura do símbolo",
                "description": "Largura do contorno da estrada em unidades de página (ver 'page_unit') na escala de referência."
              },
              "margin": {
                "label": "Margem",
                "description": "Margem adicional ao redor do símbolo, em unidades de página (padrão 0)."
              },
              "page_unit": {
                "label": "Unidade da página",
                "description": "Unidade de 'symbol_width' e 'margin': points (padrão, 1/72 de polegada), mm ou inches."
              },
              "map_units_per_meter": {
                "label": "Unidades de mapa por metro",
                "description": "Unidades do CRS por metro (padrão 1, correto para CRSs projetados baseados em metros). Para uma camada em graus, use cerca de 0.000008983."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Tolerância de ajuste de coordenadas para unir as extremidades das linhas em nós da rede (padrão 0.001 unidades do mapa)."
              },
              "attributes": {
                "label": "Atributos",
                "description": "ids_only (padrão) | all — se os atributos da feição de origem devem ser transferidos para a máscara."
              }
            }
          },
          "cut_fill": {
            "name": "Corte e aterro",
            "description": "Mudança volumétrica entre duas superfícies DEM (antes/depois) ou entre uma superfície e um plano de referência: raster de mudança de elevação com sinal mais volumes de corte, aterro e líquido, com rotulagem opcional de volume por região.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster 'antes' (ou a única superfície no modo de plano)."
              },
              "after": {
                "label": "Depois",
                "description": "Raster 'depois' (modo de duas superfícies). Deve compartilhar a grade de 'input'. Forneça este ou 'plane'."
              },
              "plane": {
                "label": "Plano",
                "description": "Elevação do plano de referência (modo superfície-volume): a mudança é medida como a entrada menos este valor. Forneça este ou 'after'."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída para a mudança de elevação com sinal (Δz). Se omitido, armazenado em memória."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler do(s) raster(es) de entrada. Padrão 1."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "As células com |Δz| igual ou inferior a este valor (unidades z do CRS) contam como inalteradas. Padrão 0."
              },
              "region_output": {
                "label": "Saída de regiões",
                "description": "Caminho opcional do raster com os rótulos de regiões contíguas de corte/aterro (identificadores de região >= 1; as células inalteradas ficam nodata)."
              },
              "csv_output": {
                "label": "Saída CSV",
                "description": "Caminho opcional do CSV para a tabela de volumes por região (region_id, type, cell_count, volume)."
              }
            }
          },
          "darcy_flow": {
            "name": "Fluxo de Darcy",
            "description": "Campo de velocidade de Darcy de água subterrânea em regime permanente a partir de rasters de carga hidráulica, transmissividade e porosidade — um raster de magnitude de fluxo (velocidade de Darcy) e um raster de direção de fluxo a jusante do gradiente (v = -(T/n)·∇carga), com rastreamento advectivo opcional de partículas (RK2) a partir de pontos semente em polilinhas de linhas de fluxo — como o ArcGIS Darcy Flow / Particle Track.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de carga hidráulica subterrânea (elevação do lençol freático). O tamanho da célula é obtido deste raster."
              },
              "transmissivity": {
                "label": "Transmissividade",
                "description": "Raster de transmissividade (corregistrado ao raster de carga hidráulica)."
              },
              "porosity": {
                "label": "Porosidade",
                "description": "Raster de porosidade efetiva (corregistrado ao raster de carga hidráulica; os valores devem ser > 0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de magnitude da velocidade de Darcy de saída. Se omitido, armazenado em memória."
              },
              "direction": {
                "label": "Direção",
                "description": "Caminho opcional do raster de direção de fluxo de saída (azimute em graus, a partir do norte no sentido horário, no sentido do gradiente descendente). Se omitido, armazenado em memória."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler de cada raster de entrada (padrão 1)."
              },
              "seeds": {
                "label": "Sementes",
                "description": "Vetor de pontos opcional com as sementes de partículas. Quando fornecido, as linhas de fluxo são traçadas a partir de cada semente."
              },
              "streamlines": {
                "label": "Linhas de fluxo",
                "description": "Caminho opcional do vetor de linhas de saída para as linhas de fluxo de partículas traçadas (requer 'seeds')."
              },
              "step": {
                "label": "Passo",
                "description": "Comprimento do passo de rastreamento de partículas em unidades do CRS (padrão: o tamanho da célula do raster de carga hidráulica)."
              },
              "max_steps": {
                "label": "Máximo de passos",
                "description": "Máximo de passos de integração por partícula (padrão 1000)."
              }
            }
          },
          "delineate_built_up_areas": {
            "name": "Delimitar áreas urbanizadas",
            "description": "Generaliza contornos densos de edificações em polígonos suaves de assentamento / extensão urbana agrupando edificações próximas (fechamento morfológico), com filtros de contagem mínima de edificações e de área.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de polígonos de contornos de edificações de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "grouping_distance": {
                "label": "Distância de agrupamento",
                "description": "As edificações cujos contornos estejam a esta distância (unidades do CRS) são agrupadas em uma única área urbanizada. Define o raio do fechamento morfológico como metade deste valor."
              },
              "min_building_count": {
                "label": "Número mínimo de edificações",
                "description": "Descartar as áreas urbanizadas que contenham menos edificações que este número (padrão 1 — mantém todos os grupos)."
              },
              "min_area": {
                "label": "Área mínima",
                "description": "Descartar as áreas urbanizadas cuja área (unidades do CRS ao quadrado) esteja abaixo deste valor e preencher os buracos interiores menores que ele. Padrão: manter todas."
              },
              "simplify_tolerance": {
                "label": "Tolerância de simplificação",
                "description": "Tolerância de Douglas–Peucker (unidades do CRS) aplicada ao limite da área urbanizada para reduzir os vértices densos do buffer arredondado. Padrão 0 (sem simplificação)."
              }
            }
          },
          "delineate_depressions": {
            "name": "Delimitar depressões",
            "description": "Delineia depressões aninhadas a partir de um raster de sumidouros usando o método de conjuntos de nível (lidar slicing.py).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de depressões de entrada (por exemplo, a saída de extract_sinks)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de identificadores de depressões. Se omitido, armazenado em memória."
              },
              "level_output": {
                "label": "Saída de níveis",
                "description": "Caminho opcional de saída para o raster de níveis de depressão."
              },
              "csv_output": {
                "label": "Saída CSV",
                "description": "Caminho opcional de saída para o CSV de atributos das depressões."
              },
              "vector_output": {
                "label": "Saída vetorial",
                "description": "Caminho opcional de saída para os polígonos das depressões em GeoJSON (com os atributos unidos)."
              },
              "min_size": {
                "label": "Tamanho mínimo",
                "description": "Número mínimo de pixels para uma depressão (padrão 10)."
              },
              "min_depth": {
                "label": "Profundidade mínima",
                "description": "Profundidade mínima da depressão (aceita por compatibilidade; não utilizada, correspondendo ao lidar)."
              },
              "interval": {
                "label": "Intervalo",
                "description": "Intervalo de fatiamento do método de conjuntos de nível (padrão 0.3)."
              }
            }
          },
          "delineate_mounts": {
            "name": "Delimitar elevações",
            "description": "Delineia a hierarquia aninhada de feições elevadas (montes) em um DEM (lidar mounts.py).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo do raster do DEM de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de identificadores de elevações. Se omitido, armazenado em memória."
              },
              "level_output": {
                "label": "Saída de níveis",
                "description": "Caminho opcional de saída para o raster de níveis das elevações."
              },
              "csv_output": {
                "label": "Saída CSV",
                "description": "Caminho opcional de saída para o CSV de atributos das elevações."
              },
              "vector_output": {
                "label": "Saída vetorial",
                "description": "Caminho opcional de saída para os polígonos das elevações em GeoJSON (com os atributos unidos)."
              },
              "min_size": {
                "label": "Tamanho mínimo",
                "description": "Número mínimo de pixels para uma elevação (padrão 10)."
              },
              "min_height": {
                "label": "Altura mínima",
                "description": "Altura mínima da elevação (aceita por compatibilidade; não utilizada, correspondendo ao lidar)."
              },
              "interval": {
                "label": "Intervalo",
                "description": "Intervalo de fatiamento do método de conjuntos de nível (padrão 0.3)."
              },
              "delta": {
                "label": "Delta",
                "description": "Valor base somado ao inverter o DEM (padrão 100)."
              }
            }
          },
          "dem_filter": {
            "name": "Filtro de MDE",
            "description": "Suaviza um DEM com um filtro de média, mediana ou gaussiano (lidar filtering.py).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo do raster do DEM de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é armazenado em memória."
              },
              "filter": {
                "label": "Filtro",
                "description": "Tipo de filtro: 'mean', 'median' ou 'gaussian' (padrão 'mean')."
              },
              "kernel_size": {
                "label": "Tamanho do kernel",
                "description": "Tamanho da janela em pixels para os filtros de média/mediana (padrão 3)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Desvio padrão do filtro gaussiano (padrão 1.0)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a filtrar (padrão 1)."
              }
            }
          },
          "dendrogram": {
            "name": "Dendrograma",
            "description": "Constrói uma árvore hierárquica de mesclagem sobre as assinaturas das classes para mostrar quão separáveis elas são, como o ArcGIS Dendrogram.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de feições agrupadas que carrega um campo de classe e os campos numéricos que definem o espaço de feições."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Campo que contém o identificador de classe / agrupamento."
              },
              "fields": {
                "label": "Campos",
                "description": "Campos numéricos separados por vírgula que definem o espaço de feições."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional da tabela de mesclagem de saída. Se omitido, armazenado em memória."
              },
              "distance": {
                "label": "Distância",
                "description": "Distância entre assinaturas: 'variance' (padrão; normalizada pela dispersão dentro da classe) ou 'mean_only'."
              },
              "standardize": {
                "label": "Padronizar",
                "description": "Padronizar cada campo em escores z antes de calcular as distâncias, para que os campos de grande amplitude não dominem (padrão true)."
              },
              "output_text": {
                "label": "Saída de texto",
                "description": "Caminho opcional para uma representação em texto simples e indentada da árvore."
              }
            }
          },
          "densify_sampling_network": {
            "name": "Densificar a rede de amostragem",
            "description": "Propõe novas localizações de amostragem nas células de maior superfície de erro padrão de predição por krigagem, respeitando uma distância de inibição de espaçamento mínimo, como o ArcGIS Densify Sampling Network.",
            "params": {
              "prediction_error": {
                "label": "Erro de predição",
                "description": "Raster de erro padrão da predição de entrada (por exemplo, uma superfície de variância/erro de krigagem). As novas amostras visam suas células de maior erro."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "count": {
                "label": "Contagem",
                "description": "Número de novos locais de amostragem a propor."
              },
              "inhibition_distance": {
                "label": "Distância de inibição",
                "description": "Espaçamento mínimo entre as amostras propostas em unidades do mapa (padrão 0 = sem inibição; apenas as células de maior erro)."
              },
              "mask": {
                "label": "Máscara",
                "description": "Camada de polígonos opcional; apenas as células cujo centro caia dentro dela são candidatas elegíveis."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) do raster de erro da predição a ler (padrão 1)."
              }
            }
          },
          "detect_bright_ocean_objects": {
            "name": "Detectar objetos brilhantes no oceano",
            "description": "Encontra embarcações e outros alvos pontuais brilhantes sobre a água em imagens SAR com um detector CFAR de dois parâmetros e os emite como caixas delimitadoras orientadas com comprimento, largura, rumo e retroespalhamento de pico (ArcGIS Detect Bright Ocean Objects). Nenhum dos registros tem um detector de clutter local: um limiar global não funciona porque o clutter do mar fica mais brilhante com o vento e o ângulo de incidência, matched_filter_target_detection é um detector óptico espectral e detect_image_anomalies usa um modelo global em vez de uma janela deslizante.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de retroespalhamento SAR."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de polígonos de saída com os objetos detectados. Se omitido, armazenado em memória."
              },
              "geometry_type": {
                "label": "Tipo de geometria",
                "description": "'bounding_box' (padrão) para o retângulo mínimo orientado, ou 'perimeter' para o contorno traçado da detecção."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Limiar de detecção CFAR em desvios padrão do fundo (padrão 5.0)."
              },
              "guard_size": {
                "label": "Tamanho da guarda",
                "description": "Semilargura, em células, da banda de guarda excluída da estimativa do fundo (padrão 3). Deve ser menor que background_size."
              },
              "background_size": {
                "label": "Tamanho do fundo",
                "description": "Semilargura, em células, do anel de fundo (padrão 12)."
              },
              "mask_features": {
                "label": "Feições de máscara",
                "description": "Camada de polígonos que mascara terra ou água. As células excluídas pela máscara não são testadas nem usadas como fundo."
              },
              "mask_type": {
                "label": "Tipo de máscara",
                "description": "'land_polygon' (padrão; analisa fora dos polígonos) ou 'water_polygon' (analisa dentro deles)."
              },
              "min_object_length": {
                "label": "Comprimento mínimo do objeto",
                "description": "Descartar os objetos mais curtos que isso, em unidades do mapa."
              },
              "max_object_length": {
                "label": "Comprimento máximo do objeto",
                "description": "Descartar os objetos mais longos que isso, em unidades do mapa."
              },
              "min_object_width": {
                "label": "Largura mínima do objeto",
                "description": "Descartar os objetos mais estreitos que isso, em unidades do mapa."
              },
              "max_object_width": {
                "label": "Largura máxima do objeto",
                "description": "Descartar os objetos mais largos que isso, em unidades do mapa."
              },
              "min_cells": {
                "label": "Mínimo de células",
                "description": "Descartar as detecções menores que este número de células (padrão 2), o que suprime os picos isolados de ruído."
              },
              "input_units": {
                "label": "Unidades de entrada",
                "description": "'intensity' (padrão), 'dn', 'amplitude' ou 'db'. A detecção é executada sobre a potência linear, onde as estatísticas de clutter têm significado."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a pesquisar (padrão 1)."
              }
            }
          },
          "detect_dark_ocean_areas": {
            "name": "Detectar áreas escuras do oceano",
            "description": "Encontra manchas anomalamente escuras sobre a água em imagens SAR — manchas de óleo, exsudações naturais, películas de algas, zonas de vento fraco — como regiões situadas um número definido de desvios padrão abaixo do fundo marinho local, relatadas com seu contraste em dB (ArcGIS Detect Dark Ocean Areas). O complemento de detect_bright_ocean_objects, e distinto de extract_water_sar: uma cena inteiramente de água é unimodal, de modo que uma divisão de Otsu simplesmente bisseccionaria o clutter do mar e relataria metade do oceano como mancha.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de retroespalhamento SAR sobre a água."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de polígonos de saída com as áreas escuras. Se omitido, armazenado em memória."
              },
              "output_raster": {
                "label": "Raster de saída",
                "description": "Máscara binária de saída (1 escuro, 0 fundo). Sempre produzida; armazenada em memória quando nenhum caminho é fornecido."
              },
              "method": {
                "label": "Método",
                "description": "'statistical' (padrão; um número definido de desvios padrão abaixo da média do fundo), 'otsu' ou 'fixed'."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Para 'statistical', quantos desvios padrão abaixo da média contam como escuro (padrão 2.0). Para 'fixed', o nível em dB igual ou inferior ao qual uma célula é escura."
              },
              "min_area": {
                "label": "Área mínima",
                "description": "Descartar as áreas escuras menores que esta área em unidades do mapa ao quadrado. As manchas são grandes e contíguas; o ruído não é."
              },
              "min_contrast_db": {
                "label": "Contraste mínimo (dB)",
                "description": "Descartar as regiões situadas menos que este número de dB abaixo do fundo. Uma mancha de óleo mineral está tipicamente mais de 5 dB abaixo."
              },
              "mask_features": {
                "label": "Feições de máscara",
                "description": "Camada de polígonos que restringe a análise à água. A terra é brilhante e inflacionaria a estimativa do fundo."
              },
              "mask_type": {
                "label": "Tipo de máscara",
                "description": "'land_polygon' (padrão; analisa fora dos polígonos) ou 'water_polygon' (analisa dentro deles)."
              },
              "histogram_bins": {
                "label": "Classes do histograma",
                "description": "Intervalos usados no histograma de Otsu (padrão 256)."
              },
              "input_units": {
                "label": "Unidades de entrada",
                "description": "'intensity' (padrão), 'dn', 'amplitude' ou 'db'."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a pesquisar (padrão 1)."
              }
            }
          },
          "detect_feature_changes": {
            "name": "Detectar mudanças em feições",
            "description": "Faz a correspondência de dois conjuntos de linhas pela distância de Hausdorff e classifica cada um como unchanged / spatial / attribute / spatial_attribute / new, mais as feições base excluídas — o ponto de entrada de detecção de mudanças e conflação vetorial, como o ArcGIS Detect Feature Changes.",
            "params": {
              "update": {
                "label": "Atualizar",
                "description": "Camada vetorial de linhas atualizada (o novo estado)."
              },
              "base": {
                "label": "Base",
                "description": "Camada vetorial de linhas de base (o estado anterior) com a qual comparar."
              },
              "output": {
                "label": "Saída",
                "description": "Vetor de linhas de saída (feições de atualização classificadas, mais as feições de base excluídas). Se omitido, armazenado em memória."
              },
              "search_distance": {
                "label": "Distância de busca",
                "description": "Distância máxima (unidades do CRS) para corresponder uma linha de atualização a uma linha de base. Obrigatória."
              },
              "spatial_tolerance": {
                "label": "Tolerância espacial",
                "description": "Distância de Hausdorff abaixo da qual uma geometria correspondida conta como inalterada (unidades do CRS). Padrão: search_distance / 5."
              },
              "compare_fields": {
                "label": "Campos de comparação",
                "description": "Campo(s) separados por vírgula presentes em ambas as camadas a comparar quanto a mudanças de atributos."
              }
            }
          },
          "detect_graphic_conflict": {
            "name": "Detectar conflito gráfico",
            "description": "Encontra onde as extensões simbolizadas (largura desenhada) de duas camadas de feições — ou de uma camada contra si mesma — se sobrepõem ou se aglomeram dentro de uma separação mínima, emitindo um polígono de conflito por par conflitante marcado com os IDs de ambas as feições de origem e a área de sobreposição, como o ArcGIS Detect Graphic Conflict.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (pontos, linhas ou polígonos)."
              },
              "conflict": {
                "label": "Conflito",
                "description": "Segunda camada vetorial com a qual verificar 'input'. Omita para verificar 'input' contra si mesma."
              },
              "symbol_width": {
                "label": "Largura do símbolo",
                "description": "Largura/diâmetro simbolizado das feições de 'input', em unidades do mapa."
              },
              "conflict_symbol_width": {
                "label": "Largura do símbolo de conflito",
                "description": "Largura/diâmetro simbolizado das feições de 'conflict', em unidades do mapa. Padrão: o mesmo de 'symbol_width'. Ignorado quando 'conflict' é omitido."
              },
              "conflict_distance": {
                "label": "Distância de conflito",
                "description": "Separação adicional exigida além do toque, em unidades do mapa. Padrão 0."
              },
              "line_connection_allowance": {
                "label": "Margem de conexão de linhas",
                "description": "Raio ao redor de uma extremidade compartilhada por duas feições de linha da mesma camada dentro do qual a sobreposição delas é tratada como conectividade normal ponta a ponta, e não como conflito. Padrão 0 (sem tolerância)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída com os campos 'input_fid', 'conflict_fid' e 'overlap_area'. Se omitido, armazenado em memória."
              }
            }
          },
          "detect_image_anomalies": {
            "name": "Detectar anomalias em imagens",
            "description": "Pontua cada pixel de uma imagem multibanda por sua distância de Mahalanobis às estatísticas de bandas da cena (ou de uma janela móvel) — o detector de anomalias de Reed–Xiaoli (RX) — com uma máscara opcional de limiar por percentil, como o ArcGIS Detect Image Anomalies.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster multibanda de entrada (2 ou mais bandas)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de escores de anomalia de saída (F32). Se omitido, armazenado em memória."
              },
              "mode": {
                "label": "Modo",
                "description": "'global' (estatísticas de toda a cena, padrão) ou 'local' (estatísticas de janela móvel)."
              },
              "window": {
                "label": "Janela",
                "description": "Tamanho ímpar da janela (pixels) para o modo local (padrão 15)."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Percentil opcional (0-100) da distribuição de escores acima do qual uma máscara binária de anomalias é gravada."
              },
              "mask_output": {
                "label": "Saída de máscara",
                "description": "Caminho de saída da máscara binária de anomalias (requer 'threshold'). Se omitido com um limiar definido, armazenado em memória."
              }
            }
          },
          "detect_incidents": {
            "name": "Detectar incidentes",
            "description": "Sinaliza onde uma condição começa e termina ao longo de cada trajeto: agrupa pontos com carimbo de tempo por trajeto, ordena por tempo, avalia uma comparação de início (e opcionalmente de fim) sobre um atributo numérico e emite episódios de incidentes como pontos sinalizados ou segmentos de linha por episódio com IDs e durações — como o ArcGIS Detect Incidents.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada com observações com carimbo de tempo."
              },
              "track_field": {
                "label": "Campo de trajeto",
                "description": "Campo que identifica cada trajeto/objeto em movimento (por exemplo, o identificador de um veículo ou animal)."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo que contém o tempo de cada ponto: segundos numéricos ou um carimbo de tempo ISO-8601."
              },
              "start_condition": {
                "label": "Condição de início",
                "description": "Condição que abre um incidente, por exemplo 'speed > 30'. Gramática: '<field> <op> <number>', com op entre > >= < <= == != , opcionalmente com duas cláusulas unidas por AND."
              },
              "end_condition": {
                "label": "Condição de fim",
                "description": "Condição opcional que encerra um incidente (mesma gramática). Se omitida, um incidente termina quando a condição de início deixa de valer."
              },
              "mode": {
                "label": "Modo",
                "description": "Modo de saída: 'points' (padrão, cada ponto é repassado com os campos de incidente) ou 'segments' (uma polilinha por incidente)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              }
            }
          },
          "dice": {
            "name": "Fatiar em cubos",
            "description": "Divide polígonos ou polilinhas com mais vértices do que um limite em uma grade de partes menores (como o ArcGIS Dice), para que a sobreposição e o ladrilhamento subsequentes permaneçam rápidos — uma quadtree adaptativa intersecta a geometria com cada quadrante até que cada parte fique abaixo do limite.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de polígonos ou polilinhas de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de saída com as partes fatiadas. Se omitido, armazenado em memória."
              },
              "vertex_limit": {
                "label": "Limite de vértices",
                "description": "Máximo de vértices por feição de saída (padrão 10000). As feições com este número ou menos passam inalteradas."
              }
            }
          },
          "difference_3d": {
            "name": "Diferença 3D",
            "description": "Subtrai um conjunto de sólidos 3D de outro conjunto, relatando o volume removido e o restante em cada feição minuendo (ArcGIS Difference 3D). union_3d era a única sobreposição 3D em qualquer dos registros e erase é apenas 2D para polígonos, de modo que não havia como calcular o volume escavado restante após um corpo de corte ou o volume de uma pluma fora de um envelope de exclusão. Os volumes do minuendo são exatos; o volume removido é estimado por ocupação de voxels em uma resolução relatada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Sólidos 3D fechados minuendos (MultiPolygons de malha triangular com Z)."
              },
              "subtract": {
                "label": "Subtrair",
                "description": "Sólidos 3D fechados subtraendos a remover de cada minuendo."
              },
              "output": {
                "label": "Saída",
                "description": "Tabela de saída, uma linha por minuendo. Se omitido, armazenado em memória."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Células de voxel ao longo do eixo mais longo da caixa delimitadora de cada minuendo (padrão 64). Valores maiores são mais precisos e mais lentos."
              },
              "keep_geometry": {
                "label": "Manter geometria",
                "description": "Transferir a geometria original de cada minuendo para sua linha de saída (padrão false: uma tabela apenas de atributos). A geometria é a do minuendo NÃO RECORTADO — nenhuma malha mesclada exata é produzida."
              }
            }
          },
          "diffusion_interpolation_with_barriers": {
            "name": "Interpolação por difusão com barreiras",
            "description": "Interpola medições pontuais dispersas para um raster simulando a difusão de calor que flui AO REDOR de barreiras absolutas (sem fluxo) em vez de atravessá-las (como o ArcGIS Diffusion Interpolation With Barriers). As amostras são fixadas como células imóveis; todas as outras células relaxam em direção à média de seus vizinhos não barreira ao longo de `number_iterations` varreduras de Jacobi da equação de Laplace/calor, de modo que a influência decai com a distância de difusão. Distinto do kernel de caminho mais curto sem barreiras de interpolate_with_barriers e do suavizador raster anisotropic_diffusion_filter.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada com as medições amostrais (Point / MultiPoint)."
              },
              "z_field": {
                "label": "Campo Z",
                "description": "Campo numérico dos pontos que contém o valor a interpolar."
              },
              "output": {
                "label": "Saída",
                "description": "Raster interpolado de saída (GeoTIFF). Se omitido, armazenado em memória."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula / resolução de saída em unidades do mapa (metros para um CRS geográfico, unidades do CRS caso contrário). Obrigatório."
              },
              "barriers": {
                "label": "Barreiras",
                "description": "Camada vetorial de barreiras opcional (polilinhas ou polígonos) que bloqueia a difusão. As polilinhas bloqueiam as células que seus segmentos cruzam; os polígonos bloqueiam as células cujo centro cai dentro deles. Omita para um controle sem barreiras."
              },
              "bandwidth": {
                "label": "Largura de banda",
                "description": "Peso de relaxamento lambda por iteração em (0, 0.25] (padrão 0.2): cada célula livre se move nesta fração do caminho em direção à média de seus vizinhos por passagem."
              },
              "number_iterations": {
                "label": "Número de iterações",
                "description": "Número de passagens de relaxamento de Jacobi da equação do calor (padrão 100). Mais iterações espalham a influência mais longe."
              },
              "weight_field": {
                "label": "Campo de peso",
                "description": "Campo numérico opcional que fornece um peso por ponto (padrão 1), usado apenas para promediar as amostras coincidentes que caem na mesma célula de saída."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Substituir o código EPSG do CRS de entrada (por exemplo, quando a camada não está rotulada). O valor 4326 aciona a projeção métrica local."
              }
            }
          },
          "dimension_reduction": {
            "name": "Redução de dimensionalidade",
            "description": "Análise de componentes principais sobre atributos numéricos de feições (como o ArcGIS Dimension Reduction): padroniza os campos selecionados, decompõe em autovalores a matriz de correlação/covariância com uma rotação de Jacobi própria e grava os escores dos componentes PC1..PCk de volta nas feições, mais um relatório de autovalores/variância/cargas — a contraparte para atributos vetoriais do principal_component_analysis incluído, apenas para bandas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial (ou tabela) de entrada com campos de atributos numéricos."
              },
              "fields": {
                "label": "Campos",
                "description": "Lista separada por vírgula de pelo menos dois campos numéricos a reduzir."
              },
              "output": {
                "label": "Saída",
                "description": "Camada vetorial de saída com os campos de escores das componentes principais acrescentados. Se omitido, armazenado em memória."
              },
              "table": {
                "label": "Tabela",
                "description": "Caminho opcional do CSV para o relatório das componentes (autovalor, variância explicada, acumulada, cargas por variável). Sempre retornado no resultado."
              },
              "num_components": {
                "label": "Número de componentes",
                "description": "Número de componentes principais a manter. Padrão: o suficiente para atingir 'min_variance', senão todos os campos."
              },
              "min_variance": {
                "label": "Variância mínima",
                "description": "Manter o menor número de componentes cuja variância explicada acumulada atinja esta fração (0-1). Ignorado se 'num_components' estiver definido."
              },
              "standardize": {
                "label": "Padronizar",
                "description": "Padronizar cada campo (escore z) antes da PCA para que as escalas sejam comparáveis — analisa a matriz de correlação. Padrão true; false analisa a matriz de covariância."
              }
            }
          },
          "dimensional_moving_statistics": {
            "name": "Estatísticas móveis dimensionais",
            "description": "Executa uma janela móvel ao longo da dimensão de um cubo raster, gravando uma fatia suavizada por fatia de entrada — a média ou mediana móvel no local que transforma uma série temporal de satélite ruidosa em uma utilizável (ArcGIS Dimensional Moving Statistics). O time_series_smoothing da rodada 17 é apenas vetorial, os filtros focais incluídos movem uma janela espacialmente dentro de uma única fatia e aggregate_multidimensional_raster encurta o cubo em grupos. Inclui uma média circular, sem a qual a média de orientação ou fase através do ponto de dobra não faz sentido.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Um raster multibanda (cada banda é uma fatia) ou uma lista de rasters corregistrados separada por vírgula."
              },
              "output": {
                "label": "Saída",
                "description": "Raster multibanda de saída com uma banda por fatia de entrada. Se omitido, armazenado em memória."
              },
              "dimension": {
                "label": "Dimensão",
                "description": "Nome da dimensão, usado apenas no relatório (padrão 'slice')."
              },
              "backward_window": {
                "label": "Janela retroativa",
                "description": "Fatias anteriores à atual a incluir (padrão 1)."
              },
              "forward_window": {
                "label": "Janela prospectiva",
                "description": "Fatias posteriores à atual a incluir (padrão 1)."
              },
              "statistic": {
                "label": "Estatística",
                "description": "'mean' (padrão), 'circular_mean', 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'std' ou 'sum'."
              },
              "percentile_value": {
                "label": "Valor do percentil",
                "description": "Percentil em [0, 100] para a estatística 'percentile' (padrão 50)."
              },
              "period": {
                "label": "Período",
                "description": "Período de dobra para 'circular_mean' (padrão 360, ou seja, graus; use 6.283185307179586 para radianos)."
              },
              "min_valid": {
                "label": "Mínimo válido",
                "description": "Mínimo de observações não nodata na janela antes que um valor seja gravado (padrão 1)."
              },
              "nodata_handling": {
                "label": "Tratamento de nodata",
                "description": "'data' (padrão; ignora o nodata e calcula com o restante), 'nodata' (qualquer nodata na janela torna a saída nodata) ou 'fill_nodata' (grava um valor mesmo onde a própria fatia central é nodata)."
              }
            }
          },
          "directional_distribution": {
            "name": "Distribuição direcional",
            "description": "Estatísticas descritivas de distribuição geográfica: centro médio, centro mediano, feição central, distância padrão (círculo) e elipse de desvio padrão — com ponderação e agrupamento opcionais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (pontos são preferíveis; as demais geometrias usam seu ponto representativo, a média dos vértices)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "statistic": {
                "label": "Estatística",
                "description": "Qual medida calcular: 'mean_center', 'median_center', 'central_feature', 'standard_distance' ou 'standard_deviational_ellipse'."
              },
              "weight_field": {
                "label": "Campo de peso",
                "description": "Campo numérico opcional para ponderar cada feição (por exemplo, população). Padrão: cada feição com peso 1."
              },
              "case_field": {
                "label": "Campo de caso",
                "description": "Campo opcional pelo qual agrupar as feições; uma feição de saída é produzida por valor distinto."
              },
              "n_std": {
                "label": "Número de desvios padrão",
                "description": "Multiplicador do desvio padrão (1, 2 ou 3) para o círculo de distância padrão e a elipse de desvio padrão. Padrão 1."
              }
            }
          },
          "directional_trend": {
            "name": "Tendência direcional",
            "description": "Projeta pontos de amostragem sobre um azimute escolhido e ajusta um polinômio de 1ª a 3ª ordem de valor versus distância para detectar uma tendência global/anisotrópica antes da variografia (como o Directional Trend do ArcGIS). 'determine' varre os azimutes em busca da direção de máxima variância explicada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (pontos são preferíveis; as demais geometrias usam seu ponto representativo, a média dos vértices)."
              },
              "field": {
                "label": "Campo",
                "description": "Campo de atributo numérico cuja tendência será analisada."
              },
              "azimuth": {
                "label": "Azimute",
                "description": "Rumo em graus da bússola (0 = norte, sentido horário) sobre o qual projetar, ou 'determine' (padrão) para varrer de 0 a 179° em busca do rumo de máxima variância explicada."
              },
              "order": {
                "label": "Ordem",
                "description": "Ordem do polinômio 1, 2 ou 3 (padrão 2)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória. Os pontos carregam proj_dist, value, fitted e residual."
              }
            }
          },
          "directional_variogram": {
            "name": "Análise de variograma direcional",
            "description": "Calcula variogramas em múltiplas direções para detectar anisotropia espacial. Revela padrões de continuidade direcional essenciais para uma krigagem realista.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos com os valores de medição"
              },
              "field": {
                "label": "Campo",
                "description": "Campo que contém os valores de medição"
              },
              "directions": {
                "label": "Direções",
                "description": "Lista separada por vírgula dos azimutes (0-180°) a analisar"
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Tolerância de direção em graus (padrão 22.5)"
              },
              "max_distance": {
                "label": "Distância máxima",
                "description": "Distância máxima de defasagem a calcular (padrão 1000)"
              },
              "bin_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho dos intervalos de defasagem (padrão 50)"
              },
              "output_json": {
                "label": "JSON de saída",
                "description": "Caminho do arquivo de saída para os resultados do variograma direcional"
              },
              "output_html": {
                "label": "HTML de saída",
                "description": "Caminho opcional de saída para a visualização do diagrama de rosa em HTML"
              }
            }
          },
          "disperse_markers": {
            "name": "Dispersar marcadores",
            "description": "Afasta símbolos pontuais coincidentes ou sobrepostos até um espaçamento mínimo entre centros (padrões expandido/anel/cruz/quadrado) para que pontos empilhados permaneçam individualmente visíveis, como o ArcGIS Disperse Markers.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "min_spacing": {
                "label": "Espaçamento mínimo",
                "description": "Espaçamento mínimo de centro a centro a impor entre os pontos agrupados, em unidades do mapa."
              },
              "pattern": {
                "label": "Padrão",
                "description": "'expanded' (padrão, anéis concêntricos + repulsão local), 'ring' (um único círculo), 'cross' (quatro braços) ou 'square' (grade)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente inteira para o desempate determinístico quando os membros começam exatamente coincidentes (padrão 0)."
              }
            }
          },
          "dissolve_route_events": {
            "name": "Dissolver eventos de rota",
            "description": "Mescla eventos de rota que se tocam ou se sobrepõem ao longo da mesma rota em intervalos únicos de medida, seja apenas quando os campos de dissolução coincidem ('dissolve') ou concatenando valores diferentes ('concatenate'). Como o ArcGIS Dissolve Route Events.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Tabela de eventos de entrada (eventos de linha com medidas de início/fim)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho da tabela de eventos de saída. Se omitido, armazenado em memória."
              },
              "route_id_field": {
                "label": "Campo de ID da rota",
                "description": "Campo que contém o identificador da rota."
              },
              "from_measure_field": {
                "label": "Campo de medida inicial",
                "description": "Campo que contém a medida inicial de cada evento."
              },
              "to_measure_field": {
                "label": "Campo de medida final",
                "description": "Campo que contém a medida final de cada evento. Para eventos pontuais, use o mesmo campo de 'from_measure_field'."
              },
              "dissolve_fields": {
                "label": "Campos de dissolução",
                "description": "Nome(s) de campo separados por vírgula ou ponto e vírgula que devem coincidir para que dois trechos sejam mesclados (ou cujos valores são concatenados)."
              },
              "mode": {
                "label": "Modo",
                "description": "'dissolve' (padrão) ou 'concatenate'."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Lacuna de medida abaixo da qual dois trechos contam como adjacentes (padrão 0)."
              },
              "separator": {
                "label": "Separador",
                "description": "Separador usado para unir os valores no modo 'concatenate' (padrão ', ')."
              }
            }
          },
          "edgematch_features": {
            "name": "Casar feições nas bordas",
            "description": "Conecta conjuntos de linhas através de um limite de ladrilho/folha (como o ArcGIS Generate Edgematch Links + Edgematch Features): faz a correspondência um a um de extremidades soltas dentro de uma tolerância e as reconcilia (ponto médio ou ajuste), com uma camada opcional de ligações de correspondência. A correspondência um a um entre feições que falta ao snap_endnodes cego.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de linhas de entrada (por exemplo, dois ladrilhos adjacentes mesclados) a conciliar nas bordas."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de linhas ajustada de saída. Se omitido, armazenado em memória."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Distância máxima entre extremidades pendentes para que sejam correspondidas."
              },
              "method": {
                "label": "Método",
                "description": "'midpoint' (move ambas as extremidades para seu ponto médio; padrão) ou 'move_endpoint' (ajusta a segunda sobre a primeira)."
              },
              "match_fields": {
                "label": "Campos de correspondência",
                "description": "Campos opcionais separados por vírgula; um par correspondido deve coincidir nestes campos (desambigua os candidatos)."
              },
              "links": {
                "label": "Ligações",
                "description": "Camada de linhas de saída opcional com as ligações de correspondência (para controle de qualidade)."
              }
            }
          },
          "eighty_twenty_analysis": {
            "name": "Análise oitenta-vinte",
            "description": "Ajusta pontos de incidentes a localizações ponderadas e calcula a concentração de Pareto (\"X% dos incidentes ocorrem em Y% das localizações\"), marcando cada localização com sua classificação, percentual acumulado de incidentes e faixa de cabeça/cauda, como o ArcGIS Eighty Twenty Analysis.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de incidentes de entrada (Point ou MultiPoint)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "cluster_tolerance": {
                "label": "Tolerância de agrupamento",
                "description": "Distância dentro da qual os incidentes se agregam em um único local (unidades do mapa, padrão 0 = apenas pontos exatamente coincidentes)."
              },
              "weight_field": {
                "label": "Campo de peso",
                "description": "Campo numérico opcional que fornece o peso de cada incidente (padrão: cada incidente conta como 1)."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Percentual de concentração que define a 'cabeça' de Pareto (padrão 80)."
              }
            }
          },
          "eliminate_polygon_part": {
            "name": "Eliminar parte de polígono",
            "description": "Remove buracos internos (e opcionalmente pequenas partes externas) de polígonos cuja área está abaixo de um limiar de área absoluta ou percentual, preservando os atributos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de polígonos de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "condition": {
                "label": "Condição",
                "description": "Teste de tamanho: 'AREA' (padrão) compara com 'min_area'; 'PERCENT' compara a área da parte/buraco como uma porcentagem da área externa total da feição com 'percentage'."
              },
              "min_area": {
                "label": "Área mínima",
                "description": "Condição AREA: remove as partes/buracos cuja área (em unidades do CRS ao quadrado) esteja abaixo deste valor. Obrigatório quando condition = AREA."
              },
              "percentage": {
                "label": "Percentagem",
                "description": "Condição PERCENT: remove as partes/buracos cuja área, como uma porcentagem (0-100) da área externa total da feição, esteja abaixo deste valor. Obrigatório quando condition = PERCENT."
              },
              "part_option": {
                "label": "Opção de partes",
                "description": "O que é elegível para remoção: 'CONTAINED_ONLY' (padrão) remove apenas os anéis interiores (buracos); 'ANY' também remove as pequenas partes exteriores, exceto a maior delas."
              }
            }
          },
          "eliminate_polygons": {
            "name": "Eliminar polígonos",
            "description": "Mescla polígonos fragmentários (por área máxima e/ou uma consulta de atributo) em um polígono vizinho, escolhido pela maior fronteira compartilhada ou pela maior área.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de polígonos de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "max_area": {
                "label": "Área máxima",
                "description": "Selecionar os polígonos cuja área (em unidades do CRS ao quadrado) seja igual ou inferior a este valor. Pode ser combinado com 'where' (ambos devem coincidir)."
              },
              "where": {
                "label": "Onde",
                "description": "Selecionar os polígonos que satisfaçam uma condição simples de atributo 'FIELD OP VALUE', onde OP é um entre = != < <= > >= (por exemplo, \"class = 0\"). Pode ser combinado com 'max_area'."
              },
              "exclude": {
                "label": "Excluir",
                "description": "Proteger da eliminação as feições que satisfaçam esta condição (mesma sintaxe 'FIELD OP VALUE'); elas são mantidas e podem receber mesclagens."
              },
              "strategy": {
                "label": "Estratégia",
                "description": "Em qual vizinho uma lasca é mesclada: 'longest_border' (padrão) ou 'largest_area'."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Distância perpendicular máxima (em unidades do CRS) para que dois segmentos de limite contem como uma aresta compartilhada. Padrão 1e-6."
              }
            }
          },
          "emerging_hot_spot_analysis": {
            "name": "Análise de pontos quentes emergentes",
            "description": "Tendências de hotspots espaço-temporais em um cubo espaço-temporal H3: agrupa pontos com carimbo de tempo em células H3 x passos de tempo, calcula Gi* de Getis-Ord por grupo e classifica cada célula (hotspot ou coldspot novo/intensificando/persistente/diminuindo/...) via um teste de tendência de Mann-Kendall, como o ArcGIS Emerging Hot Spot Analysis.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada (geográfica lon/lat, EPSG:4326). As demais geometrias usam seu ponto representativo, a média dos vértices."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Um polígono H3 por célula. Se omitido, armazenado em memória."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo que contém o tempo de cada ponto: um campo numérico (nas suas próprias unidades) ou uma cadeia de data/data-hora ISO-8601."
              },
              "time_step": {
                "label": "Passo de tempo",
                "description": "Duração de um passo de tempo: um número simples (para um time_field numérico) ou uma duração como '1w', '7d', '12h', '1M' para um campo de data. Padrão '1w'."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo numérico opcional a somar em cada grupo. Padrão: a contagem de pontos por grupo."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Resolução H3 de 0 (mais grosseira) a 15 (mais fina); padrão 7 (células de ~5 km²)."
              },
              "neighborhood": {
                "label": "Vizinhança",
                "description": "Raio da vizinhança espacial em anéis k do H3 (padrão 1)."
              },
              "time_window": {
                "label": "Janela de tempo",
                "description": "Raio da vizinhança temporal em passos de tempo (padrão 1)."
              }
            }
          },
          "empirical_bayesian_kriging": {
            "name": "Krigagem bayesiana empírica",
            "description": "Interpola um campo de pontos por meio de muitos subconjuntos locais sobrepostos, cada um ajustando seu próprio semivariograma cuja incerteza é capturada simulando semivariogramas perturbados a partir de um RNG com semente, depois mesclando as predições/variâncias de krigagem dos subconjuntos por distância (como o Empirical Bayesian Kriging do ArcGIS) — distinto das krigagens ordinária/universal/simples/co-krigagem incluídas, que ajustam todas um único semivariograma global aceito manualmente (ou de janela móvel única).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos de entrada."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numérico da camada de entrada a interpolar."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de predição de saída. Se omitido, armazenado em memória."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do CRS. Padrão: dimensionado para que o eixo maior da grade tenha ~150 células."
              },
              "subset_size": {
                "label": "Tamanho do subconjunto",
                "description": "Número desejado de pontos por subconjunto local (padrão 40, mínimo 4)."
              },
              "overlap": {
                "label": "Sobreposição",
                "description": "Fração da largura/altura de um ladrilho de subconjunto em que os ladrilhos vizinhos se sobrepõem (padrão 0.25)."
              },
              "simulations": {
                "label": "Simulações",
                "description": "Número de semivariogramas simulados sorteados por subconjunto para representar a incerteza do modelo (padrão 5, máximo 50)."
              },
              "semivariogram": {
                "label": "Semivariograma",
                "description": "Família de modelos de semivariograma: 'power' (padrão), 'linear' ou 'exponential'."
              },
              "transform": {
                "label": "Transformação",
                "description": "Transformação dos dados antes da krigagem: 'none' (padrão) ou 'log_empirical' (logaritmo natural; exige que o campo seja > 0 em toda parte)."
              },
              "error_output": {
                "label": "Saída de erro",
                "description": "Raster de erro padrão da predição de saída opcional."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente do gerador de números aleatórios determinístico da simulação de semivariogramas (padrão 42)."
              }
            }
          },
          "enclose_multipatch": {
            "name": "Fechar multipatch",
            "description": "Converte superfícies 3D abertas de malha triangular em sólidos fechados e estanques tampando seus laços de fronteira, de modo que se tornem entrada válida para análise volumétrica (ArcGIS Enclose Multipatch). is_closed_3d pode diagnosticar uma malha aberta, mas nada podia repará-la, e union_3d / intersect_3d / difference_3d / inside_3d rejeitam ou relatam incorretamente malhas abertas — que é o estado normal de contornos extrudados, cascas de terreno e superfícies de edificações importadas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições de superfície 3D (MultiPolygons de malha triangular com Z)."
              },
              "output": {
                "label": "Saída",
                "description": "Feições de sólidos fechados de saída. Se omitido, armazenado em memória."
              },
              "drop_failed": {
                "label": "Descartar falhas",
                "description": "Omitir as feições que não puderam ser tornadas estanques (padrão false: elas são emitidas com CAP_FAILED = true, de modo que a falha fique visível em vez de silenciosa)."
              }
            }
          },
          "enforce_river_monotonicity": {
            "name": "Impor monotonicidade fluvial",
            "description": "Escava um DEM para que as elevações diminuam monotonicamente a jusante ao longo de polilinhas de rios mapeados — um passo de condicionamento hidrológico para modelagem hidráulica e de inundações, como o ArcGIS Enforce River Monotonicity. Ao contrário de fill_depressions/fill_burn (que removem depressões fechadas), este impõe um perfil monótono ao longo de um vetor de rio conhecido.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de polilinhas de rios de entrada (LineString / MultiLineString) que compartilha o CRS do DEM."
              },
              "surface": {
                "label": "Superfície",
                "description": "Raster de elevação (DEM) a corrigir."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do DEM corrigido de saída (formato a partir da extensão). Se omitido, armazenado em memória."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Queda mínima de elevação imposta a cada passo densificado, em unidades Z (padrão 0 = não crescente). Valores positivos forçam um perfil estritamente decrescente."
              },
              "sample_distance": {
                "label": "Distância de amostragem",
                "description": "Intervalo de densificação em unidades do CRS ao longo de cada linha de rio. Padrão: o tamanho da célula do raster (≈ uma amostra por célula)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) do DEM a corrigir (padrão 1)."
              }
            }
          },
          "estimate_time_to_event": {
            "name": "Estimar tempo até o evento",
            "description": "Estima o tempo até um evento via curva de sobrevivência de Kaplan-Meier (como o ArcGIS Estimate Time To Event): a partir de um campo de duração e um campo de evento/censura, calcula a probabilidade de sobrevivência de cada feição e o tempo mediano até o evento de seu estrato, opcionalmente estratificado por um campo categórico.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos ou de polígonos de entrada com um campo de duração e um campo de evento/censura."
              },
              "age_field": {
                "label": "Campo de idade",
                "description": "Campo que contém a duração observada de cada feição (tempo até o evento ou tempo até a censura), um número não negativo."
              },
              "event_field": {
                "label": "Campo de evento",
                "description": "Campo que indica se o evento ocorreu (verdadeiro: 1/true) ou se a observação foi censurada (falso: 0/false)."
              },
              "stratify_field": {
                "label": "Campo de estratificação",
                "description": "Campo categórico opcional para ajustar uma curva de sobrevivência separada por grupo."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de saída com os campos km_survival, km_median e km_stratum adicionados. Se omitido, armazenado em memória."
              }
            }
          },
          "estimate_variogram": {
            "name": "Estimar variograma",
            "description": "Calcula um semivariograma empírico a partir de observações pontuais para caracterizar a estrutura de correlação espacial. Primeiro passo essencial no fluxo de trabalho geoestatístico.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada com valores"
              },
              "field": {
                "label": "Campo",
                "description": "Campo que contém os valores de medição"
              },
              "lag_distance": {
                "label": "Distância de defasagem",
                "description": "Tamanho do intervalo de defasagem em unidades do mapa (padrão: 100.0)"
              },
              "lag_tolerance": {
                "label": "Tolerância de defasagem",
                "description": "Tolerância do agrupamento por defasagem (padrão: 50.0)"
              },
              "max_lag_count": {
                "label": "Número máximo de defasagens",
                "description": "Número máximo de defasagens a manter (padrão: 20)"
              }
            }
          },
          "euclidean_direction": {
            "name": "Direção euclidiana",
            "description": "Calcula o azimute da bússola de cada célula em direção à sua célula de origem mais próxima, mais rasters opcionais de distância e direção de retorno (ArcGIS Euclidean Direction). Completa a família euclidiana incluída, que traz euclidean_distance (quão longe) e euclidean_allocation (qual origem), mas não o rumo. Usa uma transformada de distância exata que carrega as coordenadas da origem mais próxima; com um raster de barreiras, roteia ao redor dos obstáculos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de origens: as células que não são nodata nem zero são origens."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de direção de saída (graus no sentido horário a partir do norte). Se omitido, armazenado em memória."
              },
              "output_distance": {
                "label": "Distância de saída",
                "description": "Caminho opcional para o raster de distância correspondente."
              },
              "output_back_direction": {
                "label": "Direção de retorno de saída",
                "description": "Caminho opcional para o raster de direção de retorno: o rumo a percorrer desta célula de volta em direção à origem mais próxima. Igual ao raster de direção quando nenhuma barreira é fornecida; com barreiras, é o primeiro passo do caminho de retorno."
              },
              "barriers": {
                "label": "Barreiras",
                "description": "Raster de barreiras opcional; as células diferentes de zero e não nodata bloqueiam os caminhos em linha reta, forçando o desvio ao redor delas."
              },
              "max_distance": {
                "label": "Distância máxima",
                "description": "As células mais distantes que isso de qualquer origem são gravadas como nodata."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) do raster de origens a ler (padrão 1)."
              }
            }
          },
          "evaluate_bin_sizes": {
            "name": "Avaliar tamanhos de classe",
            "description": "Varre tamanhos candidatos de células de agregação e relata diagnósticos que identificam qual tamanho melhor revela a estrutura, como o ArcGIS Evaluate Bin Sizes.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições pontuais a agregar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional da tabela de diagnósticos de saída. Se omitido, armazenado em memória."
              },
              "bin_shape": {
                "label": "Forma da célula",
                "description": "hexagon (padrão; aproximação com deslocamento de linhas, ver a documentação) | square."
              },
              "sizes": {
                "label": "Tamanhos",
                "description": "Tamanhos candidatos de grupo separados por vírgula (unidades do mapa). Quando omitidos, uma varredura geométrica é gerada a partir da distância média ao vizinho mais próximo."
              },
              "steps": {
                "label": "Passos",
                "description": "Número de candidatos na varredura gerada (padrão 8, máximo 64)."
              },
              "analysis_field": {
                "label": "Campo de análise",
                "description": "Campo numérico opcional a somar por grupo em vez de contar os pontos."
              }
            }
          },
          "evaluate_variable_influence": {
            "name": "Avaliar a influência das variáveis",
            "description": "Relata a importância por permutação e as curvas de dependência parcial de um modelo de floresta ajustado a partir de uma tabela, respondendo quais variáveis explicativas um modelo realmente usa e qual a forma de cada efeito (ArcGIS Evaluate Variable Influence). O catálogo pode ajustar modelos — generalized_linear_regression, exploratory_regression, geographically_weighted_regression, forest_based_forecast, as florestas aleatórias do whitebox — mas nenhum relata qualquer das medidas. O ArcGIS lê um arquivo de modelo .ssm treinado; esta pilha não tem formato de modelo portátil, então a ferramenta ajusta sua própria floresta e depois a explica. Totalmente determinístico: bagging com passo fixo e permutação fixa, sem RNG.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada ou tabela que contém as observações de treinamento."
              },
              "dependent_field": {
                "label": "Campo dependente",
                "description": "Campo que está sendo previsto."
              },
              "explanatory_fields": {
                "label": "Campos explicativos",
                "description": "Campos numéricos separados por vírgula a avaliar."
              },
              "output": {
                "label": "Saída",
                "description": "Tabela de saída com a importância por variável. Se omitido, armazenado em memória."
              },
              "output_partial_dependence": {
                "label": "Saída de dependência parcial",
                "description": "Tabela de saída com as curvas de dependência parcial, uma linha por variável e ponto da grade. Sempre produzida; armazenada em memória quando nenhum caminho é fornecido."
              },
              "model_type": {
                "label": "Tipo de modelo",
                "description": "'regression' (padrão) para um alvo contínuo, ou 'classification' para um alvo categórico."
              },
              "number_of_trees": {
                "label": "Número de árvores",
                "description": "Árvores do conjunto (padrão 50)."
              },
              "max_depth": {
                "label": "Profundidade máxima",
                "description": "Profundidade máxima da árvore (padrão 8)."
              },
              "min_samples_leaf": {
                "label": "Mínimo de amostras por folha",
                "description": "Número mínimo de observações que uma folha pode conter (padrão 3)."
              },
              "grid_points": {
                "label": "Pontos da grade",
                "description": "Pontos por curva de dependência parcial (padrão 12)."
              },
              "permutation_repeats": {
                "label": "Repetições de permutação",
                "description": "Permutações distintas promediadas por variável (padrão 3). Mais permutações dão resultados mais estáveis e mais lentos."
              }
            }
          },
          "excel_to_table": {
            "name": "Excel para tabela",
            "description": "Lê uma planilha de uma pasta de trabalho .xlsx/.xls/.xlsb/.ods em uma tabela de atributos, inferindo colunas numéricas versus de texto.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho da pasta de trabalho Excel/OpenDocument de entrada (.xlsx, .xls, .xlsb ou .ods)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional da tabela de saída (driver a partir de sua extensão; recomenda-se GeoParquet .parquet). Se omitido, armazenado em memória."
              },
              "sheet": {
                "label": "Planilha",
                "description": "Planilha a ler, por nome ou por índice em base 0. Padrão: a primeira planilha."
              },
              "cell_range": {
                "label": "Intervalo de células",
                "description": "Intervalo opcional em notação A1 a importar, por exemplo 'B2:E40'. Padrão: todo o intervalo usado da planilha."
              },
              "field_names_row": {
                "label": "Linha dos nomes dos campos",
                "description": "Linha (base 1) dentro do intervalo selecionado que contém os nomes das colunas (padrão 1). As linhas acima dela são ignoradas; 0 significa que não há linha de cabeçalho (gera automaticamente Field1, Field2, ...)."
              }
            }
          },
          "expand_shrink": {
            "name": "Expandir / contrair",
            "description": "Expande ou contrai classes selecionadas de um raster categórico por um número de células, deixando as demais classes intactas — a limpeza padrão de cobertura do solo classificada antes da poligonização, como o ArcGIS Expand / Shrink.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster categórico (de valores inteiros) de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída. Se omitido, armazenado em memória."
              },
              "classes": {
                "label": "Classes",
                "description": "Valor(es) de classe separados por vírgula a expandir ou contrair."
              },
              "cells": {
                "label": "Células",
                "description": "Número de células a expandir ou contrair (>= 1)."
              },
              "mode": {
                "label": "Modo",
                "description": "'expand' (dilata as classes selecionadas; padrão) ou 'shrink' (erode-as)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler (padrão 1)."
              }
            }
          },
          "exploratory_interpolation": {
            "name": "Interpolação exploratória",
            "description": "Executa vários métodos de interpolação (IDW, vizinho mais próximo, superfícies de tendência de primeira/segunda ordem), valida cada um por validação cruzada leave-one-out e os classifica por acurácia de predição (RMSE/MAE) ou viés (ME) — como o ArcGIS Exploratory Interpolation. Relata uma tabela de comparação classificada por método e pode emitir o raster de predição do melhor método. Engloba uma solicitação de validação cruzada isolada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de medições de entrada."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numérico dos pontos que contém o valor a interpolar."
              },
              "output": {
                "label": "Saída",
                "description": "Tabela de comparação ordenada de saída — um CSV (extensão .csv) ou uma tabela vetorial sem geometria. Se omitido, armazenado em memória."
              },
              "methods": {
                "label": "Métodos",
                "description": "Subconjunto de métodos a comparar, separados por vírgula ou barra vertical: 'idw', 'nearest', 'trend1', 'trend2'. Padrão: todos os quatro."
              },
              "criterion": {
                "label": "Critério",
                "description": "Critério de ordenação: 'rmse' (padrão, menor erro), 'mae' (menor erro absoluto) ou 'me' (menor viés, menor |erro médio|)."
              },
              "power": {
                "label": "Potência",
                "description": "Expoente de decaimento com a distância do IDW (padrão 2)."
              },
              "output_raster": {
                "label": "Raster de saída",
                "description": "GeoTIFF de saída opcional: o método mais bem classificado ajustado a todas as amostras, avaliado sobre uma grade que abrange a extensão das amostras."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula do raster vencedor em unidades do CRS (graus para um CRS geográfico). Padrão: dimensionado para que o eixo maior abranja ~256 células."
              }
            }
          },
          "exploratory_regression": {
            "name": "Regressão exploratória",
            "description": "Enumera modelos OLS sobre todas as combinações de campos explicativos candidatos e avalia cada um quanto ao R² ajustado, significância dos coeficientes, multicolinearidade por VIF, normalidade dos resíduos de Jarque-Bera e autocorrelação espacial dos resíduos pelo I de Moran, relatando todos os modelos mais o conjunto aprovado classificado e um resumo de significância por variável — como o ArcGIS Exploratory Regression.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de feições de entrada com geometria (usada para a vizinhança do I de Moran dos resíduos)."
              },
              "dependent_field": {
                "label": "Campo dependente",
                "description": "Campo numérico dependente (resposta)."
              },
              "explanatory_fields": {
                "label": "Campos explicativos",
                "description": "Campos numéricos explicativos candidatos separados por vírgula a serem pesquisados."
              },
              "min_vars": {
                "label": "Mínimo de variáveis",
                "description": "Número mínimo de variáveis explicativas por modelo candidato (padrão 1)."
              },
              "max_vars": {
                "label": "Máximo de variáveis",
                "description": "Número máximo de variáveis explicativas por modelo candidato (padrão: min(número de candidatas, 6))."
              },
              "max_coef_p": {
                "label": "Valor-p máximo do coeficiente",
                "description": "Valor-p máximo permitido para cada coeficiente explicativo (padrão 0.05)."
              },
              "min_adj_r2": {
                "label": "R² ajustado mínimo",
                "description": "R-quadrado ajustado mínimo (padrão 0.5)."
              },
              "max_vif": {
                "label": "VIF máximo",
                "description": "Fator de inflação da variância máximo permitido por termo (padrão 7.5)."
              },
              "min_jb_p": {
                "label": "Valor-p mínimo de JB",
                "description": "Valor-p mínimo de Jarque-Bera para a normalidade dos resíduos (padrão 0.1)."
              },
              "min_moran_p": {
                "label": "Valor-p mínimo de Moran",
                "description": "Valor-p mínimo para a autocorrelação espacial dos resíduos (I de Moran); acima deste valor, os resíduos não estão significativamente agrupados (padrão 0.1)."
              },
              "neighbors": {
                "label": "Vizinhos",
                "description": "Número de vizinhos mais próximos que definem os pesos espaciais para o teste do I de Moran dos resíduos (padrão 8)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho da tabela do relatório de saída — um CSV (extensão .csv) ou uma tabela vetorial sem geometria."
              }
            }
          },
          "extract_locations_from_text": {
            "name": "Extrair localizações de texto",
            "description": "Varre texto livre em busca de coordenadas embutidas — graus decimais (DD), graus-minutos decimais (DDM), graus-minutos-segundos (DMS) e referências de grade MGRS/USNG — e emite um ponto WGS84 por ocorrência, como o ArcGIS Extract Locations From Text (ramo de coordenadas). Varredura pura de padrões; sem serviço de geocodificação.",
            "params": {
              "input_text": {
                "label": "Texto de entrada",
                "description": "O texto livre a examinar. Ou o texto literal, ou o caminho de um arquivo de texto UTF-8 (lido quando o valor corresponde a um arquivo existente)."
              },
              "notations": {
                "label": "Notações",
                "description": "Subconjunto de notações a procurar, separadas por vírgula ou espaço: DD, DDM, DMS, MGRS (USNG é um alias de MGRS). Padrão: todas as quatro."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              }
            }
          },
          "extract_ocean_winds": {
            "name": "Extrair ventos oceânicos",
            "description": "Recupera a velocidade do vento oceânico equivalente neutro a 10 m a partir do retroespalhamento SAR calibrado invertendo a função de modelo geofísico CMOD5.N (ArcGIS Extract Ocean Winds). Toda a cadeia SAR disponível permanece no domínio radiométrico e nada convertia retroespalhamento em uma quantidade geofísica, que é também o que separa uma mancha de vento fraco de uma mancha de óleo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de retroespalhamento calibrado (sigma0)."
              },
              "units": {
                "label": "Unidades",
                "description": "Unidades de 'input': 'dn', 'amplitude', 'intensity' ou 'db' (padrão 'db')."
              },
              "incidence_angle": {
                "label": "Ângulo de incidência",
                "description": "Ângulo de incidência por célula em graus: o caminho de um raster ou um número constante."
              },
              "wind_direction": {
                "label": "Direção do vento",
                "description": "Direção meteorológica do vento em graus (a direção DE ONDE o vento sopra), como o caminho de um raster ou uma constante. Um dado prévio obrigatório: o CMOD tem duas incógnitas e uma observação."
              },
              "look_direction": {
                "label": "Direção de visada",
                "description": "Azimute de visada do radar em graus, como o caminho de um raster ou uma constante. Usado para converter a direção do vento no ângulo relativo que o CMOD utiliza."
              },
              "polarization": {
                "label": "Polarização",
                "description": "'vv' (padrão, CMOD5.N nativo) ou 'hh' (aplica uma razão de polarização aproximada)."
              },
              "polarization_ratio_alpha": {
                "label": "Alpha da razão de polarização",
                "description": "Alfa da razão de polarização HH para VV (padrão 0.6). Usado apenas quando a polarização é 'hh'."
              },
              "water_mask": {
                "label": "Máscara de água",
                "description": "Camada de polígonos ou raster opcional que restringe a saída à água; os retornos de terra não têm significado aqui."
              },
              "max_wind": {
                "label": "Vento máximo",
                "description": "Extremo superior do intervalo de inversão, em m/s (padrão 50)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de velocidade do vento de saída em m/s. Se omitido, armazenado em memória."
              }
            }
          },
          "extract_scanned_features": {
            "name": "Extrair feições digitalizadas",
            "description": "Vetoriza um raster binário (digitalizado/limiarizado) em linhas limpas (rastreamento de esqueleto) ou polígonos, com remoção de ruído, preenchimento de buracos, fechamento de lacunas e simplificação.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster binário/classificado de entrada a vetorizar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "feature_type": {
                "label": "Tipo de feição",
                "description": "'lines' (padrão): esqueletiza e traça as linhas centrais. 'polygons': vetoriza as regiões preenchidas."
              },
              "foreground_value": {
                "label": "Valor de primeiro plano",
                "description": "Valor de célula que marca o primeiro plano. Se omitido, as células >= 'threshold' (ou, na ausência deste, qualquer célula válida diferente de zero) são primeiro plano."
              },
              "threshold": {
                "label": "Limiar",
                "description": "O primeiro plano são as células com valor >= este (usado quando 'foreground_value' não é fornecido)."
              },
              "noise_size": {
                "label": "Tamanho do ruído",
                "description": "Remover as componentes de primeiro plano menores que este número de células (padrão 4)."
              },
              "hole_size": {
                "label": "Tamanho do buraco",
                "description": "Preencher os buracos de fundo menores que este número de células (padrão 4)."
              },
              "gap_distance": {
                "label": "Distância da lacuna",
                "description": "Para lines: unir as lacunas até esta distância (unidades do CRS) entre extremidades de linhas quase colineares. Padrão 0 (desativado)."
              },
              "simplify_tolerance": {
                "label": "Tolerância de simplificação",
                "description": "Tolerância de Douglas-Peucker (unidades do CRS) para a geometria de saída. Padrão ~1 célula."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler (padrão 1)."
              }
            }
          },
          "extract_sinks": {
            "name": "Extrair depressões",
            "description": "Extrai sumidouros (extensão máxima das depressões) de um DEM (lidar filling.py).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo do raster do DEM de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de depressões. Se omitido, armazenado em memória."
              },
              "min_size": {
                "label": "Tamanho mínimo",
                "description": "Número mínimo de pixels para uma depressão (mantida se estritamente maior; padrão 10)."
              },
              "region_output": {
                "label": "Saída de regiões",
                "description": "Caminho opcional de saída para o raster de regiões rotuladas."
              },
              "depth_output": {
                "label": "Saída de profundidade",
                "description": "Caminho opcional de saída para o raster de profundidade de preenchimento."
              },
              "filled_output": {
                "label": "Saída preenchida",
                "description": "Caminho opcional de saída para o DEM com as depressões preenchidas."
              },
              "csv_output": {
                "label": "Saída CSV",
                "description": "Caminho opcional de saída para o CSV de atributos por região."
              },
              "vector_output": {
                "label": "Saída vetorial",
                "description": "Caminho opcional de saída para os polígonos das regiões em GeoJSON (com os atributos unidos)."
              },
              "flat_increment": {
                "label": "Incremento de planura",
                "description": "Incremento plano somado durante o preenchimento para forçar a drenagem (padrão 0)."
              }
            }
          },
          "extract_spectra_from_image": {
            "name": "Extrair espectros da imagem",
            "description": "Deriva uma biblioteca espectral a partir de uma imagem multibanda e regiões de treinamento, um espectro por classe, no layout CSV que spectral_library_matching lê (ArcGIS Extract Spectra From Image). spectral_library_matching, spectral_angle_mapper e matched_filter_target_detection consomem uma biblioteca e nada criava uma, de modo que o conjunto espectral só podia ser usado contra bibliotecas publicadas pré-existentes.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Imagem multibanda."
              },
              "training_features": {
                "label": "Feições de treinamento",
                "description": "Camada de polígonos ou de pontos que delimita cada classe ou alvo."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Atributo que contém o rótulo da classe. As feições que compartilham um rótulo são reunidas em um único espectro."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV da biblioteca espectral de saída ('name,b1,b2,...' por classe), pronto para o 'library_csv' de spectral_library_matching."
              },
              "statistic": {
                "label": "Estatística",
                "description": "Redução ao longo das células cobertas: 'mean' (padrão), 'median', 'max', 'min'."
              },
              "trim_percent": {
                "label": "Percentual de aparamento",
                "description": "Porcentagem descartada de cada cauda por banda antes da redução, para suprimir os pixels mistos de borda (padrão 0, máximo 49)."
              },
              "min_cells": {
                "label": "Mínimo de células",
                "description": "As classes que cobrem menos células que isso são relatadas e ignoradas, em vez de emitir um 'espectro' de um único pixel (padrão 1)."
              },
              "wavelengths": {
                "label": "Comprimentos de onda",
                "description": "Comprimentos de onda opcionais por banda separados por vírgula, registrados como um cabeçalho de comentário na biblioteca e em output_stats."
              },
              "output_stats": {
                "label": "Estatísticas de saída",
                "description": "CSV opcional que recebe o desvio padrão e a contagem de células por classe e por banda. Mantido separado para que a biblioteca continue interpretável."
              }
            }
          },
          "extract_water_sar": {
            "name": "Extrair água (SAR)",
            "description": "Delineia a extensão de águas abertas e inundações a partir do retroespalhamento SAR com um limiar de Otsu por cena em decibéis, mais filtros opcionais de declividade do DEM e altura acima do mínimo que rejeitam sombra de radar e superfícies escuras secas (ArcGIS Extract Water). Nenhum dos registros consegue fazer isso a partir de radar: os NDWI/MNDWI de spectral_index precisam de bandas de reflectância verde/NIR/SWIR que um SAR não tem, depth_to_water modela onde a água deveria estar a partir do terreno em vez de observá-la, e um limiar de raster_calculator definido manualmente não se transfere entre cenas porque a divisão água/terra se move com o vento e o ângulo de incidência.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de retroespalhamento SAR."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de polígonos de água de saída. Se omitido, armazenado em memória."
              },
              "output_raster": {
                "label": "Raster de saída",
                "description": "Máscara binária de água de saída (1 água, 0 terra). Sempre produzida; armazenada em memória quando nenhum caminho é fornecido."
              },
              "dem": {
                "label": "DEM",
                "description": "DEM opcional, corregistrado com a entrada, que habilita os filtros de declividade e de altura."
              },
              "threshold_db": {
                "label": "Limiar (dB)",
                "description": "Limiar fixo em dB; as células iguais ou inferiores a ele são água. Substitui o limiar automático de Otsu."
              },
              "min_area": {
                "label": "Área mínima",
                "description": "Descartar os corpos d'água menores que esta área em unidades do mapa ao quadrado."
              },
              "max_slope": {
                "label": "Declividade máxima",
                "description": "Com um DEM, rejeitar a água em terreno com declividade superior a este número de graus (padrão 5). A água parada não pode ocupar uma encosta íngreme, mas a sombra de radar ali é igualmente escura."
              },
              "max_height_above_min": {
                "label": "Altura máxima acima do mínimo",
                "description": "Com um DEM, rejeitar as células candidatas situadas mais que este número de unidades z acima da célula de DEM mais baixa de sua própria região conectada."
              },
              "mask_features": {
                "label": "Feições de máscara",
                "description": "Camada de polígonos que restringe a área de análise."
              },
              "mask_type": {
                "label": "Tipo de máscara",
                "description": "'land_polygon' (padrão; analisa fora dos polígonos) ou 'water_polygon' (analisa dentro deles)."
              },
              "histogram_bins": {
                "label": "Classes do histograma",
                "description": "Intervalos usados no histograma de Otsu (padrão 256)."
              },
              "input_units": {
                "label": "Unidades de entrada",
                "description": "'intensity' (padrão), 'dn', 'amplitude' ou 'db'."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a limiarizar (padrão 1)."
              }
            }
          },
          "extrude_between": {
            "name": "Extrudar entre",
            "description": "Constrói sólidos fechados e estanques abrangendo o espaço entre duas superfícies dentro de cada polígono de entrada, com volumes exatos por feição (ArcGIS Extrude Between). cut_fill fornece a mudança de volume por célula entre dois rasters, mas emite um raster, não pode ser restrito a contornos e não carrega atributos; buffer_3d e minimum_bounding_volume constroem sólidos a partir de feições em vez de um par de superfícies. A saída alimenta diretamente union_3d, intersect_3d, difference_3d e inside_3d.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Contornos poligonais que definem a extensão lateral de cada sólido. Apenas o PRIMEIRO anel da primeira parte é usado: os buracos interiores e as partes adicionais de um MultiPolygon são ignorados, portanto divida os contornos multiparte e preencha os buracos antes de extrudar."
              },
              "surface_upper": {
                "label": "Superfície superior",
                "description": "Raster da superfície limitante superior."
              },
              "surface_lower": {
                "label": "Superfície inferior",
                "description": "Raster da superfície limitante inferior, corregistrado com a superior."
              },
              "output": {
                "label": "Saída",
                "description": "Feições de sólidos fechados (MultiPolygons de malha triangular com Z). Se omitido, armazenado em memória."
              },
              "sample_distance": {
                "label": "Distância de amostragem",
                "description": "Espaçamento de amostragem dos contornos e de densificação dos limites em unidades do CRS. Padrão: o menor tamanho de célula entre as superfícies."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler de cada raster de superfície (padrão 1)."
              }
            }
          },
          "feature_outline_masks": {
            "name": "Máscaras de contorno de feições",
            "description": "Gera polígonos de máscara cartográfica com uma margem ao redor das feições (contorno exato, envoltória convexa ou caixa delimitadora), opcionalmente recortados por uma segunda camada (Intersecting Layers Masks).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (qualquer geometria), com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "margin": {
                "label": "Margem",
                "description": "Distância da margem da máscara. Metros para um CRS geográfico (EPSG:4326 ou desconhecido, convertidos em graus), caso contrário nas unidades do CRS da camada. Deve ser positiva."
              },
              "mask_kind": {
                "label": "Tipo de máscara",
                "description": "Forma da máscara: 'exact' (padrão, contorno da feição com buffer), 'convex_hull' (envoltória convexa dilatada) ou 'box' (envelope delimitador + margem)."
              },
              "masked_layer": {
                "label": "Camada mascarada",
                "description": "Segunda camada de polígonos opcional. Quando fornecida, as máscaras são recortadas pela interseção com ela (Intersecting Layers Masks); as máscaras sem sobreposição são descartadas."
              },
              "id_field": {
                "label": "Campo de ID",
                "description": "Campo de origem opcional cujo valor é copiado para cada máscara como 'source_id'. O padrão é o índice da feição de origem."
              }
            }
          },
          "feature_to_line": {
            "name": "Feição para linha",
            "description": "Planariza feições de linhas/limites de polígonos em segmentos de linha com nós, não sobrepostos, divididos em cada interseção mútua e própria, como o ArcGIS Feature To Line — o precursor de construção de topologia que os polygons_to_lines e split_vector_lines incluídos não fornecem.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de linhas ou polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "cluster_tolerance": {
                "label": "Tolerância de agrupamento",
                "description": "Ajustar os pontos de divisão a esta grade em unidades do mapa para fundir os nós quase coincidentes (padrão 1e-9)."
              },
              "attributes": {
                "label": "Atributos",
                "description": "Quando verdadeiro (padrão), marca cada segmento de saída com 'src_fid', o identificador da feição de origem."
              }
            }
          },
          "feature_vertices_to_points": {
            "name": "Vértices de feição para pontos",
            "description": "Cria uma camada de pontos a partir de vértices selecionados das feições — ALL, START, END, BOTH_ENDS, MID (ponto médio do comprimento de arco) ou DANGLE (extremidades de linha não compartilhadas) — com um campo de FID pai, como o ArcGIS Feature Vertices To Points.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de linhas, polígonos ou pontos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "point_location": {
                "label": "Localização do ponto",
                "description": "Quais vértices extrair: ALL | START | END | BOTH_ENDS | MID | DANGLE. Padrão ALL."
              }
            }
          },
          "features_to_gpx": {
            "name": "Feições para GPX",
            "description": "Grava feições de pontos como waypoints GPX e feições de linhas como trilhas GPX, mapeando campos de atributo para nome/descrição/elevação/hora.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos ou linhas a exportar (assume-se WGS84 / EPSG:4326)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do arquivo .gpx de saída."
              },
              "name_field": {
                "label": "Campo de nome",
                "description": "Campo de atributo mapeado para o elemento <name> do GPX (opcional)."
              },
              "description_field": {
                "label": "Campo de descrição",
                "description": "Campo de atributo mapeado para o elemento <desc> do GPX (opcional)."
              },
              "z_field": {
                "label": "Campo Z",
                "description": "Campo de atributo mapeado para a elevação <ele> do GPX (opcional; recorre a um Z da geometria quando presente)."
              },
              "date_field": {
                "label": "Campo de data",
                "description": "Campo de atributo mapeado para o carimbo de tempo <time> do GPX, uma cadeia ISO-8601 (opcional)."
              }
            }
          },
          "features_to_gtfs": {
            "name": "Feições para GTFS",
            "description": "Exporta feições de pontos para o stops.txt do GTFS e feições de linhas para o shapes.txt do GTFS, fechando o ciclo de ida e volta do GTFS.",
            "params": {
              "stops_input": {
                "label": "Entrada de paradas",
                "description": "Camada vetorial de pontos a gravar como stops.txt (usa os campos de atributo stop_id/stop_name quando presentes)."
              },
              "shapes_input": {
                "label": "Entrada de formas",
                "description": "Camada vetorial de linhas a gravar como shapes.txt (usa um campo de atributo shape_id quando presente)."
              },
              "output_dir": {
                "label": "Diretório de saída",
                "description": "Diretório no qual os arquivos de texto GTFS (stops.txt / shapes.txt) são gravados. Criado se não existir."
              }
            }
          },
          "features_to_kml": {
            "name": "Feições para KML",
            "description": "Grava uma camada vetorial em um documento KML 2.2 (ou um KMZ compactado), com atributos como ExtendedData e um estilo compartilhado opcional (ArcGIS Layer To KML / Map To KML). kml_to_features já podia ler KML, mas nada o gravava, ao contrário dos pares simétricos GPX, GTFS e GeoParquet.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada. Deve estar em EPSG:4326 lon/lat, o único CRS que o KML define."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do arquivo .kml ou .kmz de saída."
              },
              "name_field": {
                "label": "Campo de nome",
                "description": "Atributo usado para o <name> de cada Placemark."
              },
              "description_field": {
                "label": "Campo de descrição",
                "description": "Atributo usado para <description>. Quando omitido, todos os atributos são gravados como <ExtendedData>."
              },
              "z_field": {
                "label": "Campo Z",
                "description": "Atributo que fornece uma elevação, gravada como a terceira coordenada."
              },
              "altitude_mode": {
                "label": "Modo de altitude",
                "description": "'clampToGround' (padrão), 'relativeToGround' ou 'absolute'."
              },
              "color": {
                "label": "Cor",
                "description": "Cor da linha/contorno em hexadecimal aabbggrr do KML (por exemplo, 'ff0000ff' para vermelho opaco)."
              },
              "line_width": {
                "label": "Largura da linha",
                "description": "Largura da linha em pixels (padrão 1.0)."
              },
              "fill_color": {
                "label": "Cor de preenchimento",
                "description": "Cor de preenchimento do polígono em hexadecimal aabbggrr do KML. Omita para não preencher."
              }
            }
          },
          "fence_diagram": {
            "name": "Diagrama de cerca",
            "description": "Gera painéis de seção vertical 3D onde um traçado de linha cruza uma pilha de superfícies — a forma padrão de visualizar a estratigrafia de subsuperfície ou a estratificação atmosférica (ArcGIS Fence Diagram). profile, long_profile e stack_profile amostram superfícies ao longo de uma linha, mas retornam linhas de perfil 2D ou tabelas, sem geometria para o espaço ENTRE superfícies consecutivas, e voxel_isosurface extrai uma superfície de nível de um volume em vez de uma seção.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições de linha que definem o traçado da seção."
              },
              "surfaces": {
                "label": "Superfícies",
                "description": "Lista separada por vírgula dos rasters de superfície corregistrados, ordenados do TOPO para a BASE."
              },
              "output": {
                "label": "Saída",
                "description": "Painéis de seção 3D, um por traçado e por par de superfícies. Se omitido, armazenado em memória."
              },
              "sample_distance": {
                "label": "Distância de amostragem",
                "description": "Espaçamento de amostragem ao longo do traçado em unidades do CRS. Padrão: o menor tamanho de célula entre as superfícies."
              },
              "floor_height": {
                "label": "Altura do piso",
                "description": "Limite inferior constante opcional: uma superfície de base sintética nesta elevação, fechando o painel mais profundo."
              },
              "ceiling_height": {
                "label": "Altura do teto",
                "description": "Limite superior constante opcional: uma superfície de topo sintética nesta elevação."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler de cada raster de superfície (padrão 1)."
              }
            }
          },
          "fill_missing_values": {
            "name": "Preencher valores faltantes",
            "description": "Estima e preenche valores nulos em um campo de atributo numérico usando vizinhos espaciais (k mais próximos ou uma banda de distância), opcionalmente restrito a uma janela temporal, com um estimador selecionável (mean/median/min/max/temporal_trend). As linhas imputadas são marcadas com um campo de sinalização (ArcGIS Fill Missing Values).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada com o campo a preencher."
              },
              "fill_field": {
                "label": "Campo de preenchimento",
                "description": "Campo numérico cujos valores nulos devem ser estimados e preenchidos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "estimator": {
                "label": "Estimador",
                "description": "Como combinar os valores dos vizinhos: 'mean' (padrão), 'median', 'min', 'max' ou 'temporal_trend' (mínimos quadrados ao longo do tempo; requer time_field)."
              },
              "neighbourhood": {
                "label": "Vizinhança",
                "description": "Seleção espacial: 'knn' (padrão, os k mais próximos) ou 'distance_band' (todos dentro de search_radius)."
              },
              "k": {
                "label": "K",
                "description": "Número de vizinhos mais próximos para 'knn' (padrão 8)."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio (unidades do CRS) para a seleção 'distance_band'."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo numérico opcional que fornece o tempo/ordem de cada feição (obrigatório para 'temporal_trend')."
              },
              "time_window": {
                "label": "Janela de tempo",
                "description": "Opcional: restringe os vizinhos àqueles situados dentro desta distância temporal do alvo (requer time_field)."
              },
              "flag_field": {
                "label": "Campo de sinalização",
                "description": "Nome do campo booleano que sinaliza as linhas imputadas (padrão 'imputed')."
              }
            }
          },
          "fill_spill_merge": {
            "name": "Fill-Spill-Merge",
            "description": "Roteia um volume finito de água superficial sobre um DEM para produzir extensões realistas de lagos/inundações (preenchimento parcial de depressões com extravasamento e mesclagem), reimplementando o Fill-Spill-Merge do RichDEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster do DEM de entrada (elevações)."
              },
              "water_level": {
                "label": "Nível da água",
                "description": "Profundidade uniforme da água superficial aplicada a cada célula. Forneça este ou 'surface_water'."
              },
              "surface_water": {
                "label": "Água superficial",
                "description": "Raster de profundidade da água superficial por célula (alinhado ao DEM). Substitui 'water_level' onde ambos são fornecidos."
              },
              "ocean_level": {
                "label": "Nível do oceano",
                "description": "Nível do mar opcional: as células com elevação igual ou inferior a este valor que se conectam à borda da grade tornam-se oceano (linha de base da inundação costeira)."
              },
              "edge_outlet": {
                "label": "Exutório de borda",
                "description": "Tratar cada célula da borda da grade como um exutório livre (padrão true). A água que chega à borda deixa o DEM."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de profundidade da água parada. Se omitido, armazenado em memória."
              },
              "water_surface": {
                "label": "Superfície da água",
                "description": "Caminho opcional de saída para a superfície hidráulica (DEM + profundidade da água)."
              },
              "flood_extent": {
                "label": "Extensão da inundação",
                "description": "Caminho opcional de saída para uma máscara de extensão da inundação (1 onde há água parada, senão 0)."
              }
            }
          },
          "find_argument_statistics": {
            "name": "Encontrar estatísticas de argumento",
            "description": "Estatísticas de argumento por pixel sobre uma pilha raster (como o ArcGIS Find Argument Statistics): o índice da fatia (ou data) do máximo/mínimo, a posição da mediana, a contagem de fatias além de um limiar (duração) ou a sequência consecutiva mais longa — as respostas de posição de argumento que os agregados de valor do cell-statistics e do image_stack_profile incluídos não conseguem dar.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Um raster multibanda (cada banda é uma fatia) ou uma lista de rasters corregistrados separada por vírgula, em ordem temporal."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de banda única de saída com os índices das fatias / datas / contagens. Se omitido, armazenado em memória."
              },
              "statistic": {
                "label": "Estatística",
                "description": "'argmax' (padrão), 'argmin', 'median_position', 'duration' ou 'longest_run'."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Limiar numérico para 'duration'/'longest_run' (obrigatório para esses métodos)."
              },
              "comparison": {
                "label": "Comparação",
                "description": "Comparação para 'duration'/'longest_run': '>' (padrão), '>=', '<' ou '<='."
              },
              "dates": {
                "label": "Datas",
                "description": "Datas numéricas opcionais separadas por vírgula (por exemplo, dia do ano) por fatia; argmax/argmin/median geram a data correspondente em vez do índice da fatia."
              },
              "min_valid": {
                "label": "Mínimo válido",
                "description": "Mínimo de observações não nodata por pixel (padrão 1)."
              }
            }
          },
          "find_dwell_locations": {
            "name": "Encontrar locais de permanência",
            "description": "Detecta onde uma entidade em movimento permaneceu parada: sequências de posições de trajeto dentro de uma tolerância de distância por pelo menos uma tolerância de tempo, emitidas como posições, centros médios ou envoltórias convexas, como o ArcGIS Find Dwell Locations.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições pontuais com carimbo de tempo (posições de trajeto)."
              },
              "track_field": {
                "label": "Campo de trajeto",
                "description": "Campo que identifica o trajeto ao qual cada posição pertence."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo de carimbo de tempo (segundos numéricos ou texto ISO-8601)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              },
              "distance_tolerance": {
                "label": "Tolerância de distância",
                "description": "Distância máxima (unidades do mapa) que uma posição pode ficar do centroide corrente da permanência."
              },
              "time_tolerance": {
                "label": "Tolerância de tempo",
                "description": "Duração mínima (mesmas unidades de time_field) para que uma sequência estacionária conte como permanência."
              },
              "output_type": {
                "label": "Tipo de saída",
                "description": "dwell_features (padrão) | mean_centers | convex_hulls | all_features."
              }
            }
          },
          "find_identical": {
            "name": "Encontrar idênticos",
            "description": "Encontra feições idênticas em geometria e/ou campos escolhidos, agrupando duplicatas; 'report' adiciona colunas dup_group/dup_seq, 'delete' mantém apenas a primeira de cada grupo, como o ArcGIS Find Identical / Delete Identical.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada a desduplicar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "fields": {
                "label": "Campos",
                "description": "Campos separados por vírgula a comparar. Omita para comparar apenas a geometria; combine com 'compare_geometry'."
              },
              "compare_geometry": {
                "label": "Comparar geometria",
                "description": "Se a geometria faz parte do teste de identidade (padrão true; defina como false para comparar apenas os campos)."
              },
              "xy_tolerance": {
                "label": "Tolerância XY",
                "description": "Tolerância de ajuste para a comparação de geometrias (os vértices são arredondados para esta grade antes do cálculo do hash). Padrão 0 (exato)."
              },
              "mode": {
                "label": "Modo",
                "description": "'report' (padrão; adiciona dup_group/dup_seq) ou 'delete' (mantém a primeira feição de cada grupo)."
              }
            }
          },
          "find_meeting_locations": {
            "name": "Encontrar locais de encontro",
            "description": "Detecta encontros em que vários trajetos distintos estão juntos dentro de uma distância por pelo menos uma duração mínima (como o ArcGIS Find Meeting Locations) — a coocorrência de N trajetos que os trace_proximity_events (par a par) e reconstruct_tracks (permanência de trajeto único) autorais não cobrem. Emite envoltórias de área e pontos representativos com contagem de participantes, hora de início/fim e duração.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos de trajeto com carimbo de tempo (CRS projetado; distâncias em unidades do mapa)."
              },
              "track_field": {
                "label": "Campo de trajeto",
                "description": "Campo que identifica cada trajeto/entidade."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo que contém o tempo de cada ponto: segundos numéricos ou um carimbo de tempo ISO-8601."
              },
              "search_distance": {
                "label": "Distância de busca",
                "description": "Distância máxima (unidades do mapa) para que os trajetos contem como estando juntos."
              },
              "min_meeting_duration": {
                "label": "Duração mínima do encontro",
                "description": "Duração mínima (unidades de tempo) que um encontro deve persistir para ser relatado."
              },
              "max_meeting_duration": {
                "label": "Duração máxima do encontro",
                "description": "Duração máxima opcional; os encontros mais longos são descartados."
              },
              "min_participants": {
                "label": "Mínimo de participantes",
                "description": "Número mínimo de trajetos distintos em um encontro (padrão 2)."
              },
              "time_step": {
                "label": "Passo de tempo",
                "description": "Duração de uma fatia de tempo (unidades de tempo). Padrão: min_meeting_duration."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de pontos representativos de saída (um ponto por encontro). Se omitido, armazenado em memória."
              },
              "output_area": {
                "label": "Saída de área",
                "description": "Camada de áreas de saída opcional (um polígono de envoltória convexa por encontro). Se omitido, armazenado em memória."
              }
            }
          },
          "find_space_time_matches": {
            "name": "Encontrar correspondências espaço-temporais",
            "description": "Faz a correspondência de feições entre duas camadas de pontos com carimbo de tempo que estejam dentro de uma distância de busca espacial E de uma janela de tempo uma da outra (antes/depois/qualquer), emitindo pares correspondidos com distância e diferença de tempo, como o ArcGIS Find Space Time Matches.",
            "params": {
              "primary": {
                "label": "Primário",
                "description": "Camada de pontos primária (cada feição é correspondida com a camada secundária)."
              },
              "secondary": {
                "label": "Secundário",
                "description": "Camada de pontos secundária com a qual fazer a correspondência."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo de carimbo de tempo presente em AMBAS as camadas (numérico ou ISO-8601)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de correspondências de saída (uma linha de ligação por par correspondido). Se omitido, armazenado em memória."
              },
              "search_distance": {
                "label": "Distância de busca",
                "description": "Distância espacial máxima entre uma feição primária e uma secundária (unidades do mapa)."
              },
              "time_window": {
                "label": "Janela de tempo",
                "description": "Separação temporal máxima: um número de segundos ou uma duração como '2h', '30m', '7d'."
              },
              "temporal_relationship": {
                "label": "Relação temporal",
                "description": "'either' (padrão), 'before' (a secundária antes da primária) ou 'after' (a secundária depois da primária)."
              },
              "primary_id_field": {
                "label": "Campo de ID primário",
                "description": "Campo que nomeia cada feição primária na saída (padrão: o índice da feição)."
              },
              "secondary_id_field": {
                "label": "Campo de ID secundário",
                "description": "Campo que nomeia cada feição secundária na saída (padrão: o índice da feição)."
              }
            }
          },
          "fit_variogram": {
            "name": "Ajustar modelo de variograma",
            "description": "Ajusta um modelo teórico de variograma (esférico, exponencial, gaussiano) aos dados do semivariograma empírico para uso em krigagem.",
            "params": {
              "lags_json": {
                "label": "JSON de defasagens",
                "description": "Matriz JSON de intervalos de defasagem produzida por estimate_variogram"
              },
              "model_family": {
                "label": "Família do modelo",
                "description": "Modelo: spherical, exponential ou gaussian"
              }
            }
          },
          "flatten_interferogram": {
            "name": "Aplanar interferograma",
            "description": "Remove a componente de fase topográfica de um interferograma dobrado usando um DEM e a linha de base interferométrica, deixando o sinal de deformação e atmosfera (o modo de achatamento TOPO do ArcGIS Generate Interferogram). sar_coherence já emite o próprio interferograma via output_phase, mas nada em nenhum dos registros consegue simular e subtrair a fase topográfica — e sobre qualquer relevo essa componente domina, de modo que um interferograma não achatado é inutilizável para trabalho de deformação.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de fase interferométrica envolvida em radianos (como o output_phase de sar_coherence emite), ou um interferograma I/Q de duas bandas."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster de elevação corregistrado."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de fase envolvida achatada, reenvolvida em (-pi, pi]. Se omitido, armazenado em memória."
              },
              "perpendicular_baseline": {
                "label": "Linha de base perpendicular",
                "description": "Linha de base perpendicular B_perp em metros. Obrigatória: ela define a sensibilidade altura-fase, e não há um valor padrão defensável."
              },
              "wavelength": {
                "label": "Comprimento de onda",
                "description": "Comprimento de onda do radar em metros (padrão 0.05546576, banda C do Sentinel-1)."
              },
              "incidence_angle": {
                "label": "Ângulo de incidência",
                "description": "Ângulo de incidência em graus: uma constante (padrão 39.0, típico do meio da faixa IW do Sentinel-1) ou o caminho de um raster corregistrado."
              },
              "slant_range": {
                "label": "Alcance inclinado",
                "description": "Alcance inclinado do sensor ao solo R em metros (padrão 800000)."
              },
              "reference_elevation": {
                "label": "Elevação de referência",
                "description": "Elevação tratada como fase topográfica zero. Padrão: a média do DEM, de modo que a saída não carregue um deslocamento global arbitrário."
              },
              "out_topographic_phase": {
                "label": "Fase topográfica de saída",
                "description": "Raster de fase topográfica simulada, ENVOLVIDA em (-pi, pi] como a saída achatada — não a fase simulada absoluta. Sempre produzido; recorre a um identificador em memória quando nenhum caminho é fornecido."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) que contém a fase. Omita-a para um raster de fase de banda única ou um interferograma I/Q de duas bandas (que é então detectado automaticamente); forneça-a para ler a fase real de uma banda específica de uma pilha multibanda. Um raster com mais de duas bandas EXIGE este parâmetro, porque três ou mais bandas não formam um par I/Q e adivinhar retornaria uma fase plausível, porém errada."
              }
            }
          },
          "flip_line": {
            "name": "Inverter linha",
            "description": "Inverte a ordem dos vértices (início↔fim) de feições de polilinha para inverter sua direção de digitalização.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de linhas de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              }
            }
          },
          "focal_flow": {
            "name": "Fluxo focal",
            "description": "Codifica quais dos oito vizinhos de uma célula fluem para ela como uma máscara de 8 bits (ArcGIS Focal Flow). Ao contrário das ferramentas de acumulação D8/D-infinito incluídas, que roteiam cada célula declive abaixo ao longo de uma direção, esta registra cada vizinho afluente — capturando a convergência em depressões, sumidouros e selas. Os pesos dos bits correm em sentido anti-horário a partir do leste (1, 2, 4, 8, 16, 32, 64, 128); 0 é um alto local, 255 uma depressão.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de superfície de entrada (elevação ou qualquer superfície contínua)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é armazenado em memória."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Um vizinho conta como afluente apenas se exceder a célula central em mais que este valor (padrão 0)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler (padrão 1)."
              }
            }
          },
          "focal_statistics": {
            "name": "Estatísticas focais",
            "description": "Estatísticas de vizinhança por janela móvel (retângulo/círculo/anel/cunha; numéricas e categóricas).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é armazenado em memória."
              },
              "statistics": {
                "label": "Estatísticas",
                "description": "Estatística: mean, majority, maximum, median, minimum, minority, percentile, range, std, sum ou variety (padrão mean)."
              },
              "neighborhood": {
                "label": "Vizinhança",
                "description": "Forma da vizinhança: rectangle, circle, annulus ou wedge (padrão rectangle)."
              },
              "width": {
                "label": "Largura",
                "description": "Largura do retângulo em células (padrão 3)."
              },
              "height": {
                "label": "Altura",
                "description": "Altura do retângulo em células (padrão 3)."
              },
              "radius": {
                "label": "Raio",
                "description": "Raio em células para circle / wedge, e o raio externo para annulus (padrão 1)."
              },
              "inner_radius": {
                "label": "Raio interno",
                "description": "Raio interno em células para a vizinhança annulus (padrão 0)."
              },
              "start_angle": {
                "label": "Ângulo inicial",
                "description": "Ângulo inicial da cunha em graus (0 = leste, sentido anti-horário; padrão 0)."
              },
              "end_angle": {
                "label": "Ângulo final",
                "description": "Ângulo final da cunha em graus (0 = leste, sentido anti-horário; padrão 90)."
              },
              "percentile_value": {
                "label": "Valor do percentil",
                "description": "Percentil em [0, 100] para a estatística de percentil (padrão 90)."
              },
              "ignore_nodata": {
                "label": "Ignorar nodata",
                "description": "Se verdadeiro (padrão), reduz apenas sobre as células válidas; se falso, qualquer célula nodata na janela produz nodata."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a processar (padrão 1)."
              }
            }
          },
          "forest_based_forecast": {
            "name": "Previsão baseada em florestas",
            "description": "Prevê um valor para frente em cada localização com uma floresta aleatória treinada em janelas deslizantes de defasagem do próprio histórico dessa localização, como o ArcGIS Forest-based Forecast.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições com carimbo de tempo que carregam um identificador de local, um campo de tempo e um campo de valor."
              },
              "location_field": {
                "label": "Campo de localização",
                "description": "Campo que identifica o local ao qual cada observação pertence."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo de tempo numérico usado para ordenar a série de cada local."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo numérico a prever."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional da tabela de previsões de saída. Se omitido, armazenado em memória."
              },
              "forecast_steps": {
                "label": "Passos de previsão",
                "description": "Número de passos a prever adiante (padrão 3)."
              },
              "time_window": {
                "label": "Janela de tempo",
                "description": "Número de valores anteriores usados como preditores (padrão: um quarto do comprimento da série, no mínimo 2)."
              },
              "validation_steps": {
                "label": "Passos de validação",
                "description": "Passos finais reservados para pontuar o RMSE (padrão 0, sem validação)."
              },
              "n_trees": {
                "label": "Número de árvores",
                "description": "Número de árvores da floresta (padrão 50, máximo 500)."
              },
              "min_leaf_size": {
                "label": "Tamanho mínimo da folha",
                "description": "Número mínimo de linhas de treinamento em uma folha (padrão 2)."
              },
              "max_depth": {
                "label": "Profundidade máxima",
                "description": "Profundidade máxima da árvore (padrão 8)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente do gerador de números aleatórios determinístico que conduz o bootstrapping e a seleção de subconjuntos de variáveis (padrão 42)."
              }
            }
          },
          "frequency_comparison": {
            "name": "Comparação de frequências",
            "description": "Conta, por célula, quantos rasters de uma pilha são iguais / maiores / menores que a célula correspondente de um raster de valores de referência (ArcGIS Equal To Frequency, Greater Than Frequency e Less Than Frequency, mais os operadores inclusivos e negados). Nenhum dos registros consegue agregar uma comparação ao longo de uma pilha: cell_statistics não tem entrada de referência, raster_calculator expressa uma comparação mas não consegue contar ao longo de uma pilha de comprimento arbitrário, e conditional_evaluation é um seletor de condição única.",
            "params": {
              "value_raster": {
                "label": "Raster de valores",
                "description": "Raster de referência com o qual cada camada da pilha é comparada, corregistrado com as entradas. Uma referência de banda única é replicada para cada grupo de bandas; uma referência multibanda deve ter uma banda por grupo e avança junto com ele."
              },
              "inputs": {
                "label": "Entradas",
                "description": "Um raster multibanda (cada banda é uma camada) ou uma lista de rasters corregistrados separada por vírgula."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de contagem de saída (0..n). Se omitido, armazenado em memória."
              },
              "comparison": {
                "label": "Comparação",
                "description": "'equal' (padrão), 'greater', 'less', 'greater_equal', 'less_equal' ou 'not_equal'."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Tolerância absoluta para 'equal'/'not_equal' em dados de ponto flutuante (padrão 0 = exato)."
              },
              "ignore_nodata": {
                "label": "Ignorar nodata",
                "description": "Ignorar as observações nodata por célula (padrão true). Quando falso, qualquer observação nodata torna a célula nodata."
              },
              "process_as_multiband": {
                "label": "Processar como multibanda",
                "description": "'single_band' (padrão): cada banda de cada entrada é uma camada de uma única pilha. 'multi_band': a banda i de cada entrada forma sua própria pilha, gerando um resultado multibanda."
              }
            }
          },
          "fuzzy_overlay": {
            "name": "Sobreposição difusa",
            "description": "Reescalona um raster para uma superfície de pertinência fuzzy 0..1 (linear/gaussian/small/large/ms_small/ms_large), ou combina várias superfícies de pertinência com AND/OR/PRODUCT/SUM/GAMMA fuzzy, como o ArcGIS Fuzzy Membership + Fuzzy Overlay.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Modo de pertinência: raster de entrada a transformar em uma superfície de 0 a 1."
              },
              "inputs": {
                "label": "Entradas",
                "description": "Modo de sobreposição: lista separada por vírgula de ≥2 rasters de pertinência a combinar. Tem precedência sobre 'input'."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída. Se omitido, o resultado é armazenado em memória."
              },
              "function": {
                "label": "Função",
                "description": "Função de pertinência: 'linear' (padrão), 'gaussian', 'small', 'large', 'ms_small', 'ms_large'."
              },
              "overlay": {
                "label": "Sobreposição",
                "description": "Operador de sobreposição: 'and' (mínimo, padrão), 'or' (máximo), 'product', 'sum', 'gamma'."
              },
              "midpoint": {
                "label": "Ponto médio",
                "description": "linear: o valor que mapeia para 0.5 é ignorado (use min/max); gaussian/small/large: o ponto médio da função; ms_small/ms_large: o multiplicador da média (padrão a partir das estatísticas da banda)."
              },
              "spread": {
                "label": "Dispersão",
                "description": "gaussian/small/large: dispersão (padrão 0.1 para gaussian, 5 para small/large); ms_small/ms_large: o multiplicador do desvio padrão (padrão 1)."
              },
              "min": {
                "label": "Mínimo",
                "description": "linear: o valor que mapeia para a pertinência 0 (padrão: o mínimo da banda). Se min>max, a rampa é decrescente."
              },
              "max": {
                "label": "Máximo",
                "description": "linear: o valor que mapeia para a pertinência 1 (padrão: o máximo da banda)."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Expoente gama da sobreposição em [0,1] (padrão 0.9)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a transformar no modo de pertinência (padrão 1)."
              }
            }
          },
          "gaussian_geostatistical_simulations": {
            "name": "Simulações geoestatísticas gaussianas",
            "description": "Simulação gaussiana sequencial: N realizações condicionais equiprováveis de um campo que respeitam os dados amostrais (como o ArcGIS Gaussian Geostatistical Simulations) — a saída condicional de múltiplas realizações que os empirical_bayesian_kriging / krigagem ordinária de superfície única e o turning_bands_simulation incondicional não fornecem. Com semente e determinístico.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos de entrada com os valores condicionantes (CRS projetado)."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo numérico que contém o valor a simular."
              },
              "output": {
                "label": "Saída",
                "description": "Raster multibanda de saída (uma banda por realização). Se omitido, armazenado em memória."
              },
              "num_realizations": {
                "label": "Número de realizações",
                "description": "Número de realizações / bandas de saída (padrão 10)."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do CRS. Padrão: o lado maior da extensão / 100."
              },
              "variogram_model": {
                "label": "Modelo de variograma",
                "description": "'exponential' (padrão), 'spherical' ou 'gaussian'."
              },
              "nugget": {
                "label": "Efeito pepita",
                "description": "Efeito pepita manual; omita para ajustá-lo a partir dos dados."
              },
              "sill": {
                "label": "Patamar",
                "description": "Patamar parcial manual; omita para ajustá-lo a partir dos dados."
              },
              "range": {
                "label": "Amplitude",
                "description": "Alcance manual; omita para ajustá-lo a partir dos dados."
              },
              "max_neighbors": {
                "label": "Máximo de vizinhos",
                "description": "Máximo de pontos conhecidos usados na krigagem de cada célula (padrão 16)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente para o gerador de números aleatórios determinístico (padrão 1)."
              },
              "output_mean": {
                "label": "Saída de média",
                "description": "Caminho opcional do raster da média do conjunto."
              },
              "output_std": {
                "label": "Saída de desvio padrão",
                "description": "Caminho opcional do raster do desvio padrão do conjunto."
              }
            }
          },
          "generalized_linear_regression": {
            "name": "Regressão linear generalizada",
            "description": "Regressão global (gaussiana/OLS, Poisson ou logística) de um campo dependente sobre campos explicativos via IRLS, com campos de saída ajustados + resíduos e diagnósticos completos: coeficiente por termo, erro padrão, t/z, probabilidade e VIF, mais AICc, R²/deviance e o teste de heterocedasticidade de Koenker estudentizado (Breusch–Pagan) — como o ArcGIS Generalized Linear Regression.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de feições de entrada (pontos ou outras geometrias — a geometria é repassada inalterada)."
              },
              "dependent_field": {
                "label": "Campo dependente",
                "description": "Campo numérico dependente (resposta). Para 'logistic', deve ser 0/1."
              },
              "explanatory_fields": {
                "label": "Campos explicativos",
                "description": "Campo(s) numérico(s) explicativo(s) separados por vírgula."
              },
              "family": {
                "label": "Família",
                "description": "Família do modelo: 'gaussian' (OLS, padrão), 'poisson' (função de ligação log, contagens) ou 'logistic' (função de ligação logit, 0/1)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "report": {
                "label": "Relatório",
                "description": "Caminho opcional do CSV para o relatório de coeficientes + diagnósticos do modelo."
              }
            }
          },
          "generate_breach_lines": {
            "name": "Gerar linhas de rompimento",
            "description": "Dados polígonos de depressões e um DEM, emite a polilinha ao longo da qual cada depressão seria rompida para drenar, usando um critério de custo mínimo de rompimento, caminho mais curto ou mudança mínima de elevação, com profundidade de corte e volume escavado por rompimento. Como o ArcGIS Generate Breach Lines.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Polígonos de depressões (por exemplo, a saída de delineate_depressions)."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster de superfície através do qual o rompimento é escavado."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho das linhas de rompimento de saída. Se omitido, armazenado em memória."
              },
              "connection_points": {
                "label": "Pontos de conexão",
                "description": "Feições pontuais opcionais que restringem onde um rompimento pode terminar."
              },
              "method": {
                "label": "Método",
                "description": "'minimum_breaching_cost' (padrão), 'shortest_path' ou 'minimum_elevation_change'."
              },
              "max_length": {
                "label": "Comprimento máximo",
                "description": "Descartar os rompimentos mais longos que isso (unidades do mapa); tais depressões ficam sem rompimento."
              }
            }
          },
          "generate_near_table": {
            "name": "Gerar tabela de proximidade",
            "description": "Para cada feição de entrada, lista as k feições mais próximas (ou todas dentro de um raio de busca) da camada de proximidade com distância, classificação, ângulo de rumo opcional e XY próximo — uma tabela de proximidade de múltiplos vizinhos, como o ArcGIS Generate Near Table.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (pontos, linhas ou polígonos) cuja proximidade é medida."
              },
              "near_features": {
                "label": "Feições próximas",
                "description": "Camada vetorial próxima na qual pesquisar (pontos, linhas ou polígonos)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída (um Point por correspondência próxima). Se omitido, armazenado em memória."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Manter apenas as feições próximas dentro desta distância (unidades do mapa). Obrigatório quando closest_count = 0 (todas dentro do raio)."
              },
              "closest_count": {
                "label": "Número de mais próximos",
                "description": "Número de feições próximas mais próximas por feição de entrada (k, padrão 1). Use 0 para retornar todas as feições próximas dentro de search_radius."
              },
              "angle": {
                "label": "Ângulo",
                "description": "Adicionar NEAR_ANGLE (rumo aritmético em graus, leste = 0, anti-horário). Padrão false."
              },
              "location": {
                "label": "Localização",
                "description": "Adicionar as colunas NEAR_X / NEAR_Y da localização próxima. Padrão false."
              }
            }
          },
          "generate_network_swm": {
            "name": "Gerar SWM da rede",
            "description": "Constrói uma matriz de pesos espaciais na qual vizinhos e pesos vêm da distância de deslocamento ao longo de uma rede de linhas em vez da geometria em linha reta (ArcGIS Generate Network Spatial Weights). generate_spatial_weights_matrix oferece apenas conceitualizações euclidianas e topológicas (knn, banda de distância fixa, inverso da distância, contiguidade, Delaunay), de modo que, para fenômenos restritos à rede, ele liga feições que não conseguem se alcançar e enviesa todas as estatísticas subsequentes. A saída usa o mesmo esquema de tabela, de modo que global_morans_i, local_morans_i_lisa, getis_ord_gi_star e compare_spatial_weights a consomem sem alteração.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições pontuais a ponderar."
              },
              "network": {
                "label": "Rede",
                "description": "Rede de linhas ao longo da qual as distâncias de percurso são medidas."
              },
              "output": {
                "label": "Saída",
                "description": "Tabela de pesos (CSV pela extensão, ou uma tabela vetorial sem geometria), no mesmo esquema origem/vizinho/peso que generate_spatial_weights_matrix emite. Se omitido, armazenado em memória."
              },
              "id_field": {
                "label": "Campo de ID",
                "description": "Campo que contém o identificador único de cada feição. Padrão: o índice da feição em base 0, correspondendo a generate_spatial_weights_matrix."
              },
              "impedance_field": {
                "label": "Campo de impedância",
                "description": "Campo de custo da rede. Padrão: o comprimento geométrico de cada segmento."
              },
              "distance_cutoff": {
                "label": "Corte de distância",
                "description": "Impedância máxima de rede em que um vizinho pode estar. Padrão: ilimitada."
              },
              "max_neighbors": {
                "label": "Máximo de vizinhos",
                "description": "Limite de vizinhos por origem, mantendo os mais próximos. Padrão: ilimitado."
              },
              "conceptualization": {
                "label": "Conceitualização",
                "description": "'fixed' (padrão, peso binário 1 dentro do corte) ou 'inverse' (peso = 1 / impedância^expoente)."
              },
              "exponent": {
                "label": "Expoente",
                "description": "Expoente de decaimento para 'inverse' (padrão 1)."
              },
              "row_standardization": {
                "label": "Padronização por linha",
                "description": "Dividir os pesos de cada origem pela soma de sua linha, de modo que cada origem some 1. Padrão false, correspondendo a generate_spatial_weights_matrix."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Distância dentro da qual dois vértices da rede são soldados em um único nó, em unidades do CRS (padrão 1e-6). Caso contrário, uma rede cujos segmentos quase se encontram se desconectaria silenciosamente, e cada origem afetada emitiria zero linhas."
              },
              "search_tolerance": {
                "label": "Tolerância de busca",
                "description": "Distância máxima de ajuste de um ponto até a rede. Os pontos mais distantes são relatados como não ajustados, em vez de serem silenciosamente vinculados a um nó distante."
              }
            }
          },
          "generate_od_links": {
            "name": "Gerar vínculos origem-destino",
            "description": "Desenha linhas de desejo retas de pontos de origem a pontos de destino — correspondidos por um ID compartilhado, dentro de uma distância e/ou aos k mais próximos — cada uma carregando os IDs de origem/destino e o comprimento, como o ArcGIS Generate Origin-Destination Links.",
            "params": {
              "origins": {
                "label": "Origens",
                "description": "Camada de pontos de origem (Point ou MultiPoint)."
              },
              "destinations": {
                "label": "Destinos",
                "description": "Camada de pontos de destino (Point ou MultiPoint)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "num_nearest": {
                "label": "Número de mais próximos",
                "description": "Manter apenas os k destinos mais próximos por origem (após qualquer filtro de identificador/distância)."
              },
              "search_distance": {
                "label": "Distância de busca",
                "description": "Manter apenas os destinos dentro desta distância da origem (unidades do mapa)."
              },
              "id_field": {
                "label": "Campo de ID",
                "description": "Campo presente em AMBAS as camadas; ligar apenas os pares cujos valores coincidem. Também gravado como 'link_id'."
              },
              "origin_id_field": {
                "label": "Campo de ID da origem",
                "description": "Campo nas origens a gravar como 'origin_id' (padrão: o índice da feição)."
              },
              "dest_id_field": {
                "label": "Campo de ID do destino",
                "description": "Campo nos destinos a gravar como 'dest_id' (padrão: o índice da feição)."
              }
            }
          },
          "generate_points_along_3d_lines": {
            "name": "Gerar pontos ao longo de linhas 3D",
            "description": "Gera pontos igualmente espaçados ao longo de linhas 3D medidos em distância 3D verdadeira (não o comprimento planimétrico 2D que o points_along_lines incluído usa), com Z interpolado, pontos de extremidade opcionais e um campo de quilometragem 3D acumulada. Como o ArcGIS Generate Points Along 3D Lines.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições de polilinhas 3D de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho dos pontos de saída. Se omitido, armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "'distance' (padrão), 'percentage' ou 'distance_field'."
              },
              "distance": {
                "label": "Distância",
                "description": "Espaçamento em unidades do mapa para o método 'distance'."
              },
              "percentage": {
                "label": "Percentagem",
                "description": "Espaçamento como uma porcentagem (0-100) do comprimento 3D de cada linha para o método 'percentage'."
              },
              "distance_field": {
                "label": "Campo de distância",
                "description": "Campo que fornece um espaçamento por feição para o método 'distance_field'."
              },
              "include_end_points": {
                "label": "Incluir pontos finais",
                "description": "Também emitir os vértices inicial e final de cada linha (padrão false)."
              },
              "add_chainage": {
                "label": "Adicionar quilometragem",
                "description": "Gravar um campo CHAINAGE com a distância 3D acumulada a partir do início da linha (padrão false)."
              }
            }
          },
          "generate_spatial_weights_matrix": {
            "name": "Gerar matriz de pesos espaciais",
            "description": "Emite uma tabela reutilizável de vizinhos/pesos em formato longo (origin_id, neighbor_id, weight) a partir de uma conceitualização escolhida — KNN, banda de distância fixa, inverso da distância, contiguidade (arestas / arestas+cantos) ou Delaunay — com padronização por linha opcional, como o ArcGIS Generate Spatial Weights Matrix.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (pontos/linhas/polígonos; a contiguidade exige polígonos)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho da tabela de saída — um CSV (extensão .csv) ou uma tabela vetorial sem geometria. Se omitido, armazenado em memória."
              },
              "id_field": {
                "label": "Campo de ID",
                "description": "Campo que contém o identificador único de cada feição. Padrão: o índice da feição em base 0."
              },
              "method": {
                "label": "Método",
                "description": "Conceitualização das relações espaciais: 'knn', 'fixed_distance_band', 'inverse_distance', 'contiguity_edges', 'contiguity_edges_corners' ou 'delaunay'. Padrão 'knn'."
              },
              "number_of_neighbors": {
                "label": "Número de vizinhos",
                "description": "Número de vizinhos mais próximos k (método = knn). Padrão 8."
              },
              "threshold_distance": {
                "label": "Distância limiar",
                "description": "Corte da banda de distância em unidades do mapa. Obrigatório para fixed_distance_band; corte opcional para inverse_distance (se não definido = todas as demais feições)."
              },
              "exponent": {
                "label": "Expoente",
                "description": "Expoente p de decaimento com a distância para inverse_distance (peso = 1/d^p). Padrão 1."
              },
              "row_standardization": {
                "label": "Padronização por linha",
                "description": "Dividir os pesos de cada origem pela soma de sua linha, de modo que os pesos de cada origem somem 1. Padrão false."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Quantizar os vértices em uma grade deste tamanho (unidades do CRS) antes de fazer a correspondência dos limites para a contiguidade. Padrão 0 (coordenadas exatas)."
              }
            }
          },
          "generate_subset_polygons": {
            "name": "Gerar polígonos de subconjunto",
            "description": "Particiona uma camada de pontos densa em polígonos compactos e não sobrepostos que ladrilham a extensão dos pontos, cada um contendo entre um número mínimo e máximo de pontos (ArcGIS Generate Subset Polygons). O passo padrão de pré-processamento para interpolar conjuntos de pontos muito grandes. Ao contrário das grades fixas incluídas, adapta-se à densidade (divisão k-d pela mediana); ao contrário de voronoi_diagram, agrupa pontos em vez de criar uma célula para cada um; e ao contrário de group_by_proximity, emite polígonos e respeita limites de tamanho.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional dos polígonos de saída. Se omitido, o resultado é armazenado em memória."
              },
              "output_points": {
                "label": "Saída de pontos",
                "description": "Caminho opcional para os pontos de entrada marcados com o identificador de seu subconjunto. Se omitido, armazenado em memória (ainda assim é retornado)."
              },
              "min_points_per_subset": {
                "label": "Mínimo de pontos por subconjunto",
                "description": "Limite inferior de pontos por subconjunto (padrão 50)."
              },
              "max_points_per_subset": {
                "label": "Máximo de pontos por subconjunto",
                "description": "Limite superior de pontos por subconjunto (padrão 200)."
              },
              "coincident_points": {
                "label": "Pontos coincidentes",
                "description": "'single' (padrão; os pontos exatamente coincidentes contam uma única vez no dimensionamento) ou 'all' (cada um conta individualmente)."
              },
              "clip_to_hull": {
                "label": "Recortar pela envoltória",
                "description": "Recortar os polígonos de subconjunto pela envoltória convexa dos pontos, de modo que o resultado se ajuste aos dados em vez de à sua caixa delimitadora (padrão true)."
              }
            }
          },
          "generate_transects_along_lines": {
            "name": "Gerar transectos ao longo de linhas",
            "description": "Percorre cada linha em um intervalo fixo e emite linhas de transecto perpendiculares de um dado comprimento (centradas ou deslocadas), para amostragem de mudança de linha de costa, ripária e de seções transversais — como o ArcGIS Generate Transects Along Lines.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de linhas de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "interval": {
                "label": "Intervalo",
                "description": "Espaçamento entre os transectos ao longo de cada linha, em unidades do CRS. Obrigatório."
              },
              "length": {
                "label": "Comprimento",
                "description": "Comprimento total do transecto, em unidades do CRS. Obrigatório."
              },
              "offset": {
                "label": "Deslocamento",
                "description": "Deslocamento com sinal do centro do transecto em relação à linha, em unidades do CRS (0 = centrado; +/- desloca para a esquerda/direita). Padrão 0."
              },
              "include_ends": {
                "label": "Incluir extremidades",
                "description": "Também posicionar um transecto exatamente no início e no fim de cada linha. Padrão false."
              }
            }
          },
          "generate_trend_raster": {
            "name": "Gerar raster de tendência",
            "description": "Ajusta uma tendência temporal por pixel ao longo de uma série temporal de rasters corregistrados (como o ArcGIS Generate Trend Raster): declividade/intercepto/R² por OLS ou Mann-Kendall não paramétrico + declividade de Sen com valor-p — a tendência temporal por pixel que os trend_surface (espacial) e change_vector_analysis (duas datas) incluídos não conseguem produzir.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Lista separada por vírgula dos caminhos dos rasters de banda única corregistrados, em ordem temporal (>= 3)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de declividade de saída (declividade de Sen para mann_kendall). Se omitido, armazenado em memória."
              },
              "times": {
                "label": "Tempos",
                "description": "Tempos numéricos separados por vírgula (por exemplo, anos) correspondentes a 'inputs'. Padrão 0,1,2,..."
              },
              "method": {
                "label": "Método",
                "description": "'linear' (OLS; padrão) ou 'mann_kendall' (não paramétrico + declividade de Sen)."
              },
              "intercept_output": {
                "label": "Saída de intercepto",
                "description": "Apenas linear: raster de saída opcional do intercepto do OLS."
              },
              "significance_output": {
                "label": "Saída de significância",
                "description": "Raster de saída opcional: R² (linear) ou o valor-p bilateral de Mann-Kendall (mann_kendall)."
              },
              "min_valid": {
                "label": "Mínimo válido",
                "description": "Mínimo de observações não nodata por pixel (padrão 3)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler de cada entrada (padrão 1)."
              }
            }
          },
          "geodetic_densify": {
            "name": "Densificar geodesicamente",
            "description": "Insere vértices ao longo do caminho geodésico verdadeiro ou loxodrômico (rumo constante) entre vértices existentes de uma camada de linhas ou polígonos geográficos (lon/lat), como o Geodetic Densify do ArcGIS — para que segmentos longos sigam a curvatura da Terra em vez de uma corda planar.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de linhas ou polígonos de entrada, assumida como geográfica (lon/lat, no estilo EPSG:4326)."
              },
              "geodetic_type": {
                "label": "Tipo geodésico",
                "description": "Tipo de caminho entre os vértices: 'geodesic' (padrão; caminho mais curto sobre o elipsoide WGS84) ou 'rhumb'/'loxodrome' (rumo verdadeiro constante)."
              },
              "max_segment_length": {
                "label": "Comprimento máximo do segmento",
                "description": "Espaçamento máximo desejado, em metros, entre vértices consecutivos após a densificação. Deve ser fornecido exatamente um entre max_segment_length / vertices_per_segment."
              },
              "vertices_per_segment": {
                "label": "Vértices por segmento",
                "description": "Alternativa a max_segment_length: insere exatamente este número de vértices igualmente espaçados em cada segmento original, independentemente de seu comprimento. Deve ser fornecido exatamente um entre max_segment_length / vertices_per_segment."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída; se omitido, armazenado em memória."
              }
            }
          },
          "geotagged_photos_to_points": {
            "name": "Fotos geoetiquetadas para pontos",
            "description": "Lê uma pasta de fotos com geotag e constrói uma camada de pontos WGS-84 com o caminho de cada foto, data e hora de captura, altitude, rumo da câmera (direção GPS da imagem) e fabricante/modelo — analisados apenas a partir dos metadados EXIF (nenhum pixel decodificado), como o ArcGIS GeoTagged Photos To Points.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho da pasta que contém as fotos (JPEG/TIFF) das quais ler os metadados GPS EXIF."
              },
              "output": {
                "label": "Saída",
                "description": "Vetor de pontos de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "recursive": {
                "label": "Recursivo",
                "description": "Descer para as subpastas ao procurar as fotos. Padrão false."
              },
              "only_geotagged": {
                "label": "Apenas com geotag",
                "description": "Ignorar as imagens que não carregam posição GPS (padrão true). Quando falso, as imagens sem geotag são emitidas com geometria nula."
              }
            }
          },
          "getis_ord_general_g": {
            "name": "Agrupamento alto/baixo (G geral de Getis-Ord)",
            "description": "Calcula a estatística G geral global de Getis-Ord — um único escore z e valor-p que informam se valores ALTOS ou BAIXOS estão globalmente agrupados, como o ArcGIS High/Low Clustering (Getis-Ord General G).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada. Os pontos usam suas coordenadas; as demais geometrias usam seu ponto representativo, a média dos vértices (os pesos de contiguidade exigem polígonos)."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numérico e não negativo a testar quanto ao agrupamento de valores altos/baixos."
              },
              "weights": {
                "label": "Pesos",
                "description": "Esquema de pesos espaciais: 'distance_band' (padrão), 'k_nearest', 'queen' ou 'rook'."
              },
              "distance_band": {
                "label": "Banda de distância",
                "description": "Distância de limiar (unidades do CRS) para o esquema 'distance_band'. Padrão: a maior distância ao vizinho mais próximo (cada feição tem >=1 vizinho)."
              },
              "k": {
                "label": "K",
                "description": "Número de vizinhos para o esquema 'k_nearest' (padrão 8)."
              },
              "row_standardize": {
                "label": "Padronizar por linha",
                "description": "Padronizar por linha a matriz de pesos, de modo que cada linha some 1 (padrão false)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do CSV para o relatório de uma linha. Sempre retornado no resultado."
              }
            }
          },
          "goldstein_phase_filter": {
            "name": "Filtro de fase de Goldstein",
            "description": "Filtragem espectral adaptativa (Goldstein) da fase SAR interferométrica, o passo que torna viável o desdobramento de fase (ArcGIS Apply Complex Data Filter). O unwrap_phase da rodada 17 falha em um interferograma bruto porque resíduos de ruído forçam cortes de ramo; toda a família de filtros lee/frost/kuan/wiener/gaussian incluída trabalha com intensidade de valor real e não pode ser usada aqui, pois calcular a média da fase dobrada através da descontinuidade de +/-pi a destrói. Filtra o sinal complexo patch por patch no domínio da frequência e relata a contagem de resíduos antes e depois.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Interferograma: um raster I/Q de duas bandas, ou um raster de fase envolvida de banda única em radianos (assume-se amplitude unitária)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster complexo filtrado de saída com duas bandas (I, Q). Se omitido, armazenado em memória."
              },
              "output_phase": {
                "label": "Saída de fase",
                "description": "Fase envolvida filtrada de saída em banda única, em radianos, no intervalo (-pi, pi]. Sempre produzida; armazenada em memória quando nenhum caminho é fornecido."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Intensidade do filtro em [0, 1] (padrão 0.5). 0 deixa a fase intacta; 1 é o máximo de agressividade."
              },
              "outer_window_size": {
                "label": "Tamanho da janela externa",
                "description": "Tamanho do bloco da FFT em células (padrão 32). Arredondado para cima até uma potência de dois."
              },
              "inner_window_size": {
                "label": "Tamanho da janela interna",
                "description": "Passo entre blocos em células (padrão = externo/4). Valores menores significam mais sobreposição e uma mesclagem mais suave; não pode exceder a janela externa."
              },
              "spectrum_smoothing": {
                "label": "Suavização do espectro",
                "description": "Largura, em intervalos, da média móvel aplicada ao espectro do bloco antes da exponenciação (padrão 3, deve ser ímpar)."
              }
            }
          },
          "gpx_to_features": {
            "name": "GPX para feições",
            "description": "Analisa um arquivo GPX em pontos de waypoint e/ou polilinhas de trilha/rota, carregando ele/time/name.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho de um arquivo .gpx (XML do GPS Exchange Format)."
              },
              "points_output": {
                "label": "Saída de pontos",
                "description": "Caminho opcional do vetor de pontos de saída para os waypoints (driver a partir de sua extensão). Se nenhuma das saídas for fornecida, os waypoints são armazenados em memória."
              },
              "lines_output": {
                "label": "Saída de linhas",
                "description": "Caminho opcional do vetor de linhas de saída para as trilhas e rotas (driver a partir de sua extensão)."
              }
            }
          },
          "graphic_buffer": {
            "name": "Buffer gráfico",
            "description": "Gera buffers de feições com escolha de estilos de extremidade (round/square/butt) e de junção de cantos (round/miter/bevel), com um limite de mitra — a geometria de buffer quadrada/mitrada que buffers apenas arredondados não conseguem produzir.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de entrada, formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "distance": {
                "label": "Distância",
                "description": "Distância do buffer nas unidades do CRS da camada. Deve ser positiva."
              },
              "cap": {
                "label": "Extremidade",
                "description": "Estilo das extremidades das linhas/pontos: 'round' (padrão), 'square' ou 'butt' (alias 'flat')."
              },
              "join": {
                "label": "Junção",
                "description": "Estilo de junção dos cantos: 'round' (padrão), 'miter' ou 'bevel'."
              },
              "miter_limit": {
                "label": "Limite de mitra",
                "description": "Razão entre o comprimento da esquadria e a distância do buffer acima da qual um canto em esquadria é chanfrado (padrão 10 no ArcGIS/JTS). Deve ser >= 1. Usado apenas quando join='miter'."
              },
              "dissolve": {
                "label": "Dissolver",
                "description": "Quando verdadeiro, une todos os buffers em uma única feição (multi)poligonal dissolvida. Padrão false (um buffer por feição de entrada, atributos preservados)."
              }
            }
          },
          "greater_than_or_equal_to": {
            "name": "MaiorOuIgualA",
            "description": "Testa se o primeiro raster é maior ou igual ao segundo, célula por célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "grid_index_features": {
            "name": "Feições de índice de grade",
            "description": "Constrói uma grade de índice de série de mapas com retângulos do tamanho da página, nomes de página (A1, B3, ... ou sequenciais), dimensionamento derivado da escala e um filtro opcional de interseção com dados — como o ArcGIS Grid Index Features, mais um modo de faixa que segue uma rota com páginas rotacionadas como o ArcGIS Strip Map Index Features.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada. Fornece a extensão quando nenhuma extensão explícita é dada, a rota no modo de faixa e as feições testadas por intersect_only."
              },
              "output": {
                "label": "Saída",
                "description": "Vetor de polígonos de saída com as páginas do índice (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "mode": {
                "label": "Modo",
                "description": "grid (padrão): ladrilha uma extensão retangular. strip: acompanha uma linha de rota com páginas rotacionadas e sobrepostas."
              },
              "x_min": {
                "label": "X mínimo",
                "description": "X mínimo explícito da extensão (unidades do CRS). Forneça os quatro valores x_min/y_min/x_max/y_max para substituir a extensão da entrada."
              },
              "y_min": {
                "label": "Y mínimo",
                "description": "Y mínimo explícito da extensão (unidades do CRS)."
              },
              "x_max": {
                "label": "X máximo",
                "description": "X máximo explícito da extensão (unidades do CRS)."
              },
              "y_max": {
                "label": "Y máximo",
                "description": "Y máximo explícito da extensão (unidades do CRS)."
              },
              "tile_width": {
                "label": "Largura do ladrilho",
                "description": "Largura da página em unidades do CRS. Forneça tile_width e tile_height, ou use page_size + map_scale."
              },
              "tile_height": {
                "label": "Altura do ladrilho",
                "description": "Altura da página em unidades do CRS (comprimento da página ao longo da rota no modo de faixa)."
              },
              "page_size": {
                "label": "Tamanho da página",
                "description": "Formato de papel predefinido (a0..a4, letter, legal, tabloid) cujas dimensões métricas são multiplicadas por map_scale para dimensionar cada página. Requer map_scale."
              },
              "map_scale": {
                "label": "Escala do mapa",
                "description": "Denominador da escala do mapa (por exemplo, 24000 para 1:24.000). Com page_size, o tamanho do ladrilho = metros de papel × map_scale (assume-se um CRS métrico)."
              },
              "origin_x": {
                "label": "Origem X",
                "description": "X da origem da grade à qual os limites dos ladrilhos se alinham. Padrão: o X mínimo da extensão."
              },
              "origin_y": {
                "label": "Origem Y",
                "description": "Y da origem da grade à qual os limites dos ladrilhos se alinham. Padrão: o Y mínimo da extensão."
              },
              "naming": {
                "label": "Nomenclatura",
                "description": "Esquema de nomenclatura das páginas: alphanumeric (padrão; letra da coluna + número da linha, por exemplo A1) ou sequential (número na ordem de leitura)."
              },
              "intersect_only": {
                "label": "Apenas interseção",
                "description": "Quando verdadeiro, descarta as páginas que não intersectam nenhuma feição de entrada. Requer input. Padrão false."
              },
              "route": {
                "label": "Rota",
                "description": "Modo de faixa: camada vetorial de linhas a seguir. O padrão é a primeira feição de linha em input."
              },
              "overlap": {
                "label": "Sobreposição",
                "description": "Modo de faixa: fração [0,1) em que as páginas consecutivas se sobrepõem ao longo da rota. Padrão 0.05."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Código EPSG de saída quando a extensão é fornecida explicitamente e não há camada de entrada da qual herdar um CRS."
              }
            }
          },
          "group_by_proximity": {
            "name": "Agrupar por proximidade",
            "description": "Marca feições com um GROUP_ID para componentes conectados espaciais de ligação simples — feições dentro de uma distância ('near') ou que se tocam ('intersects'), opcionalmente compartilhando um valor de atributo — como o ArcGIS Group By Proximity.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (qualquer tipo de geometria)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "relationship": {
                "label": "Relação",
                "description": "'near' (dentro de 'spatial_near_distance', padrão) ou 'intersects' (em contato, distância 0)."
              },
              "spatial_near_distance": {
                "label": "Distância de proximidade espacial",
                "description": "Distância de busca em unidades do mapa para 'near' (padrão 0)."
              },
              "attribute_field": {
                "label": "Campo de atributo",
                "description": "Campo opcional; as feições só são agrupadas quando compartilham este valor de atributo."
              },
              "group_field": {
                "label": "Campo de agrupamento",
                "description": "Nome do campo de identificador de grupo de saída (padrão 'GROUP_ID')."
              }
            }
          },
          "gtfs_to_features": {
            "name": "GTFS para feições",
            "description": "Analisa um feed de transporte público GTFS em pontos de paradas e linhas de rotas, opcionalmente com contagens de frequência de serviço por parada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho de um diretório de feed GTFS extraído (pasta com arquivos *.txt: stops.txt, shapes.txt, trips.txt, ...)."
              },
              "stops_output": {
                "label": "Saída de paradas",
                "description": "Caminho opcional do vetor de pontos de saída para as paradas (driver a partir de sua extensão). Se nenhuma das saídas for fornecida, as paradas são armazenadas em memória."
              },
              "shapes_output": {
                "label": "Saída de formas",
                "description": "Caminho opcional do vetor de linhas de saída para as geometrias das rotas (driver a partir de sua extensão)."
              },
              "frequency": {
                "label": "Frequência",
                "description": "Quando verdadeiro, conta as partidas programadas de cada parada em stop_times.txt e as grava em um campo n_departures. Padrão false."
              },
              "start_time": {
                "label": "Hora de início",
                "description": "Limite inferior opcional HH:MM:SS para a janela de frequência (os horários GTFS podem ultrapassar 24:00:00)."
              },
              "end_time": {
                "label": "Hora final",
                "description": "Limite superior opcional HH:MM:SS para a janela de frequência."
              }
            }
          },
          "h3_polyfill": {
            "name": "Preenchimento de polígonos H3",
            "description": "Cobre os polígonos de entrada com células da grade global discreta H3 em uma resolução escolhida.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de polígonos de entrada (deve ser geográfico lon/lat, EPSG:4326) ou identificador em memória."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída; o driver é obtido de sua extensão (.geojson, .fgb, .parquet, ...). Se omitido, a camada é armazenada em memória."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Resolução H3 de 0 (mais grosseira) a 15 (mais fina); padrão 8 (células de ~0,7 km²)."
              }
            }
          },
          "h3_to_vector": {
            "name": "Células H3 para polígonos",
            "description": "Transforma uma coluna de IDs de células H3 em polígonos de limite de célula, copiando os demais atributos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de entrada (ou identificador em memória) com um campo de identificadores de células H3."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída; o driver é obtido de sua extensão (.geojson, .fgb, .parquet, ...). Se omitido, a camada é armazenada em memória."
              },
              "field": {
                "label": "Campo",
                "description": "Nome do campo de texto que contém o identificador da célula H3; padrão 'h3'."
              }
            }
          },
          "hdbscan": {
            "name": "Agrupamento HDBSCAN",
            "description": "Agrupamento hierárquico baseado em densidade (HDBSCAN*): MST de alcançabilidade mútua, árvore condensada de agrupamentos e seleção por excesso de massa, com probabilidade de pertinência e pontuação de outlier por ponto — lida com densidade variável sem epsilon, como a opção HDBSCAN do ArcGIS Density-based Clustering.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada (CRS projetado; distâncias nas suas unidades)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (uma cópia da entrada com os campos de agrupamento). Se omitido, armazenado em memória."
              },
              "min_cluster_size": {
                "label": "Tamanho mínimo do agrupamento",
                "description": "Menor agrupamento considerado um cluster (>= 2). Padrão 5."
              },
              "min_samples": {
                "label": "Mínimo de amostras",
                "description": "Tamanho da vizinhança para a estimativa de densidade da distância central (valores maiores classificam mais pontos como ruído). Padrão: min_cluster_size."
              }
            }
          },
          "hot_spot_analysis_comparison": {
            "name": "Comparação de análises de pontos quentes",
            "description": "Compara duas camadas de resultados de hotspots de Getis-Ord: faz a correspondência de suas localizações, classifica cada transição (hot_to_hot, hot_to_cold, none_to_hot, ...) e executa um teste de permutação com semente da concordância geral — como o ArcGIS Hot Spot Analysis Comparison.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeira camada de resultados de hotspots (pontos ou polígonos)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segunda camada de resultados de hotspots."
              },
              "bin_field": {
                "label": "Campo de classe",
                "description": "Campo de significância presente em ambas as entradas (positivo = quente, negativo = frio)."
              },
              "significance": {
                "label": "Significância",
                "description": "Limiar de valor absoluto abaixo do qual uma localização é 'none' (padrão 0)."
              },
              "match_field": {
                "label": "Campo de correspondência",
                "description": "Campo de identificador opcional presente em ambas as entradas, usado para unir as localizações; caso contrário, usa-se o centroide mais próximo."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Distância máxima entre centroides para a correspondência pela localização mais próxima (unidades do mapa). Ilimitada se omitida."
              },
              "permutations": {
                "label": "Permutações",
                "description": "Número de permutações para o teste global de concordância (padrão 499)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente do gerador de números aleatórios determinístico das permutações (padrão 1)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              }
            }
          },
          "identify_narrow_polygons": {
            "name": "Identificar polígonos estreitos",
            "description": "Sinaliza polígonos que são mais estreitos do que uma tolerância de largura em algum ponto (fragmentos e gargalos finos), anotando cada um com um indicador is_narrow e uma largura mínima estimada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de polígonos de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "width_tolerance": {
                "label": "Tolerância de largura",
                "description": "Limiar de largura em unidades do CRS. Um polígono é estreito onde é mais fino que este valor. Obrigatório."
              },
              "min_narrow_area": {
                "label": "Área estreita mínima",
                "description": "Área mínima da porção estreita (unidades do CRS ao quadrado) exigida para sinalizar um polígono; as áreas estreitas menores são ignoradas como ruído. Padrão: width_tolerance ao quadrado, o que também absorve o pequeno arredondamento de cantos da abertura."
              },
              "narrow_only": {
                "label": "Apenas estreitos",
                "description": "Quando verdadeiro, descarta as feições não estreitas e gera apenas os polígonos estreitos sinalizados. Padrão false (anota e mantém todas as feições)."
              }
            }
          },
          "idw_3d": {
            "name": "IDW 3D",
            "description": "Interpolação volumétrica por inverso da distância de observações pontuais 3D em uma pilha de níveis de elevação (uma banda raster por nível), com um fator de inflação de elevação que trata a anisotropia vertical versus horizontal e pontos opcionais de validação cruzada leave-one-out. Como o ArcGIS IDW3D.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições pontuais 3D de entrada."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo numérico que contém o valor a interpolar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster multibanda de saída (uma banda por nível de elevação). Se omitido, armazenado em memória."
              },
              "z_field": {
                "label": "Campo Z",
                "description": "Campo que fornece a elevação; o padrão é o Z da geometria."
              },
              "power": {
                "label": "Potência",
                "description": "Expoente do inverso da distância (padrão 2)."
              },
              "elev_inflation_factor": {
                "label": "Fator de inflação de elevação",
                "description": "Multiplicador aplicado à separação vertical antes do cálculo da distância 3D (padrão 1). Valores > 1 fazem a distância vertical contar mais, correspondendo à menor escala de correlação vertical da maioria dos dados volumétricos."
              },
              "x_spacing": {
                "label": "Espaçamento X",
                "description": "Tamanho da célula de saída em X (padrão: extensão / 100)."
              },
              "y_spacing": {
                "label": "Espaçamento Y",
                "description": "Tamanho da célula de saída em Y (padrão: o mesmo de x_spacing)."
              },
              "z_spacing": {
                "label": "Espaçamento Z",
                "description": "Espaçamento vertical entre os níveis de saída (padrão: amplitude de z / 10)."
              },
              "z_min": {
                "label": "Z mínimo",
                "description": "Nível de saída mais baixo (padrão: o mínimo dos dados)."
              },
              "z_max": {
                "label": "Z máximo",
                "description": "Nível de saída mais alto (padrão: o máximo dos dados)."
              },
              "neighbors": {
                "label": "Vizinhos",
                "description": "Máximo de amostras por predição (padrão 12)."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Distância de busca 3D (inflada) máxima opcional; as amostras além dela são ignoradas."
              },
              "output_cv_features": {
                "label": "Saída de feições de validação cruzada",
                "description": "Caminho opcional para os pontos de validação cruzada leave-one-out, que carregam os valores observado, previsto e residual."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Código EPSG gravado no raster de saída (padrão: o CRS da camada de entrada)."
              }
            }
          },
          "incremental_spatial_autocorrelation": {
            "name": "Autocorrelação espacial incremental",
            "description": "Calcula o I de Moran global ao longo de uma série de bandas de distância crescentes e relata a curva de escore z com seus primeiro e máximo picos — a forma defensável de escolher uma distância de agrupamento, como o ArcGIS Incremental Spatial Autocorrelation.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada (as demais geometrias usam seu ponto representativo, a média dos vértices). Use um CRS projetado."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numérico a testar quanto à autocorrelação espacial."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do CSV para a tabela por banda. Sempre retornada no resultado."
              },
              "begin_distance": {
                "label": "Distância inicial",
                "description": "Distância da primeira banda, em unidades do CRS. Padrão: a maior distância ao vizinho mais próximo (cada feição tem >=1 vizinho)."
              },
              "increment": {
                "label": "Incremento",
                "description": "Distância adicionada em cada banda, em unidades do CRS. Padrão: a distância inicial."
              },
              "num_bands": {
                "label": "Número de bandas",
                "description": "Número de bandas de distância a avaliar (padrão 10)."
              }
            }
          },
          "inside_3d": {
            "name": "Dentro em 3D",
            "description": "Determina quais feições 3D (pontos, polilinhas ou sólidos) estão dentro de contêineres volumétricos fechados, opcionalmente relatando o comprimento contido ou a fração de vértices (ArcGIS Inside 3D). Todo predicado de contenção em qualquer dos registros projeta para o plano XY, de modo que um sensor acima de um contorno ou um duto sob uma parcela atualmente testa como dentro dela. Os contêineres seguem a convenção de malha triangular dos buffer_3d e minimum_bounding_volume disponíveis.",
            "params": {
              "target": {
                "label": "Alvo",
                "description": "Feições 3D a testar: pontos, polilinhas ou sólidos de malha triangular."
              },
              "container": {
                "label": "Contêiner",
                "description": "Feições 3D fechadas (sólidos de malha triangular) que atuam como contêineres."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional da tabela de saída com os pares alvo/contêiner. Se omitido, armazenado em memória."
              },
              "mode": {
                "label": "Modo",
                "description": "'simple' (padrão) relata se o alvo está dentro; 'complex' acrescenta o comprimento contido e a fração interna."
              },
              "output_features": {
                "label": "Feições de saída",
                "description": "Caminho opcional para as porções internas recortadas dos alvos de linha (modo complex). Se omitido, armazenado em memória (ainda assim é retornado)."
              }
            }
          },
          "integrate": {
            "name": "Integrar",
            "description": "Ajusta todos os vértices de todas as feições dentro de uma tolerância de agrupamento a uma localização compartilhada, de modo que limites compartilhados quase coincidentes se tornem exatamente coincidentes, opcionalmente inserindo vértices de junção em T nas arestas próximas — como o ArcGIS Integrate.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (qualquer tipo de geometria)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Distância de agrupamento em unidades do CRS: os vértices dentro desta distância são ajustados a uma localização compartilhada. Obrigatória."
              },
              "snap_to_edges": {
                "label": "Ajustar às bordas",
                "description": "Também inserir um vértice onde o vértice de uma feição cai dentro da tolerância em relação ao segmento de outra feição (junções em T). Padrão true."
              }
            }
          },
          "interpolate_from_spatiotemporal_points": {
            "name": "Interpolar a partir de pontos espaço-temporais",
            "description": "Agrupa observações pontuais com carimbo de tempo em fatias de tempo regulares e interpola cada uma em uma grade compartilhada, produzindo um raster multidimensional corregistrado, como o ArcGIS Interpolate From Spatiotemporal Points.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições pontuais com carimbo de tempo."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo numérico a interpolar."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo de carimbo de tempo: segundos numéricos desde a época, ou texto ISO-8601."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída para a primeira fatia. As fatias posteriores são gravadas ao lado com um sufixo _t<index>. Se omitido, todas as fatias são armazenadas em memória."
              },
              "time_step": {
                "label": "Passo de tempo",
                "description": "daily | weekly | monthly (padrão) | quarterly | yearly."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do mapa. O padrão é 1/50 da maior dimensão da extensão."
              },
              "method": {
                "label": "Método",
                "description": "idw (padrão) | nearest | mean | median."
              },
              "power": {
                "label": "Potência",
                "description": "Expoente de distância do IDW (padrão 2)."
              },
              "neighbors": {
                "label": "Vizinhos",
                "description": "Número de observações mais próximas usadas por célula (padrão 8)."
              },
              "min_points": {
                "label": "Mínimo de pontos",
                "description": "Mínimo de observações exigido para que uma fatia seja interpolada; as fatias mais esparsas emitem tudo nodata em vez de uma superfície enganosa (padrão 3)."
              }
            }
          },
          "interpolate_shape": {
            "name": "Interpolar forma",
            "description": "Drapeja pontos/linhas/polígonos sobre um raster de superfície: densifica, amostra Z por vértice (bilinear ou vizinho mais próximo), grava geometria 3D e adiciona métricas de superfície (z_min/z_max/z_mean, comprimento 3D da superfície, declividade média), como o ArcGIS Interpolate Shape / Add Surface Information.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (pontos, linhas ou polígonos) que compartilha o CRS da superfície."
              },
              "surface": {
                "label": "Superfície",
                "description": "Raster de elevação/superfície a amostrar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "sample_distance": {
                "label": "Distância de amostragem",
                "description": "Intervalo de densificação em unidades do CRS; os segmentos longos são divididos para que acompanhem a superfície. Padrão: o tamanho da célula do raster."
              },
              "method": {
                "label": "Método",
                "description": "Amostragem da superfície: 'bilinear' (padrão) ou 'nearest'."
              },
              "attributes": {
                "label": "Atributos",
                "description": "Lista separada por vírgula das colunas de métricas a adicionar: z_min,z_max,z_mean,surf_len,avg_slope. Padrão: todas."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) da superfície a amostrar (padrão 1)."
              }
            }
          },
          "interpolate_with_barriers": {
            "name": "Interpolar com barreiras",
            "description": "Interpola medições pontuais para um raster respeitando barreiras absolutas (linhas de costa, cristas, falhas, muros): a influência viaja ao redor das barreiras via distância de custo/geodésica, não através delas — IDW ou um kernel polinomial local de primeira ordem, como o ArcGIS Kernel Interpolation With Barriers / Spline With Barriers. As ferramentas incluídas de idw/krigagem/vizinho natural/spline são todas cegas a barreiras.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de medições de entrada."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numérico dos pontos que contém o valor a interpolar."
              },
              "output": {
                "label": "Saída",
                "description": "Raster interpolado de saída (GeoTIFF). Se omitido, armazenado em memória."
              },
              "barriers": {
                "label": "Barreiras",
                "description": "Camada vetorial de barreiras opcional (polilinhas ou polígonos). Rasterizada como células intransponíveis, de modo que a influência deva contorná-las. Omita para um controle sem barreiras."
              },
              "method": {
                "label": "Método",
                "description": "'idw' (padrão) ou 'local_polynomial' (ajuste planar ponderado de primeira ordem com um kernel gaussiano de distância geodésica)."
              },
              "power": {
                "label": "Potência",
                "description": "Expoente de decaimento com a distância do IDW (padrão 2)."
              },
              "bandwidth": {
                "label": "Largura de banda",
                "description": "Largura de banda do kernel gaussiano para local_polynomial (unidades de distância). Padrão: o raio de busca ou, na sua ausência, a extensão da grade."
              },
              "radius": {
                "label": "Raio",
                "description": "Raio de busca como uma distância geodésica (de custo): as amostras além dele não influenciam uma célula, e as células inalcançáveis dentro dele tornam-se nodata. Metros para um CRS geográfico, unidades do CRS caso contrário. Padrão: ilimitado."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do CRS (graus para um CRS geográfico). Padrão: dimensionado para que o eixo maior abranja ~256 células."
              }
            }
          },
          "intersect_3d": {
            "name": "Interseção 3D",
            "description": "Calcula o volume compartilhado por sólidos 3D fechados sobrepostos, par a par, com um sólido delimitador opcional para cada interseção (ArcGIS Intersect 3D). union_3d é a única sobreposição 3D em qualquer dos registros e responde apenas à pergunta do volume combinado; inside_3d é um predicado de contenção para pontos e linhas, e polygon_volume / surface_volume medem contra um plano de referência. Os volumes por sólido são exatos; a interseção é estimada por ocupação de voxels em uma resolução relatada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições de sólidos 3D fechados (MultiPolygons de malha triangular com Z, como buffer_3d e minimum_bounding_volume emitem)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segunda camada de sólidos opcional. Quando omitida, cada par dentro de 'input' é intersectado (o modo de entrada única do ArcGIS)."
              },
              "output": {
                "label": "Saída",
                "description": "Tabela de saída com os pares que se intersectam, uma linha por interseção não vazia. Se omitido, armazenado em memória."
              },
              "mode": {
                "label": "Modo",
                "description": "'table' (padrão): apenas atributos. 'solid': também emite o sólido delimitador de cada interseção como geometria. O volume medido é sempre um atributo — não se alega produzir uma malha mesclada exata."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Células de voxel ao longo do eixo mais longo da caixa delimitadora compartilhada de cada par (padrão 64). Valores maiores são mais precisos e mais lentos."
              }
            }
          },
          "intersect_3d_line_with_surface": {
            "name": "Interseção de linha 3D com superfície",
            "description": "Divide linhas 3D em cada ponto onde cruzam uma superfície de elevação ou um multipatch, marcando cada parte como acima ou abaixo e emitindo os pontos de cruzamento (ArcGIS Intersect 3D Line With Surface / Intersect 3D Line With Multi Patch). O intersect_3d da rodada 17 recebe sólidos fechados em vez de linhas, inside_3d é um predicado de contenção que nem corta a geometria nem localiza os cruzamentos, e interpolate_shape drapeja uma linha sobre uma superfície, descartando o z da linha do qual a comparação depende.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de linhas 3D, com vértices que carregam z."
              },
              "surface": {
                "label": "Superfície",
                "description": "Raster de elevação contra o qual cortar. Obrigatório, a menos que 'multipatch' seja fornecido."
              },
              "multipatch": {
                "label": "Multipatch",
                "description": "Camada multipatch (multipolígonos triangulares) contra a qual cortar, em vez de uma superfície raster."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de linhas de saída dividida em cada cruzamento. Se omitido, armazenado em memória."
              },
              "output_points": {
                "label": "Saída de pontos",
                "description": "Camada de pontos de saída com os próprios cruzamentos. Sempre produzida; armazenada em memória quando nenhum caminho é fornecido."
              },
              "spacing": {
                "label": "Espaçamento",
                "description": "Passo de densificação em planta em unidades do mapa (padrão: uma célula da superfície). Valores menores resolvem os cruzamentos com mais detalhe e mais custo."
              },
              "keep_above": {
                "label": "Manter acima",
                "description": "Manter as partes acima da superfície (padrão true)."
              },
              "keep_below": {
                "label": "Manter abaixo",
                "description": "Manter as partes abaixo da superfície (padrão true)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) do raster de superfície (padrão 1)."
              }
            }
          },
          "intersecting_layers_masks": {
            "name": "Máscaras de camadas que se intersectam",
            "description": "Gera polígonos de máscara cartográfica com uma margem ao redor das feições de uma camada mascarada, mas apenas onde elas intersectam uma segunda camada de máscara (contorno exato, envoltória convexa ou caixa delimitadora).",
            "params": {
              "masked_layer": {
                "label": "Camada mascarada",
                "description": "Camada vetorial mascarada (qualquer geometria): cada feição que intersecta a camada de máscara recebe uma máscara. Formato detectado automaticamente (ou um identificador em memória)."
              },
              "masking_layer": {
                "label": "Camada de máscara",
                "description": "Camada vetorial de máscara (qualquer geometria): uma feição mascarada só é mascarada onde intersecta uma feição desta camada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "margin": {
                "label": "Margem",
                "description": "Distância da margem da máscara. Metros para um CRS geográfico (EPSG:4326 ou desconhecido, convertidos em graus), caso contrário nas unidades do CRS da camada. Deve ser positiva."
              },
              "mask_kind": {
                "label": "Tipo de máscara",
                "description": "Forma da máscara: 'exact' (padrão, contorno da feição com buffer), 'convex_hull' (envoltória convexa dilatada) ou 'box' (envelope delimitador + margem)."
              },
              "id_field": {
                "label": "Campo de ID",
                "description": "Campo opcional na camada mascarada cujo valor é copiado para cada máscara como 'source_id'. O padrão é o índice da feição de origem."
              }
            }
          },
          "intervisibility": {
            "name": "Intervisibilidade",
            "description": "Testa cada linha de visada contra obstruções vetoriais 3D e a sinaliza como visível ou bloqueada, relatando qual obstrução a bloqueou e onde (ArcGIS Intervisibility). line_of_sight, visibility_index, viewshed e skyline_analysis trabalham todos contra um raster de superfície; nenhum consegue testar contra obstruções multipatch 3D como edificações, cujos balanços e arcadas se perdem quando gravados em um DEM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Linhas de visada: polilinhas 3D cujo primeiro vértice é o observador e o último vértice é o alvo."
              },
              "obstructions": {
                "label": "Obstruções",
                "description": "Uma ou mais camadas de obstruções 3D separadas por vírgula (MultiPolygons de malha triangular com Z)."
              },
              "output": {
                "label": "Saída",
                "description": "Linhas de visada de saída com os campos de visibilidade acrescentados. Se omitido, armazenado em memória."
              },
              "visible_field": {
                "label": "Campo de visibilidade",
                "description": "Nome do campo booleano de visibilidade (padrão 'VISIBLE'), correspondendo ao parâmetro do ArcGIS."
              },
              "observer_offset": {
                "label": "Deslocamento do observador",
                "description": "Altura somada à extremidade do observador antes do teste, em unidades do CRS (padrão 0). Modela a altura do olho ou do instrumento."
              },
              "target_offset": {
                "label": "Deslocamento do alvo",
                "description": "Altura somada à extremidade do alvo antes do teste, em unidades do CRS (padrão 0)."
              },
              "visible_only": {
                "label": "Apenas visíveis",
                "description": "Emitir apenas as linhas de visada que estão desobstruídas (padrão false)."
              }
            }
          },
          "is_closed_3d": {
            "name": "Está fechado em 3D",
            "description": "Sinaliza quais feições multipatch 3D são sólidos fechados estanques e quais são superfícies abertas, com contagens de diagnóstico de arestas de fronteira não pareadas, arestas não variedade e consistência de orientação (ArcGIS Is Closed 3D). Toda ferramenta volumétrica do catálogo — union_3d, inside_3d, minimum_bounding_volume, buffer_3d — assume entrada fechada e retorna um número sem sentido para uma malha aberta, e nada permitia verificar essa pré-condição antes.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições 3D (MultiPolygons de malha triangular com Z, como buffer_3d, minimum_bounding_volume e voxel_isosurface emitem)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída: as feições de entrada com os campos de diagnóstico acrescentados. Se omitido, armazenado em memória."
              },
              "closed_only": {
                "label": "Apenas fechados",
                "description": "Emitir apenas as feições que são sólidos fechados (padrão false: cada feição é emitida com seu veredito)."
              }
            }
          },
          "kernel_density_ratio": {
            "name": "Razão de densidade kernel",
            "description": "Razão de risco relativo de duas superfícies de densidade de kernel: avalia uma camada de pontos numeradora (casos) e uma camada de pontos denominadora (população em risco) com o mesmo kernel quártico e largura de banda compartilhada, depois divide célula por célula — como o ArcGIS Calculate Kernel Density Ratio. Um piso do denominador grava nodata onde a população é muito esparsa (sem vazamentos de inf/NaN), e uma transformação opcional de logaritmo natural torna a sobre/sub-representação simétrica. A razão de densidades que o heat_map de camada única não consegue expressar.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos do numerador (por exemplo, casos / incidentes)."
              },
              "denominator": {
                "label": "Denominador",
                "description": "Camada de pontos do denominador (por exemplo, população / exposição em risco)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de razão de saída. Se omitido, armazenado em memória."
              },
              "weight_field": {
                "label": "Campo de peso",
                "description": "Campo numérico que pondera os pontos do numerador (padrão: cada ponto conta 1)."
              },
              "denominator_weight_field": {
                "label": "Campo de peso do denominador",
                "description": "Campo numérico que pondera os pontos do denominador (padrão: cada ponto conta 1)."
              },
              "bandwidth": {
                "label": "Largura de banda",
                "description": "Largura de banda do kernel / raio de busca compartilhado (metros para um CRS geográfico, unidades do CRS caso contrário). Padrão: a regra de Silverman a partir da dispersão combinada dos pontos."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do CRS (padrão: o maior lado da extensão / 200)."
              },
              "log_ratio": {
                "label": "Razão logarítmica",
                "description": "Se verdadeiro, gera o logaritmo natural da razão (simétrico em torno de 0). Padrão false."
              },
              "denominator_floor": {
                "label": "Piso do denominador",
                "description": "As células cuja densidade do denominador esteja abaixo deste valor (ou seja zero) tornam-se nodata, evitando explosões na divisão. Padrão 0 (apenas um denominador exatamente zero é mascarado)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG para marcar a saída (padrão: o da camada do numerador)."
              }
            }
          },
          "kernel_interpolation_with_barriers": {
            "name": "Interpolação kernel com barreiras",
            "description": "Interpola observações pontuais com um ajuste polinomial ponderado por kernel em janela móvel, no qual a distância é medida como o caminho mais curto AO REDOR de barreiras absolutas em vez de diretamente através delas (ArcGIS Kernel Interpolation With Barriers). Complementa o diffusion_interpolation_with_barriers disponível, que resolve uma equação de calor em vez de aplicar um kernel explícito. Todos os demais interpoladores em qualquer dos registros usam distância euclidiana, de modo que todos interpolam diretamente através de promontórios e falhas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos de entrada que carrega as observações."
              },
              "z_field": {
                "label": "Campo Z",
                "description": "Campo numérico a interpolar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída para os valores previstos. Se omitido, armazenado em memória."
              },
              "output_error": {
                "label": "Saída de erro",
                "description": "Caminho opcional para o raster de RMS ponderado dos resíduos locais — a dispersão ponderada dos resíduos dos vizinhos em torno do ajuste local. Trata-se de uma medida de qualidade do ajuste, NÃO de um erro padrão de predição no estilo do ArcGIS (não leva em conta nem os graus de liberdade efetivos nem a alavancagem). Se omitido, armazenado em memória (ainda assim é retornado)."
              },
              "barriers": {
                "label": "Barreiras",
                "description": "Camada de polilinhas opcional com barreiras absolutas. Sem nenhuma barreira fornecida, a ferramenta degenera em uma interpolação por kernel simples."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do CRS. O padrão é aproximadamente 1/100 do maior lado da extensão."
              },
              "kernel": {
                "label": "Kernel",
                "description": "exponential, gaussian, quartic, epanechnikov, polynomial5 (padrão) ou constant."
              },
              "bandwidth": {
                "label": "Largura de banda",
                "description": "Largura de banda do kernel em unidades do CRS. O padrão é um valor derivado dos dados a partir do espaçamento médio ao vizinho mais próximo."
              },
              "power": {
                "label": "Potência",
                "description": "Ordem do polinômio local: 0 (média ponderada) ou 1 (padrão, ajuste planar)."
              },
              "ridge": {
                "label": "Crista",
                "description": "Parâmetro de ridge que estabiliza o ajuste local por mínimos quadrados onde uma vizinhança é degenerada (padrão 1e-6)."
              },
              "max_neighbors": {
                "label": "Máximo de vizinhos",
                "description": "Limite do número de observações que contribuem para cada ajuste local (padrão 32)."
              }
            }
          },
          "kml_to_features": {
            "name": "KML para feições",
            "description": "Lê Placemarks de .kml/.kmz em camadas de pontos, linhas e polígonos com atributos de nome/descrição.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho de um arquivo .kml ou de um arquivo .kmz (um KML compactado)."
              },
              "points_output": {
                "label": "Saída de pontos",
                "description": "Caminho opcional do vetor de pontos de saída (driver a partir de sua extensão). Gravado apenas se o KML tiver placemarks de pontos."
              },
              "lines_output": {
                "label": "Saída de linhas",
                "description": "Caminho opcional do vetor de linhas de saída (driver a partir de sua extensão). Gravado apenas se o KML tiver placemarks de linhas."
              },
              "polygons_output": {
                "label": "Saída de polígonos",
                "description": "Caminho opcional do vetor de polígonos de saída (driver a partir de sua extensão). Gravado apenas se o KML tiver placemarks de polígonos."
              }
            }
          },
          "landtrendr": {
            "name": "LandTrendr",
            "description": "Segmentação temporal LandTrendr de uma série anual de imagens (como o ArcGIS Analyze Changes Using LandTrendr): remoção de picos, ajuste linear por partes guloso baseado em vértices e extração da maior perturbação (ano, magnitude, duração) por pixel. A segmentação do histórico de mudanças por pixel que o change_vector_analysis de duas datas e o generate_trend_raster de tendência única não conseguem fazer.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Caminhos dos rasters anuais separados por vírgula em ordem temporal (por exemplo, saídas NBR de spectral_index; >= 4)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de saída: ano da maior perturbação por pixel. Se omitido, armazenado em memória."
              },
              "years": {
                "label": "Anos",
                "description": "Anos separados por vírgula correspondentes a 'inputs' (padrão 0,1,2,...)."
              },
              "magnitude_output": {
                "label": "Saída de magnitude",
                "description": "Raster opcional da magnitude da perturbação (variação do índice)."
              },
              "duration_output": {
                "label": "Saída de duração",
                "description": "Raster opcional da duração da perturbação (anos)."
              },
              "direction": {
                "label": "Direção",
                "description": "Direção da perturbação no índice: 'loss' (uma queda; padrão) ou 'gain' (uma alta)."
              },
              "max_segments": {
                "label": "Máximo de segmentos",
                "description": "Número máximo de segmentos (padrão 6)."
              },
              "spike_threshold": {
                "label": "Limiar de picos",
                "description": "Intensidade da remoção de picos, de 0 a 1 (fração da amplitude da série; padrão 0.75; 1 desativa)."
              },
              "min_valid": {
                "label": "Mínimo válido",
                "description": "Mínimo de observações válidas por pixel (padrão 4)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler de cada entrada (padrão 1)."
              }
            }
          },
          "las_height_metrics": {
            "name": "Métricas de altura LAS",
            "description": "Rasteriza métricas de altura do dossel por célula a partir de alturas lidar (como o ArcGIS LAS Height Metrics): média, desvio padrão, assimetria, curtose, MAD e percentis de altura como uma grade multibanda — o conjunto florestal de momentos/percentis que os height_above_ground e lidar_point_stats incluídos não emitem em uma única passagem.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Nuvem de pontos LAS/LAZ de entrada com alturas acima do solo (normalize antes com height_above_ground)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster multibanda de saída. Se omitido, armazenado em memória."
              },
              "metrics": {
                "label": "Métricas",
                "description": "Subconjunto separado por vírgula de mean,std,skewness,kurtosis,mad (padrão 'mean,std,skewness,kurtosis,mad')."
              },
              "height_percentiles": {
                "label": "Percentis de altura",
                "description": "Percentis separados por vírgula em [0,100], por exemplo '50,95,99' (padrão '50,95,99'; vazio para nenhum)."
              },
              "min_height": {
                "label": "Altura mínima",
                "description": "Excluir os pontos com altura abaixo deste valor (corte de solo/ruído). Padrão 0."
              },
              "min_points": {
                "label": "Mínimo de pontos",
                "description": "As células com menos pontos válidos que isso tornam-se nodata. Padrão 4."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do CRS. Padrão 10."
              }
            }
          },
          "less_than_or_equal_to": {
            "name": "MenorOuIgualA",
            "description": "Testa se o primeiro raster é menor ou igual ao segundo, célula por célula.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo raster de entrada (cadeia de caminho ou objeto raster tipado)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do arquivo raster de saída. Se omitido, a saída permanece em memória e é retornada como um identificador de raster memory://."
              }
            }
          },
          "line_density": {
            "name": "Densidade de linhas",
            "description": "Densidade de feições lineares (comprimento por unidade de área) em uma vizinhança circular ao redor de cada célula raster — densidade de estradas, cursos d'água ou falhas — recortando cada segmento de linha pelo círculo do raio de busca (forma fechada) e dividindo o comprimento ponderado somado por pi*r^2. Como o ArcGIS Line Density; a contraparte para linhas vetoriais que faltam ao heat_map incluído, apenas para pontos, e ao edge_density categórico.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polilinhas de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de densidade de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "weight_field": {
                "label": "Campo de peso",
                "description": "Campo numérico que pondera cada linha (por exemplo, faixas, tráfego, população). Padrão: cada linha com peso 1."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança (metros para um CRS geográfico, unidades do CRS caso contrário). Padrão: o menor lado da extensão / 25."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída (mesmas unidades de search_radius). Padrão: search_radius / 10."
              },
              "area_units": {
                "label": "Unidades de área",
                "description": "Unidade de área dos valores de densidade: 'square_map_units' (padrão), 'square_meters', 'square_kilometers', 'square_miles' ou 'square_feet'."
              }
            }
          },
          "line_of_sight": {
            "name": "Linha de visada",
            "description": "Visibilidade ponto a ponto sobre um DEM: para cada par observador-alvo, emite a linha de visada dividida em segmentos visíveis e obstruídos mais um indicador de alvo visível, como o ArcGIS Line Of Sight.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster de elevação de entrada (CRS projetado; distâncias/alturas nas suas unidades)."
              },
              "observers": {
                "label": "Observadores",
                "description": "Camada vetorial de pontos de observação."
              },
              "targets": {
                "label": "Alvos",
                "description": "Camada vetorial de pontos alvo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "observer_offset": {
                "label": "Deslocamento do observador",
                "description": "Altura do observador acima do solo, em unidades do DEM (padrão 1.75)."
              },
              "target_offset": {
                "label": "Deslocamento do alvo",
                "description": "Altura do alvo acima do solo, em unidades do DEM (padrão 0)."
              },
              "pair_field": {
                "label": "Campo de par",
                "description": "Campo opcional presente em ambas as camadas; os observadores e alvos são pareados onde este campo coincide (em vez de todos com todos)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda do DEM a amostrar (padrão 1)."
              }
            }
          },
          "line_statistics": {
            "name": "Estatísticas de linhas",
            "description": "Rasteriza uma estatística de vizinhança de um atributo de linha (média, maioria, mediana, mín/máx, amplitude, variedade ou comprimento total) recortando cada segmento pelo círculo do raio de busca e ponderando os valores pelo comprimento — como o ArcGIS Line Statistics; o complemento de superfície de atributos ao line_density que falta ao conjunto incluído.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polilinhas de entrada."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numérico a resumir. Obrigatório para todas as estatísticas, exceto 'length'."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "statistic": {
                "label": "Estatística",
                "description": "'mean' (padrão), 'majority', 'maximum', 'median', 'minimum', 'minority', 'range', 'variety' ou 'length'."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Raio da vizinhança em unidades do CRS. Padrão: o menor lado da extensão / 25."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do CRS. Padrão: search_radius / 10."
              }
            }
          },
          "local_bivariate_relationships": {
            "name": "Relações bivariadas locais",
            "description": "Para cada feição, classifica como duas variáveis se relacionam em sua vizinhança local (não significativa, linear positiva/negativa, côncava, convexa, indefinida) a partir de ajustes locais lineares e quadráticos, uma estatística de dependência por redução de entropia e um valor-p de teste de permutação com semente — como o ArcGIS Local Bivariate Relationships.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada que contém os dois campos de variáveis."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (uma cópia da entrada com os campos de relação). Se omitido, armazenado em memória."
              },
              "field1": {
                "label": "Campo 1",
                "description": "Nome do campo da primeira variável (explicativa)."
              },
              "field2": {
                "label": "Campo 2",
                "description": "Nome do campo da segunda variável (dependente)."
              },
              "neighbors": {
                "label": "Vizinhos",
                "description": "Número de vizinhos mais próximos k que define cada amostra local (padrão 12; deve ser >= 5)."
              },
              "permutations": {
                "label": "Permutações",
                "description": "Número de permutações para o teste de significância (padrão 199; 0 desativa)."
              },
              "significance": {
                "label": "Significância",
                "description": "Limiar de pseudo valor-p para considerar uma relação significativa (padrão 0.05)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente do gerador de números aleatórios das permutações (padrão 1), para resultados reproduzíveis."
              }
            }
          },
          "local_outlier_analysis": {
            "name": "Análise local de outliers",
            "description": "Análise de outliers locais espaço-temporal (I de Moran local de Anselin em um cubo espaço-temporal H3): classifica cada célula x intervalo de tempo como agrupamento Alto-Alto/Baixo-Baixo ou outlier Alto-Baixo/Baixo-Alto com um valor-p de permutação com semente, depois resume por célula ao longo do tempo — como o ArcGIS Local Outlier Analysis. A extensão espaço-temporal do local_morans_i_lisa incluído, apenas espacial.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos de entrada com eventos com carimbo de tempo (lon/lat)."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo que contém o tempo de cada ponto: um número ou um carimbo de tempo ISO-8601."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de resumo em polígonos H3 de saída. Se omitido, armazenado em memória."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo numérico a agregar por grupo (padrão: contagem de pontos)."
              },
              "time_step": {
                "label": "Passo de tempo",
                "description": "Duração de um passo de tempo nas unidades de time_field (padrão 1)."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Resolução H3 de 0 a 15 (padrão 7)."
              },
              "kring": {
                "label": "Anel K",
                "description": "Raio da vizinhança espacial em anéis k (padrão 1)."
              },
              "time_window": {
                "label": "Janela de tempo",
                "description": "Semilargura da vizinhança temporal em passos (padrão 1)."
              },
              "permutations": {
                "label": "Permutações",
                "description": "Permutações para o teste de significância (padrão 99; 0 desativa)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente do gerador de números aleatórios das permutações (padrão 1)."
              }
            }
          },
          "local_polynomial_interpolation": {
            "name": "Interpolação polinomial local",
            "description": "Ajusta um polinômio de ordem 1/2/3 dentro de uma vizinhança móvel ponderada por kernel em cada célula, produzindo uma superfície de predição, uma superfície de erro padrão de predição ou uma superfície de número de condição. Ao contrário do trend_surface global incluído, o polinômio é reajustado localmente. Como o ArcGIS Local Polynomial Interpolation.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições pontuais de entrada que carregam o valor a interpolar."
              },
              "z_field": {
                "label": "Campo Z",
                "description": "Campo numérico que contém o valor a interpolar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída. Se omitido, armazenado em memória."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do mapa (padrão: extensão da entrada / 200)."
              },
              "order": {
                "label": "Ordem",
                "description": "Ordem do polinômio: 1 (padrão), 2 ou 3."
              },
              "kernel": {
                "label": "Kernel",
                "description": "'exponential' (padrão), 'gaussian', 'quartic', 'epanechnikov', 'fifth_order' ou 'constant'."
              },
              "bandwidth": {
                "label": "Largura de banda",
                "description": "Largura de banda fixa do kernel em unidades do mapa. Se omitida, é usada uma largura de banda adaptativa: a distância até a 'neighbors'-ésima amostra mais próxima."
              },
              "neighbors": {
                "label": "Vizinhos",
                "description": "Amostras por ajuste local para a largura de banda adaptativa (padrão: 3 vezes o número de termos do polinômio)."
              },
              "weight_field": {
                "label": "Campo de peso",
                "description": "Campo opcional de peso de medição por observação."
              },
              "condition_number": {
                "label": "Número de condição",
                "description": "Recusar-se a prever onde o número de condição do desenho local exceda este limiar (padrão: sem limite)."
              },
              "output_type": {
                "label": "Tipo de saída",
                "description": "'prediction' (padrão), 'standard_error' ou 'condition_number'."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Código EPSG gravado no raster de saída (padrão: o CRS da camada de entrada)."
              }
            }
          },
          "locate_lines_along_routes": {
            "name": "Localizar linhas ao longo de rotas",
            "description": "Sobrepõe feições de linhas ou polígonos em rotas com medidas para produzir eventos lineares de medida inicial/final (RID, FMEAS, TMEAS), como o ArcGIS Locate Features Along Routes (eventos de linha/polígono).",
            "params": {
              "input_features": {
                "label": "Feições de entrada",
                "description": "Camada vetorial de linhas ou polígonos de entrada a localizar ao longo das rotas."
              },
              "routes": {
                "label": "Rotas",
                "description": "Camada vetorial de rotas (linhas) que fornece as medidas de referenciamento linear."
              },
              "route_id_field": {
                "label": "Campo de ID da rota",
                "description": "Campo na camada de rotas que contém o identificador de cada rota (RID). Se omitido, é usado o índice da feição da rota em base 0."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Raio de busca em unidades do CRS. Um vértice de feição situado dentro desta distância de uma rota é tratado como coincidente. Obrigatório (> 0)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de eventos de linha de saída (driver a partir da extensão). Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "locate_regions": {
            "name": "Localizar regiões",
            "description": "Encontra a(s) melhor(es) região(ões) contígua(s) de uma área alvo a partir de um raster de adequabilidade (como o ArcGIS Locate Regions): crescimento de regiões best-first a partir dos picos de adequabilidade com controle de forma/compacidade e espaçamento entre regiões — o passo de localização que transforma uma superfície de fuzzy_overlay/weighted_overlay em regiões reais, o que clump e limiarização não conseguem.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de aptidão (maior = mais apto)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de saída com os identificadores de regiões em base 1 (nodata no restante). Se omitido, armazenado em memória."
              },
              "total_area": {
                "label": "Área total",
                "description": "Área alvo total em todas as regiões, em unidades de área do CRS (padrão: 5% da área válida)."
              },
              "num_regions": {
                "label": "Número de regiões",
                "description": "Número de regiões a localizar (padrão 1). Cada uma visa total_area / num_regions."
              },
              "shape": {
                "label": "Forma",
                "description": "Peso de compacidade de 0 a 1: 0 = apenas aptidão, 1 = favorece fortemente regiões arredondadas (padrão 0.3)."
              },
              "min_distance": {
                "label": "Distância mínima",
                "description": "Distância mínima entre regiões, em unidades do CRS (padrão 0)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler (padrão 1)."
              }
            }
          },
          "matched_filter_target_detection": {
            "name": "Detecção de alvos por filtro casado (CEM/ACE)",
            "description": "Pontua cada pixel de uma imagem multibanda contra um espectro alvo conhecido usando as estatísticas da cena para suprimir o fundo — Constrained Energy Minimization (CEM) ou Adaptive Coherence Estimator (ACE) — com uma máscara opcional de limiar por percentil, como o ArcGIS Detect Target Using Spectra.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster multibanda de entrada (2 ou mais bandas)."
              },
              "target_spectrum": {
                "label": "Espectro alvo",
                "description": "Espectro alvo: um valor por banda, como uma matriz JSON ou uma lista separada por vírgula/espaço (o comprimento deve ser igual ao número de bandas)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de escores de detecção de saída (F32). Se omitido, armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "'cem' (Constrained Energy Minimization, padrão) ou 'ace' (Adaptive Coherence Estimator, com escores de 0 a 1)."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Percentil opcional (0-100) da distribuição de escores acima do qual uma máscara binária de detecção é gravada."
              },
              "mask_output": {
                "label": "Saída de máscara",
                "description": "Caminho de saída da máscara binária de detecção (requer 'threshold'). Se omitido com um limiar definido, armazenado em memória."
              }
            }
          },
          "maximum_likelihood_classification": {
            "name": "Classificação por máxima verossimilhança",
            "description": "Classificador supervisionado gaussiano de máxima verossimilhança: modela cada classe de treinamento como uma normal multivariada (média + covariância por classe), classifica cada pixel de uma imagem multibanda pela maior log-verossimilhança gaussiana com pesos a priori opcionais iguais/amostrais, e pode emitir um raster de probabilidade/confiança por pixel e rejeitar as células de menor confiança, como o ArcGIS Maximum Likelihood Classification.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster multibanda de entrada a classificar (1 ou mais bandas; cada banda é uma variável)."
              },
              "training": {
                "label": "Treinamento",
                "description": "Raster de treinamento rotulado com inteiros na mesma grade de 'input': cada inteiro positivo distinto é uma classe; as células nodata / não positivas / não finitas ficam sem rótulo."
              },
              "output": {
                "label": "Saída",
                "description": "Raster classificado de saída que carrega os identificadores de classe do treinamento. Se omitido, armazenado em memória."
              },
              "prob_output": {
                "label": "Saída de probabilidade",
                "description": "Raster F32 de saída opcional com a probabilidade posterior (confiança) da classe vencedora em [0,1]."
              },
              "a_priori": {
                "label": "A priori",
                "description": "Pesos a priori das classes: 'equal' (padrão, 1/K) ou 'sample' (proporcional à contagem de pixels de treinamento de cada classe)."
              },
              "reject_fraction": {
                "label": "Fração de rejeição",
                "description": "Fração em [0,1) das células classificadas de menor confiança a deixar sem classificação (nodata). Padrão 0."
              }
            }
          },
          "median_center": {
            "name": "Centro mediano",
            "description": "A mediana geométrica (ponto de Weiszfeld que minimiza a distância euclidiana somada, opcionalmente ponderada, a todos os pontos de entrada) — um ponto central robusto por grupo de caso, com atributos opcionais de mediana por campo (ArcGIS Median Center).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "weight_field": {
                "label": "Campo de peso",
                "description": "Campo numérico opcional que pondera a influência de cada ponto sobre a mediana."
              },
              "case_field": {
                "label": "Campo de caso",
                "description": "Campo opcional pelo qual agrupar os pontos; uma mediana por valor distinto."
              },
              "attribute_fields": {
                "label": "Campos de atributo",
                "description": "Campos numéricos opcionais separados por vírgula; a mediana por grupo de cada um é acrescentada como '<field>_med'."
              }
            }
          },
          "merge_divided_roads": {
            "name": "Mesclar rodovias divididas",
            "description": "Substitui pares correspondidos de pistas de vias divididas por linhas centrais únicas preservando a conectividade das interseções, pareando apenas pistas que compartilham um campo de mesclagem e correm antiparalelas dentro de uma distância de separação, e emitindo polígonos de deslocamento para propagate_displacement. Como o ArcGIS Merge Divided Roads.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições de eixos de estradas."
              },
              "merge_field": {
                "label": "Campo de mesclagem",
                "description": "Campo cujos valores coincidentes tornam duas linhas candidatas a um par de pistas (por exemplo, nome ou classe da estrada)."
              },
              "merge_distance": {
                "label": "Distância de mesclagem",
                "description": "Separação máxima entre pistas pareadas, em unidades do mapa."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do eixo mesclado de saída. Se omitido, armazenado em memória."
              },
              "output_displacement_features": {
                "label": "Saída de feições de deslocamento",
                "description": "Polígonos opcionais que mostram onde a geometria se moveu, para propagate_displacement."
              },
              "character_field": {
                "label": "Campo de caractere",
                "description": "Campo opcional; as feições com valor diferente de zero / não vazio são excluídas da mesclagem."
              },
              "output_table": {
                "label": "Tabela de saída",
                "description": "Tabela de linhagem opcional que mapeia as feições de saída de volta às suas feições de origem."
              }
            }
          },
          "merge_lines_by_pseudo_node": {
            "name": "Mesclar linhas por pseudonó",
            "description": "Dissolve cadeias de segmentos de linha que se encontram em pseudonós de grau 2 em polilinhas únicas, preservando interseções verdadeiras e (opcionalmente) quebras de atributo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de linhas de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "dissolve_fields": {
                "label": "Campos de dissolução",
                "description": "Nomes de campos de atributo separados por vírgula; dois segmentos só são mesclados onde coincidem em todos eles. Se omitido, os segmentos são mesclados em cada nó de grau 2, independentemente dos atributos."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "As extremidades situadas dentro desta distância (unidades do CRS) são tratadas como o mesmo nó. Padrão 1e-6."
              }
            }
          },
          "merge_multidimensional_rasters": {
            "name": "Mesclar rasters multidimensionais",
            "description": "Une vários cubos raster corregistrados em um só, ordenados pela coordenada da dimensão, resolvendo coordenadas duplicadas por célula (ArcGIS Merge Multidimensional Rasters). aggregate_multidimensional_raster reduz um cubo e composite_bands empilha rasters de banda única em bandas, mas nada unia cubos ao longo de sua dimensão compartilhada.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Caminhos de cubos (rasters multibanda) separados por vírgula ou ponto e vírgula. Pelo menos dois."
              },
              "dimension_values": {
                "label": "Valores da dimensão",
                "description": "Coordenadas opcionais por fatia que cobrem cada fatia de cada entrada, na ordem de entrada. Não precisam estar ordenadas nem ser únicas — é isso que esta ferramenta resolve. Sem elas, as entradas são concatenadas na ordem fornecida."
              },
              "dimension": {
                "label": "Dimensão",
                "description": "Nome da dimensão, usado apenas no relatório (padrão 'slice')."
              },
              "resolve_overlap": {
                "label": "Resolver sobreposição",
                "description": "Regra para coordenadas duplicadas: 'first' (padrão), 'last', 'mean', 'min', 'max' ou 'error'."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Tolerância relativa para tratar duas coordenadas como iguais (padrão 1e-9)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de cubo de saída, uma banda por fatia mesclada, na ordem da dimensão. Se omitido, armazenado em memória."
              }
            }
          },
          "mgwr": {
            "name": "Regressão geograficamente ponderada multiescala",
            "description": "GWR em que cada termo explicativo recebe sua própria largura de banda via reajuste por AICc (MGWR): coeficientes por feição, R² local, resíduos, número de condição, mais a largura de banda ideal de cada termo com uma interpretação local/regional/global e diagnósticos globais de AICc / R².",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de feições de entrada (pontos, ou outras geometrias via seu ponto representativo)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "dependent_field": {
                "label": "Campo dependente",
                "description": "Campo numérico dependente (resposta)."
              },
              "explanatory_fields": {
                "label": "Campos explicativos",
                "description": "Campo(s) numérico(s) explicativos separados por vírgula, cada um ajustado com sua própria largura de banda."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Kernel de decaimento por distância: 'gaussian' (padrão) ou 'bisquare'."
              },
              "bandwidth_type": {
                "label": "Tipo de largura de banda",
                "description": "'adaptive' (padrão; largura de banda = k vizinhos mais próximos) ou 'fixed' (largura de banda = uma distância). Aplica-se à busca da largura de banda própria de cada termo."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Tolerância de convergência do back-fitting: para quando a variação relativa da SQR entre passagens cai abaixo deste valor (padrão 0.001)."
              },
              "max_iterations": {
                "label": "Máximo de iterações",
                "description": "Máximo de passagens de back-fitting sobre todos os termos (padrão 30)."
              }
            }
          },
          "minimum_bounding_volume": {
            "name": "Volume envolvente mínimo",
            "description": "Calcula o volume envolvente mínimo (envoltória convexa, esfera ou envelope) ao redor de feições 3D, por feição, por grupo ou sobre toda a entrada, emitindo o sólido como faces triangulares com valores Z e atributos de volume e área de superfície. Como o ArcGIS Minimum Bounding Volume.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições de pontos, multipontos ou linhas 3D de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho de saída para as faces do volume. Se omitido, armazenado em memória."
              },
              "z_value": {
                "label": "Valor Z",
                "description": "'geometry' (padrão) para tomar o Z da geometria, ou o nome de um campo numérico que fornece o Z."
              },
              "geometry_type": {
                "label": "Tipo de geometria",
                "description": "'convex_hull' (padrão), 'sphere' ou 'envelope'. ('concave_hull' não está implementado nesta versão.)"
              },
              "group_option": {
                "label": "Opção de agrupamento",
                "description": "'none' (um volume por feição, padrão), 'all' (um único volume sobre toda a entrada) ou 'list' (um por valor de 'group_field')."
              },
              "group_field": {
                "label": "Campo de agrupamento",
                "description": "Campo que define os grupos quando 'group_option' é 'list'."
              },
              "mbv_fields": {
                "label": "Campos MBV",
                "description": "Acrescentar os campos MBV_VOLUME e MBV_AREA (padrão false)."
              }
            }
          },
          "multicriteria_overlay": {
            "name": "Sobreposição multicritério",
            "description": "Combina uma pilha de rasters de critérios em uma superfície de adequabilidade com MCDA baseada em classificação: weighted_sum, weighted_geometric_mean, OWA (média ponderada ordenada) ou TOPSIS (proximidade do ponto ideal), com pesos por raster e reescalonamento from_scale/to_scale, como o ArcGIS Multicriteria Overlay.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Lista separada por vírgula de ≥2 rasters de critérios corregistrados (valor maior = mais apto; cada um é reescalonado por mín-máx para 0..1 antes da combinação)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída. Se omitido, o resultado é armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "Método de combinação: 'weighted_sum' (padrão), 'weighted_geometric_mean', 'owa', 'topsis'."
              },
              "weights": {
                "label": "Pesos",
                "description": "Pesos de importância por raster separados por vírgula, um por entrada (padrão iguais). Normalizados para somar 1."
              },
              "order_weights": {
                "label": "Pesos de ordem",
                "description": "Apenas OWA: pesos de ordem separados por vírgula, um por entrada, aplicados aos critérios ordenados do maior para o menor em cada célula (padrão iguais, o que torna o OWA idêntico à média ponderada). Normalizados para somar 1."
              },
              "from_scale": {
                "label": "Da escala",
                "description": "Limite inferior da escala de avaliação de saída (padrão 0)."
              },
              "to_scale": {
                "label": "Para a escala",
                "description": "Limite superior da escala de avaliação de saída (padrão 1)."
              }
            }
          },
          "multidimensional_anomaly": {
            "name": "Gerar anomalia multidimensional",
            "description": "Cubo de anomalias temporais por fatia a partir de uma pilha temporal de rasters (como o ArcGIS Generate Multidimensional Anomaly): para cada pixel calcula uma linha de base temporal (média/desvio padrão ou mediana ao longo da dimensão das fatias) e reescreve cada fatia temporal como seu desvio dessa linha de base — diferença da média, percentual da média, escore z ou diferença da mediana — emitindo uma pilha de anomalias com uma fatia por fatia de entrada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Um raster multibanda (cada banda é uma fatia de tempo) ou uma lista de rasters corregistrados separada por vírgula, em ordem temporal."
              },
              "output": {
                "label": "Saída",
                "description": "Raster multibanda de anomalias de saída (uma banda por fatia de entrada). Se omitido, armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "Cálculo da anomalia: 'difference_from_mean' (padrão), 'percent_of_mean', 'z_score' ou 'difference_from_median'."
              },
              "reference_range": {
                "label": "Intervalo de referência",
                "description": "Intervalo opcional e inclusivo de fatias em base 1, no formato 'start-end', usado para calcular a linha de base por pixel (padrão: todas as fatias)."
              },
              "min_valid": {
                "label": "Mínimo válido",
                "description": "Mínimo de observações não nodata por pixel dentro do intervalo de referência (padrão 1); abaixo disso, o pixel fica nodata."
              }
            }
          },
          "multidimensional_principal_components": {
            "name": "Componentes principais multidimensionais",
            "description": "Decompõe um cubo raster nos poucos modos reais subjacentes a uma série temporal longa, emitindo rasters de componentes, cargas e autovalores, na forma de redução de dimensão ou redução espacial (ArcGIS Multidimensional Principal Components). O principal_component_analysis incluído decompõe o espaço de bandas dentro de uma cena, de modo que seus componentes misturam bandas espectrais em vez de tempo; dimension_reduction trabalha com tabelas de atributos vetoriais. Ambas as reduções vêm de uma única covariância no espaço das fatias, já que o equivalente no espaço dos pixels teria milhões de linhas ao quadrado.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Um raster multibanda (cada banda é uma fatia) ou uma lista de rasters corregistrados separada por vírgula."
              },
              "output": {
                "label": "Saída",
                "description": "Raster multibanda de saída: escores das componentes para 'dimension_reduction', cargas das componentes para 'spatial_reduction'. Se omitido, armazenado em memória."
              },
              "output_loadings": {
                "label": "Saída de cargas",
                "description": "Tabela de saída com as cargas por fatia (ou as séries de componentes por fatia sob 'spatial_reduction'). Sempre produzida; armazenada em memória quando nenhum caminho é fornecido."
              },
              "output_eigenvalues": {
                "label": "Saída de autovalores",
                "description": "Tabela de saída com os autovalores e a variância que cada um explica. Sempre produzida; armazenada em memória quando nenhum caminho é fornecido."
              },
              "mode": {
                "label": "Modo",
                "description": "'dimension_reduction' (padrão; as componentes são padrões espaciais) ou 'spatial_reduction' (as componentes são séries ao longo da dimensão)."
              },
              "dimension": {
                "label": "Dimensão",
                "description": "Nome da dimensão, usado apenas no relatório (padrão 'slice')."
              },
              "dimension_values": {
                "label": "Valores da dimensão",
                "description": "Coordenada de cada fatia separada por vírgula, estritamente crescente. O padrão é o índice da fatia em base 1."
              },
              "number_of_pc": {
                "label": "Número de componentes principais",
                "description": "Quantas componentes manter (padrão: todas as fatias)."
              },
              "correlation": {
                "label": "Correlação",
                "description": "Decompor a matriz de correlação em vez da de covariância (padrão false). Use quando as fatias estiverem em escalas diferentes."
              }
            }
          },
          "multidimensional_raster_correlation": {
            "name": "Correlação de rasters multidimensionais",
            "description": "Correlaciona dois cubos raster célula por célula ao longo de sua dimensão compartilhada, produzindo um mapa de coeficientes de Pearson, Spearman ou Kendall e — no modo de correlação cruzada — a defasagem na qual a associação de cada célula atinge o pico (ArcGIS Multidimensional Raster Correlation). Nada em nenhum dos registros mapeia isso: image_correlation colapsa um par de imagens em um escalar, o time_series_cross_correlation da rodada 17 é apenas vetorial, attribute_correlation é uma operação de tabela e bivariate_spatial_association compara dois rasters de banda única sem eixo temporal.",
            "params": {
              "input1": {
                "label": "Entrada 1",
                "description": "Primeiro cubo: um raster multibanda (cada banda é uma fatia) ou uma lista de rasters corregistrados separada por vírgula."
              },
              "input2": {
                "label": "Entrada 2",
                "description": "Segundo cubo, corregistrado com o primeiro e com o mesmo número de fatias."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de correlação de saída em [-1, 1]. Se omitido, armazenado em memória."
              },
              "output_lag": {
                "label": "Saída de defasagem",
                "description": "Raster de saída com a melhor defasagem por célula (modo de correlação cruzada); caso contrário, a defasagem fixa em toda parte. Sempre produzido; armazenado em memória quando nenhum caminho é fornecido."
              },
              "output_count": {
                "label": "Saída de contagem",
                "description": "Raster de saída com a contagem de amostras pareadas por trás de cada coeficiente. Sempre produzido; armazenado em memória quando nenhum caminho é fornecido."
              },
              "method": {
                "label": "Método",
                "description": "'pearson' (padrão), 'spearman' ou 'kendall'."
              },
              "lag": {
                "label": "Defasagem",
                "description": "Número fixo de fatias pelas quais deslocar o segundo cubo para a frente antes do pareamento (padrão 0). Ignorado no modo de correlação cruzada."
              },
              "cross_correlation": {
                "label": "Correlação cruzada",
                "description": "Pesquisar cada defasagem em -max_lag..=max_lag e manter o coeficiente mais forte (padrão false)."
              },
              "max_lag": {
                "label": "Defasagem máxima",
                "description": "Semilargura da busca de defasagens em fatias (padrão 3). Apenas no modo de correlação cruzada."
              },
              "use_absolute": {
                "label": "Usar absoluto",
                "description": "No modo de correlação cruzada, ordenar as defasagens pela correlação absoluta, de modo que uma associação negativa forte vença (padrão true)."
              },
              "min_valid": {
                "label": "Mínimo válido",
                "description": "Mínimo de amostras pareadas antes que um coeficiente seja gravado (padrão 3)."
              }
            }
          },
          "multilook": {
            "name": "Multilook",
            "description": "Reduz o speckle SAR calculando a média incoerente de looks adjacentes em alcance e azimute, produzindo imagens de intensidade com pixels quadrados (ArcGIS Multilook). Nenhum dos registros traz qualquer ferramenta SAR; a família lee_filter incluída opera sobre intensidade já detectada, de modo que esta fornece o passo anterior que transforma dados complexos de look único nas imagens detectadas que esses filtros esperam. A entrada complexa é lida como um par I/Q de duas bandas; a detecção ocorre antes da média, e o número equivalente de looks é relatado para a filtragem de speckle subsequente.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster SAR de entrada: um par I/Q de duas bandas para dados complexos (SLC), ou uma única banda de dados já detectados (ver 'input_domain')."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é armazenado em memória."
              },
              "input_domain": {
                "label": "Domínio de entrada",
                "description": "Para uma entrada não complexa, o que a banda 1 já contém: 'intensity' (padrão) ou 'amplitude'. A amplitude é elevada ao quadrado para obter intensidade antes da média, já que a média incoerente só é correta no domínio da intensidade."
              },
              "complex": {
                "label": "Complexo",
                "description": "Tratar a entrada como um par I/Q complexo (padrão: true quando o raster tem 2 ou mais bandas, false caso contrário)."
              },
              "range_looks": {
                "label": "Looks em alcance",
                "description": "Número de looks em alcance (x). Padrão 1, ou derivado quando auto_looks está definido."
              },
              "azimuth_looks": {
                "label": "Looks em azimute",
                "description": "Número de looks em azimute (y). Padrão 1, ou derivado quando auto_looks está definido."
              },
              "auto_looks": {
                "label": "Looks automáticos",
                "description": "Se verdadeiro (padrão) e os looks não forem fornecidos explicitamente, derivá-los da razão de espaçamento de pixels, de modo que os pixels de solo de saída fiquem aproximadamente quadrados."
              },
              "output_units": {
                "label": "Unidades de saída",
                "description": "amplitude, intensity (padrão) ou db."
              },
              "statistic": {
                "label": "Estatística",
                "description": "mean (padrão) ou median; a mediana é mais robusta onde espalhadores fortes dominam uma janela de look."
              }
            }
          },
          "multipatch_footprint": {
            "name": "Contorno de multipatch",
            "description": "Projeta feições multipatch 3D sobre o plano XY e as dissolve em polígonos de contorno 2D, um por feição ou por campo de agrupamento (ArcGIS Multipatch Footprint). layer_footprint_vector retorna um único retângulo de extensão para toda a camada, não contornos por feição, de modo que atualmente não há como alimentar buffer_3d / voxel_isosurface / sólidos de edificações importados no pipeline regularize_building_footprints.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições multipatch 3D (MultiPolygons de malha triangular com Z)."
              },
              "output": {
                "label": "Saída",
                "description": "Contornos poligonais 2D de saída. Se omitido, armazenado em memória."
              },
              "group_field": {
                "label": "Campo de agrupamento",
                "description": "Campo opcional cujos valores dissolvem os contornos entre si (um polígono de saída por valor distinto). Padrão: uma saída por feição de entrada."
              },
              "simplify_tolerance": {
                "label": "Tolerância de simplificação",
                "description": "Tolerância de Douglas-Peucker opcional (unidades do CRS) aplicada ao contorno dissolvido. Omitida por padrão, de modo que o contorno bruto seja preservado para regularize_building_footprints."
              }
            }
          },
          "multipatch_to_mesh": {
            "name": "Multipatch para malha",
            "description": "Exporta geometria multipatch e de sólidos 3D para OBJ ou glTF 2.0 / GLB para qualquer visualizador 3D ou web (ArcGIS Multipatch To Collada). O conjunto union_3d / difference_3d / enclose_multipatch / voxel_isosurface não tinha caminho de exportação algum — nenhum formato de malha existia em qualquer parte do registro — de modo que os resultados 3D só podiam ser lidos de volta por este catálogo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de polígonos 3D / multipatch."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do arquivo .glb, .gltf ou .obj de saída. A extensão seleciona o formato, a menos que 'format' seja fornecido."
              },
              "format": {
                "label": "Formato",
                "description": "'glb' (padrão para .glb), 'gltf' (JSON com um buffer base64 embutido) ou 'obj'. O padrão vem da extensão de saída."
              },
              "origin": {
                "label": "Origem",
                "description": "Translação para a origem local: 'centroid' (padrão), 'min_corner' ou 'none'. Necessária por precisão — as posições glTF são números de ponto flutuante de 32 bits."
              },
              "y_up": {
                "label": "Y para cima",
                "description": "Alternar para a convenção Y para cima do glTF a partir do Z para cima geoespacial (padrão true para glTF/GLB, false para OBJ)."
              },
              "name_field": {
                "label": "Campo de nome",
                "description": "Atributo que nomeia a malha de cada feição na saída."
              }
            }
          },
          "multiple_ring_buffer": {
            "name": "Buffer de múltiplos anéis",
            "description": "Gera buffers de feições em uma lista de distâncias como faixas concêntricas — discos aninhados ou anéis não sobrepostos — opcionalmente dissolvidos por distância, com a distância da faixa armazenada como atributo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (pontos, linhas ou polígonos), com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "distances": {
                "label": "Distâncias",
                "description": "Lista separada por vírgula das distâncias de buffer em unidades do CRS, por exemplo \"100,250,500\". Ordenada de forma crescente; os valores duplicados e não positivos são descartados."
              },
              "ring_type": {
                "label": "Tipo de anel",
                "description": "'rings' (padrão) para faixas em anel sem sobreposição, ou 'disks' para buffers aninhados cumulativos."
              },
              "dissolve": {
                "label": "Dissolver",
                "description": "'none' (padrão) mantém uma faixa por feição de origem; 'per_ring' une as faixas de todas as feições em cada distância em um único polígono."
              },
              "distance_field": {
                "label": "Campo de distância",
                "description": "Nome do atributo de saída que contém a distância de cada faixa. Padrão 'distance'."
              }
            }
          },
          "multitemporal_coherence": {
            "name": "Coerência multitemporal",
            "description": "Calcula a coerência interferométrica ao longo de uma pilha de aquisições SAR corregistradas e a reduz a média/mín/máx/desvio padrão e declividade de decorrelação temporal, opcionalmente emitindo o cubo de coerência por par (ArcGIS Generate Multitemporal Coherence). sar_coherence trata exatamente duas cenas, de modo que a seleção de espalhadores persistentes e a datação de mudanças de coerência estavam fora de alcance.",
            "params": {
              "inputs": {
                "label": "Entradas",
                "description": "Rasters SLC complexos corregistrados separados por vírgula ou ponto e vírgula (duas bandas cada: I e depois Q). Pelo menos dois."
              },
              "dates": {
                "label": "Datas",
                "description": "Tempos de aquisição opcionais, um por entrada, como números em unidades consistentes (por exemplo, dias). Exigidos pela estatística 'decorrelation_slope'."
              },
              "pairs": {
                "label": "Pares",
                "description": "'consecutive' (padrão, i com i+1), 'all' (todos os pares não ordenados) ou 'reference' (cada cena contra reference_index)."
              },
              "reference_index": {
                "label": "Índice de referência",
                "description": "Índice em base 0 da cena de referência para pairs='reference' (padrão 0)."
              },
              "window_size": {
                "label": "Tamanho da janela",
                "description": "Janela de estimativa em células; um único valor ou 'range,azimuth' (padrão 5). Os valores pares são arredondados para cima até um valor ímpar."
              },
              "bias_correction": {
                "label": "Correção de viés",
                "description": "Aplicar a correção do viés de coerência para pequenas amostras (padrão true)."
              },
              "statistics": {
                "label": "Estatísticas",
                "description": "Separadas por vírgula: 'mean' (padrão), 'min', 'max', 'std', 'decorrelation_slope'. Uma banda de saída por estatística, nesta ordem."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de saída, uma banda por estatística solicitada. Se omitido, armazenado em memória."
              },
              "output_pairs": {
                "label": "Saída de pares",
                "description": "Raster opcional que recebe o cubo de coerência por par, uma banda por par."
              }
            }
          },
          "multivariate_clustering": {
            "name": "Agrupamento multivariado",
            "description": "Agrupa feições vetoriais pela similaridade de seus valores de atributo padronizados (k-means ou k-medoids com semente), escolhendo automaticamente o número de agrupamentos pelo pseudo-F de Calinski-Harabasz quando não fornecido, como o ArcGIS Multivariate Clustering.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "fields": {
                "label": "Campos",
                "description": "Campos numéricos de análise separados por vírgula (o espaço de atributos no qual agrupar)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (uma cópia da entrada com cluster_id/silhouette). Se omitido, armazenado em memória."
              },
              "num_clusters": {
                "label": "Número de agrupamentos",
                "description": "Número de agrupamentos k. Omita ou passe 0 para avaliar k = 2..15 automaticamente pelo pseudo-F de Calinski-Harabasz."
              },
              "method": {
                "label": "Método",
                "description": "Método de agrupamento: 'kmeans' (padrão) ou 'kmedoids' (PAM; adequado a contagens menores de feições)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente aleatória para a inicialização determinística do k-means++ / dos medoides (padrão 1)."
              }
            }
          },
          "near_3d": {
            "name": "Proximidade 3D",
            "description": "Encontra a feição mais próxima em distância 3D verdadeira, relatando distância, localização mais próxima, ângulos e deltas por eixo, como o ArcGIS Near 3D.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de feições de entrada (vértices 3D; a ausência de Z é tratada como 0)."
              },
              "near_features": {
                "label": "Feições próximas",
                "description": "Lista separada por vírgula das camadas nas quais pesquisar. Omita para fazer uma autojunção da camada de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Considerar apenas as feições próximas dentro desta distância 3D (unidades do mapa). Ilimitada quando omitida."
              },
              "location": {
                "label": "Localização",
                "description": "Acrescentar as coordenadas do ponto mais próximo como near_x / near_y / near_z (padrão false)."
              },
              "angle": {
                "label": "Ângulo",
                "description": "Acrescentar o rumo horizontal (near_bearing, graus a partir do norte) e o ângulo vertical (near_vert_angle, graus a partir da horizontal) até o ponto mais próximo (padrão false)."
              },
              "delta": {
                "label": "Delta",
                "description": "Acrescentar os deslocamentos por eixo near_dx / near_dy / near_dz (padrão false)."
              }
            }
          },
          "neighborhood_summary_statistics": {
            "name": "Estatísticas resumo de vizinhança",
            "description": "Para cada feição, resume os campos numéricos escolhidos sobre seus vizinhos (k mais próximos, dentro de uma distância ou contiguidade por aresta compartilhada), adicionando <campo>_nbr_mean/median/std/min/max/sum e uma contagem de vizinhos, como o ArcGIS Neighborhood Summary Statistics.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (pontos, linhas ou polígonos)."
              },
              "fields": {
                "label": "Campos",
                "description": "Campos numéricos separados por vírgula a resumir sobre os vizinhos."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (cópia da entrada + colunas de estatísticas dos vizinhos). Se omitido, armazenado em memória."
              },
              "neighborhood": {
                "label": "Vizinhança",
                "description": "'knn' (padrão), 'distance_band' ou 'contiguity' (polígonos que compartilham uma aresta)."
              },
              "neighbors": {
                "label": "Vizinhos",
                "description": "k para knn (padrão 8)."
              },
              "distance": {
                "label": "Distância",
                "description": "Distância da banda para distance_band (unidades do mapa)."
              },
              "weights": {
                "label": "Pesos",
                "description": "'uniform' (padrão) ou 'inverse_distance' (pondera a média e o desvio padrão)."
              }
            }
          },
          "non_maximum_suppression": {
            "name": "Supressão de não máximos",
            "description": "Mantém a detecção de maior confiança em cada agrupamento de sobreposição e descarta polígonos de menor pontuação cuja interseção sobre união excede um limiar (como o ArcGIS Non Maximum Suppression) — o deduplicador baseado em pontuação para saídas de detecção de objetos/OBIA que count_overlapping_features (conta, mantém todos), resolve_building_conflicts (desloca) e find_identical (apenas exatos) não fornecem.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Detecções poligonais de entrada (podem se sobrepor)."
              },
              "confidence_score_field": {
                "label": "Campo de pontuação de confiança",
                "description": "Campo numérico que contém a confiança/escore de cada detecção; o maior vence."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho dos polígonos de saída com as detecções sobreviventes. Se omitido, armazenado em memória."
              },
              "max_overlap_ratio": {
                "label": "Razão máxima de sobreposição",
                "description": "IoU acima do qual uma detecção de escore menor é suprimida (0-1, padrão 0.5)."
              },
              "class_value_field": {
                "label": "Campo de valor da classe",
                "description": "Campo opcional; apenas as detecções da mesma classe se suprimem mutuamente."
              }
            }
          },
          "observer_points": {
            "name": "Pontos de observação",
            "description": "Identifica quais de até 32 observadores conseguem ver cada célula, como uma máscara de bits por observador, e grava o raster de altura acima do solo que indica a altura a que um alvo precisaria ser elevado para se tornar visível (ArcGIS Observer Points / Viewshed 2 no modo OBSERVERS). O viewshed incluído retorna apenas uma contagem de estações visíveis, da qual nenhuma das respostas pode ser recuperada: uma contagem de 1 não diz qual torre cobre uma parcela, e uma contagem de 0 não distingue dois metros a menos de estar atrás de uma montanha.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de elevação de entrada (DEM ou DSM)."
              },
              "observers": {
                "label": "Observadores",
                "description": "Camada de pontos com as posições dos observadores, no máximo 32."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de visibilidade de saída: uma máscara de bits de observadores, ou uma contagem sob analysis_type 'frequency'. Se omitido, armazenado em memória."
              },
              "output_agl": {
                "label": "Saída AGL",
                "description": "Raster de altura acima do nível do solo de saída: a altura à qual um alvo deve ser elevado para se tornar visível. Sempre produzido; armazenado em memória quando nenhum caminho é fornecido."
              },
              "output_table": {
                "label": "Tabela de saída",
                "description": "Tabela de saída com uma linha por observador e as células e a área que ele enxerga. Sempre produzida; armazenada em memória quando nenhum caminho é fornecido."
              },
              "analysis_type": {
                "label": "Tipo de análise",
                "description": "'observers' (padrão; uma máscara de bits) ou 'frequency' (uma contagem, correspondendo ao viewshed incluído)."
              },
              "observer_offset": {
                "label": "Deslocamento do observador",
                "description": "Altura de cada observador acima da superfície, em unidades z (padrão 2.0)."
              },
              "observer_offset_field": {
                "label": "Campo de deslocamento do observador",
                "description": "Atributo que contém uma altura por observador, substituindo 'observer_offset'."
              },
              "target_offset": {
                "label": "Deslocamento do alvo",
                "description": "Altura do alvo acima da superfície, em unidades z (padrão 0.0)."
              },
              "max_distance": {
                "label": "Distância máxima",
                "description": "Ignorar as células mais distantes que isso de um observador, em unidades do mapa. Ilimitado por padrão."
              },
              "curvature": {
                "label": "Curvatura",
                "description": "Aplicar a correção de curvatura da Terra e refração (padrão false, ou seja, uma Terra plana)."
              },
              "refractivity_coefficient": {
                "label": "Coeficiente de refratividade",
                "description": "Coeficiente de refração atmosférica usado com 'curvature' (padrão 0.13)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) do raster de elevação (padrão 1)."
              }
            }
          },
          "optics_clustering": {
            "name": "Agrupamento OPTICS",
            "description": "Agrupamento multiescala baseado em densidade via OPTICS (como a opção OPTICS do ArcGIS Density-based Clustering): constrói uma ordenação de alcançabilidade e extrai agrupamentos de densidade variável com o método ξ-steep — o membro multiescala do trio DBSCAN/HDBSCAN/OPTICS que os dbscan e hdbscan autorais não cobrem.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada (CRS projetado; distâncias nas suas unidades)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (uma cópia da entrada com os campos de agrupamento). Se omitido, armazenado em memória."
              },
              "min_features_cluster": {
                "label": "Mínimo de feições por agrupamento",
                "description": "Número mínimo de pontos para a estimativa de densidade da distância central e para o menor agrupamento (>= 2). Padrão 5."
              },
              "search_distance": {
                "label": "Distância de busca",
                "description": "Distância máxima de alcançabilidade opcional (épsilon máximo). Padrão: ilimitada (todas as escalas)."
              },
              "cluster_sensitivity": {
                "label": "Sensibilidade do agrupamento",
                "description": "0-100; valores maiores detectam mais agrupamentos e mais compactos. Mapeia para xi = 1 - sensitivity/100. Padrão 95 (xi = 0.05)."
              }
            }
          },
          "optimal_corridor_connections": {
            "name": "Conexões ótimas de corredor",
            "description": "Calcula a rede de polígonos de corredores de menor custo de largura fixa que conecta de forma ótima todas as regiões de entrada sobre uma superfície de custo, mais as linhas centrais dos corredores. Ao contrário de cost_connectivity (linhas de largura zero) ou corridor (uma superfície de custo de par único), este emite polígonos de corredor prontos para uso para toda a rede de regiões. Como o ArcGIS Optimal Corridor Connections.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições poligonais de regiões a conectar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho dos polígonos de corredor de saída. Se omitido, armazenado em memória."
              },
              "cost_raster": {
                "label": "Raster de custo",
                "description": "Superfície de custo opcional. Sem ela, o custo é uniforme (euclidiano)."
              },
              "barriers": {
                "label": "Barreiras",
                "description": "Feições poligonais opcionais tratadas como intransponíveis."
              },
              "corridor_width": {
                "label": "Largura do corredor",
                "description": "Largura do corredor em unidades do mapa (padrão: 10 células)."
              },
              "output_lines": {
                "label": "Saída de linhas",
                "description": "Caminho opcional para as linhas centrais dos corredores."
              },
              "neighbor_option": {
                "label": "Opção de vizinhança",
                "description": "'spanning_tree' (padrão) mantém apenas os corredores necessários para conectar todas as regiões; 'all_pairs' emite um corredor para cada par de regiões."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de análise quando nenhum raster de custo é fornecido (padrão: extensão das regiões / 200)."
              }
            }
          },
          "optimal_interpolation": {
            "name": "Interpolação ótima",
            "description": "Corrige um campo raster de fundo com observações pontuais via o passo de análise de interpolação ótima / assimilação de dados x_a = x_b + B Hᵀ (H B Hᵀ + R)⁻¹ (y − H x_b), usando uma correlação espacial gaussiana com o comprimento de correlação dado e variâncias de erro por observação/fundo (como o Optimal Interpolation do ArcGIS). Ao contrário de IDW/krigagem/EBK, que interpolam apenas a partir de pontos, este mescla um campo gradeado a priori com observações e pode emitir um raster de variância do erro da análise.",
            "params": {
              "background": {
                "label": "Fundo",
                "description": "Campo raster de fundo (a priori) a ser corrigido."
              },
              "observations": {
                "label": "Observações",
                "description": "Camada de pontos de observação."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numérico na camada de observações que contém o valor observado."
              },
              "output": {
                "label": "Saída",
                "description": "Raster corrigido (de análise) de saída. Se omitido, armazenado em memória."
              },
              "correlation_length": {
                "label": "Comprimento de correlação",
                "description": "Comprimento de correlação espacial L em unidades do CRS (gaussiano). Padrão: 5% do maior lado do fundo."
              },
              "background_error_variance": {
                "label": "Variância do erro do fundo",
                "description": "Variância do erro do fundo σ_b² (padrão 1.0). Valores maiores => confia mais nas observações."
              },
              "obs_error_variance": {
                "label": "Variância do erro das observações",
                "description": "Variância do erro das observações σ_o² (padrão 1.0), usada quando nenhum campo de erro por ponto é fornecido. Valores maiores => confia mais no fundo."
              },
              "error_field": {
                "label": "Campo de erro",
                "description": "Campo opcional na camada de observações que fornece a variância do erro de cada ponto (substitui obs_error_variance onde presente e > 0)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) do fundo a corrigir (padrão 1)."
              },
              "max_obs": {
                "label": "Máximo de observações",
                "description": "Máximo de observações mais próximas usadas na resolução local de cada célula (padrão 50, faixa de 1 a 200)."
              },
              "analysis_error": {
                "label": "Erro da análise",
                "description": "Raster de saída opcional com a variância do erro de análise σ_a² (≤ σ_b²)."
              }
            }
          },
          "optimal_path_as_line": {
            "name": "Caminho ótimo como linha",
            "description": "Traça um raster de backlink de custo de cada destino de volta à sua origem e emite as rotas de menor custo como polilinhas (ArcGIS Optimal Path As Line / Cost Path As Polyline). cost_pathway apenas marca a rota como células raster e cost_connectivity cobre apenas o caso da rede de N locais, de modo que o caminho comum de origem a destino não tinha forma vetorial.",
            "params": {
              "destination": {
                "label": "Destino",
                "description": "Destinos a partir dos quais traçar: um raster (qualquer célula diferente de zero e não nodata) ou uma camada vetorial de pontos/multipontos."
              },
              "backlink": {
                "label": "Backlink",
                "description": "Raster de direção de retroligação de cost_back_link (0 = origem, 1-8 = direção em direção à origem, 1 = leste, no sentido anti-horário)."
              },
              "accumulation": {
                "label": "Acumulação",
                "description": "Raster de custo acumulado opcional (o out_distance de cost_back_link). Fornece o custo total de cada caminho e é exigido por path_type 'each_zone' e 'best_single'."
              },
              "path_type": {
                "label": "Tipo de caminho",
                "description": "Um entre 'each_cell' (padrão, um caminho por célula de destino), 'each_zone' (um caminho por zona de destino, a partir de sua célula mais barata) ou 'best_single' (o único caminho mais barato)."
              },
              "zone_field": {
                "label": "Campo de zona",
                "description": "Atributo que contém o identificador da zona para um destino vetorial sob path_type 'each_zone'. Os destinos raster usam o valor da célula como zona."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de polilinhas de saída. Se omitido, armazenado em memória."
              }
            }
          },
          "optimized_hot_spot_analysis": {
            "name": "Análise otimizada de pontos quentes",
            "description": "Agrega incidentes automaticamente, seleciona automaticamente a banda de distância da análise, executa o Gi* de Getis-Ord e relata uma classe de hotspot/coldspot corrigida por FDR (como o ArcGIS Optimized Hot Spot Analysis) — o invólucro de fluxo de trabalho que falta ao getis_ord_gi_star bruto incluído.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de feições de entrada (pontos de incidentes, ou feições com um campo de análise)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de pontos de saída com os resultados de Gi*. Se omitido, armazenado em memória."
              },
              "analysis_field": {
                "label": "Campo de análise",
                "description": "Campo numérico a analisar (ponderado, sem agregação). Omita para contar os incidentes."
              },
              "aggregation": {
                "label": "Agregação",
                "description": "Agregação dos incidentes quando não há analysis_field: 'fishnet' (contagem em grade; padrão) ou 'snap' (funde os coincidentes)."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de agregação / de ajuste em unidades do CRS. Padrão: o maior lado da extensão / 30."
              },
              "distance_band": {
                "label": "Banda de distância",
                "description": "Banda de distância de análise em unidades do CRS. Padrão: selecionada automaticamente pela intensidade máxima de agrupamento."
              }
            }
          },
          "optimized_outlier_analysis": {
            "name": "Análise otimizada de outliers",
            "description": "Agrega incidentes automaticamente, seleciona automaticamente a banda de distância da análise, executa o I de Moran local de Anselin e relata tipos de agrupamento/outlier corrigidos por FDR (HH/LL/HL/LH) — como o ArcGIS Optimized Outlier Analysis; o invólucro não temporal do Moran local que o local_morans_i_lisa bruto incluído e o local_outlier_analysis espaço-temporal não fornecem.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de feições de entrada (pontos de incidentes, ou feições com um campo de análise)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de pontos de saída com os resultados do I de Moran local. Se omitido, armazenado em memória."
              },
              "analysis_field": {
                "label": "Campo de análise",
                "description": "Campo numérico a analisar (ponderado, sem agregação). Omita para contar os incidentes."
              },
              "aggregation": {
                "label": "Agregação",
                "description": "Agregação dos incidentes quando não há analysis_field: 'fishnet' (contagem em grade; padrão) ou 'snap' (funde os coincidentes)."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de agregação / de ajuste em unidades do CRS. Padrão: o maior lado da extensão / 30."
              },
              "distance_band": {
                "label": "Banda de distância",
                "description": "Banda de distância de análise em unidades do CRS. Padrão: selecionada automaticamente pela intensidade máxima de agrupamento."
              },
              "fdr_alpha": {
                "label": "Alpha do FDR",
                "description": "Nível de taxa de falsas descobertas para a significância do COType (padrão 0.05)."
              }
            }
          },
          "ordinary_cokriging": {
            "name": "Interpolação por cokrigagem ordinária",
            "description": "Realiza interpolação espacial multivariada usando variáveis auxiliares para melhorar as predições da variável primária. Ideal quando os dados primários são esparsos mas dados secundários correlacionados são abundantes.",
            "params": {
              "primary_points": {
                "label": "Pontos primários",
                "description": "Camada vetorial com os pontos de treinamento da variável primária"
              },
              "primary_field": {
                "label": "Campo primário",
                "description": "Campo que contém os valores da variável primária"
              },
              "auxiliary_inputs": {
                "label": "Entradas auxiliares",
                "description": "Lista separada por vírgula dos caminhos dos arquivos das variáveis auxiliares"
              },
              "auxiliary_fields": {
                "label": "Campos auxiliares",
                "description": "Nomes dos campos das variáveis auxiliares separados por vírgula (vazio para rasters)"
              },
              "template_raster": {
                "label": "Raster modelo",
                "description": "Modelo raster que define a grade e o CRS de saída"
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster krigado de saída"
              },
              "output_variance": {
                "label": "Saída de variância",
                "description": "Caminho opcional do raster de variância da krigagem de saída"
              },
              "neighborhood_size": {
                "label": "Tamanho da vizinhança",
                "description": "Número de vizinhos mais próximos para a cokrigagem local (padrão: todos)"
              }
            }
          },
          "pairwise_comparison_weights": {
            "name": "Pesos por comparação pareada",
            "description": "Deriva pesos de critérios a partir de uma matriz de comparação par a par AHP (escala 1-9 de Saaty) como o autovetor principal normalizado, com uma verificação de consistência (lambda_max, índice de consistência, razão de consistência) — como o ArcGIS Assign Weights By Pairwise Comparison.",
            "params": {
              "matrix": {
                "label": "Matriz",
                "description": "A matriz de comparação recíproca n x n como uma matriz JSON bidimensional, por exemplo [[1,3,5],[0.333,1,2],[0.2,0.5,1]]. Forneça esta ou `input`."
              },
              "input": {
                "label": "Entrada",
                "description": "Arquivo CSV que contém a matriz de comparação (linhas puramente numéricas, ou rotuladas com uma linha de cabeçalho e uma coluna inicial de nomes). Forneça este ou `matrix`."
              },
              "criteria": {
                "label": "Critérios",
                "description": "Nomes dos critérios separados por vírgula (devem corresponder à ordem da matriz). Substitui os rótulos do CSV; o padrão é C1..Cn."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho da tabela de saída — um CSV (extensão .csv) ou uma tabela vetorial sem geometria (critério, peso, posição). Se omitido, armazenado em memória."
              }
            }
          },
          "path_distance": {
            "name": "Distância de caminho",
            "description": "Distância acumulada de menor custo em que cada passo paga a distância 3D verdadeira da superfície (a partir de um DEM) vezes um fator vertical dependente da declividade (caminhada de Tobler, linear, binário) vezes o atrito, como o ArcGIS Path Distance.",
            "params": {
              "source": {
                "label": "Origem",
                "description": "Raster de origens; as células com valores positivos e não nodata são origens (custo acumulado 0)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de custo acumulado de saída. Se omitido, armazenado em memória."
              },
              "cost": {
                "label": "Custo",
                "description": "Raster de atrito/custo de passagem opcional (padrão uniforme 1)."
              },
              "surface": {
                "label": "Superfície",
                "description": "Raster de elevação (DEM) opcional; habilita a distância de superfície 3D e os fatores verticais baseados na declividade."
              },
              "vertical_factor": {
                "label": "Fator vertical",
                "description": "'tobler' (padrão), 'linear', 'sym_linear', 'inverse_linear' ou 'binary'."
              },
              "slope_factor": {
                "label": "Fator de declividade",
                "description": "Coeficiente de penalidade da declividade para os fatores lineares (padrão 1)."
              },
              "zero_factor": {
                "label": "Fator zero",
                "description": "Piso mínimo do fator vertical (em descida) para linear/inverse_linear (padrão 0.1)."
              },
              "max_slope": {
                "label": "Declividade máxima",
                "description": "Para 'binary': as declividades mais íngremes que este número de graus são intransponíveis (padrão 30)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) para todos os rasters (padrão 1)."
              }
            }
          },
          "percentile_contours": {
            "name": "Curvas de nível por percentis",
            "description": "Emite polígonos aninhados que envolvem as células mais extremas de uma superfície, limiarizados por percentil de valor ou por percentil de massa acumulada (volume).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de superfície contínua de entrada (densidade, aptidão, elevação)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de polígonos de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "percentiles": {
                "label": "Percentis",
                "description": "Percentis separados por vírgula em [0,100] (por exemplo, \"50,90,95\"). Padrão \"90\"."
              },
              "mode": {
                "label": "Modo",
                "description": "'value' (padrão): células iguais ou acima do valor do p-ésimo percentil. 'volume': as células mais altas que carregam os (100-p)% superiores do valor acumulado."
              },
              "ignore_negative": {
                "label": "Ignorar negativos",
                "description": "Excluir os valores de célula negativos da ordenação e da saída. Padrão false."
              },
              "smooth": {
                "label": "Suavizar",
                "description": "Simplificar os polígonos de bordas de células com Douglas-Peucker (tolerância de ~1,5 células) para suavizar o efeito de escada. Padrão false."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler (padrão 1)."
              }
            }
          },
          "pivot_table": {
            "name": "Tabela dinâmica",
            "description": "Remodela uma tabela de atributos de formato longo para largo: uma linha de saída por combinação única dos campos de identidade e uma coluna por valor distinto do campo pivô, preenchida a partir do campo de valor. Como o ArcGIS Pivot Table.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial ou tabela de atributos de entrada em formato longo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho da tabela de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "fields": {
                "label": "Campos",
                "description": "Nome(s) de campo separados por vírgula ou ponto e vírgula que identificam uma linha de saída; repassados inalterados."
              },
              "pivot_field": {
                "label": "Campo pivô",
                "description": "Campo cujos valores distintos se tornam novas colunas."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo que fornece os valores das células."
              },
              "aggregate": {
                "label": "Agregar",
                "description": "Aplicado quando uma célula de linha/coluna tem múltiplos registros de origem: 'first' (padrão), 'sum', 'mean', 'min', 'max', 'count'."
              }
            }
          },
          "pmtiles_extract": {
            "name": "Extrair PMTiles",
            "description": "Extrai um subconjunto por caixa delimitadora/zoom de um arquivo PMTiles em um novo arquivo (por exemplo, um mapa base off-line a partir de uma compilação planetária do Protomaps).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo .pmtiles de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do arquivo .pmtiles de saída."
              },
              "bbox": {
                "label": "Caixa delimitadora",
                "description": "Caixa delimitadora WGS84 como 'min_lon,min_lat,max_lon,max_lat'."
              },
              "min_zoom": {
                "label": "Zoom mínimo",
                "description": "Nível de zoom mais baixo a incluir (padrão 0, para que o mapa continue utilizável quando afastado)."
              },
              "max_zoom": {
                "label": "Zoom máximo",
                "description": "Nível de zoom mais alto a incluir (padrão: o zoom máximo do arquivo de origem)."
              },
              "max_tiles": {
                "label": "Máximo de ladrilhos",
                "description": "Abortar se a seleção envolver mais ladrilhos que este número (padrão 2000000)."
              },
              "url": {
                "label": "URL",
                "description": "URL PMTiles HTTP(S). Forneça url ou input; as fontes HTTP usam requisições por intervalo de bytes (o servidor deve permitir leituras Range entre origens)."
              },
              "bbox_crs": {
                "label": "CRS da caixa delimitadora",
                "description": "Código EPSG das coordenadas da bbox. O padrão é 4326 (WGS84 lon/lat); os demais CRSs são reprojetados para 4326."
              }
            }
          },
          "point_statistics": {
            "name": "Estatísticas de pontos",
            "description": "Rasteriza uma estatística de janela móvel de um atributo de feições pontuais: para cada célula de saída, uma vizinhança (círculo ou retângulo) coleta os valores do campo numérico escolhido dos pontos dentro dela e os reduz a mean/majority/maximum/median/minimum/minority/range/std/sum/variety. Como o ArcGIS Point Statistics; complementa os line_density/heat_map apenas de densidade e o neighborhood_summary_statistics apenas vetorial.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada (Point / MultiPoint)."
              },
              "field": {
                "label": "Campo",
                "description": "Campo de atributo numérico a resumir."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "statistic": {
                "label": "Estatística",
                "description": "Estatística por vizinhança: mean (padrão), majority, maximum, median, minimum, minority, range, std, sum ou variety."
              },
              "neighborhood": {
                "label": "Vizinhança",
                "description": "Forma da vizinhança: 'circle' (padrão, usa 'radius') ou 'rectangle' (um quadrado de lado 2*radius)."
              },
              "radius": {
                "label": "Raio",
                "description": "Raio da vizinhança / semilado do retângulo (metros para um CRS geográfico, unidades do CRS caso contrário). Padrão: o menor lado da extensão / 20."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída (mesmas unidades de radius). Padrão: radius / 5."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Substituir o código EPSG do CRS de entrada (por exemplo, quando a camada não está rotulada). O valor 4326 aciona a projeção métrica."
              }
            }
          },
          "points_to_line": {
            "name": "Pontos para linha",
            "description": "Constrói feições de polilinha a partir de pontos: uma linha por valor distinto de line_field, vértices ordenados por sort_field, com um indicador opcional de fechamento da linha.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de pontos de entrada (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de linhas de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "line_field": {
                "label": "Campo de linha",
                "description": "Atributo cujos valores distintos particionam os pontos em linhas separadas (uma polilinha por valor). Se omitido, todos os pontos formam uma única linha."
              },
              "sort_field": {
                "label": "Campo de ordenação",
                "description": "Atributo que define a ordem dos vértices dentro de cada linha. Os valores numéricos são ordenados numericamente e os de texto, lexicograficamente. Se omitido, é usada a ordem das feições de entrada."
              },
              "close_line": {
                "label": "Fechar linha",
                "description": "Acrescentar o primeiro vértice ao final de cada linha, fechando-a em um anel. Padrão false."
              }
            }
          },
          "points_to_path": {
            "name": "Pontos para trajeto",
            "description": "Conecta pontos em feições de polilinha, ordenados por um campo e (opcionalmente) agrupados em um caminho por valor, com ordenação natural e fechamento de caminho opcionais.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de pontos de entrada (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de linhas de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "order_field": {
                "label": "Campo de ordem",
                "description": "Atributo que define a ordem de conexão dos pontos dentro de cada caminho. Os valores numéricos são ordenados numericamente e os de texto, lexicograficamente. Se omitido, é usada a ordem das feições de entrada."
              },
              "group_field": {
                "label": "Campo de agrupamento",
                "description": "Atributo que particiona os pontos em caminhos separados (uma linha por valor distinto). Se omitido, todos os pontos formam um único caminho."
              },
              "natural_sort": {
                "label": "Ordenação natural",
                "description": "Ordenar os valores de ordenação textuais de forma natural, para que 'a9' venha antes de 'a10'. Padrão false."
              },
              "close_path": {
                "label": "Fechar caminho",
                "description": "Acrescentar o primeiro vértice ao final de cada caminho, fechando-o em um anel. Padrão false."
              }
            }
          },
          "polygon_neighbors": {
            "name": "Vizinhos de polígono",
            "description": "Constrói uma tabela de adjacência (contiguidade) de polígonos: pares vizinhos com o comprimento de sua fronteira compartilhada e uma contagem de toques pontuais, como o ArcGIS Polygon Neighbors.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho da tabela de saída — um CSV (extensão .csv) ou uma tabela vetorial sem geometria. Se omitido, armazenado em memória."
              },
              "id_field": {
                "label": "Campo de ID",
                "description": "Campo que identifica cada polígono na tabela. Padrão: o índice da feição."
              },
              "both_sides": {
                "label": "Ambos os lados",
                "description": "Emitir cada par de vizinhos duas vezes (origem→vizinho e vizinho→origem). Padrão false (uma vez por par)."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Quantizar os vértices em uma grade deste tamanho (unidades do CRS) antes de fazer a correspondência dos limites. Padrão 0 (coordenadas exatas)."
              }
            }
          },
          "polygon_volume": {
            "name": "Volume de polígono",
            "description": "Volume e área 3D da superfície por polígono de um raster de superfície acima/abaixo da altura do plano de referência de cada feição, como o ArcGIS Polygon Volume — a contraparte zonal de surface_volume.",
            "params": {
              "surface": {
                "label": "Superfície",
                "description": "Raster de superfície de elevação de entrada."
              },
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos (zonas)."
              },
              "height_field": {
                "label": "Campo de altura",
                "description": "Campo de atributo que fornece a elevação do plano de referência de cada polígono."
              },
              "direction": {
                "label": "Direção",
                "description": "Qual lado de cada plano integrar: 'above' (padrão), 'below' ou 'both'."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler da superfície (padrão 1)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              }
            }
          },
          "porous_puff": {
            "name": "Pluma porosa",
            "description": "Advecção-dispersão analítica de uma massa instantânea de contaminante através da água subterrânea (como o ArcGIS Porous Puff): avança o centro da pluma a partir de um ponto de liberação ao longo de um campo de velocidade de Darcy (magnitude+direção, conforme produzido por darcy_flow), depois avalia a concentração gaussiana 2D de forma fechada em coordenadas alinhadas ao caminho, escalonada por porosidade, espessura, retardo e decaimento de primeira ordem.",
            "params": {
              "magnitude": {
                "label": "Magnitude",
                "description": "Raster de magnitude da velocidade de Darcy, como produzido pelo 'output' de darcy_flow. O tamanho da célula e a extensão são obtidos deste raster."
              },
              "direction": {
                "label": "Direção",
                "description": "Raster de direção de fluxo de Darcy (azimute em graus a partir do norte, no sentido horário, no sentido do gradiente descendente), como produzido pelo 'direction' de darcy_flow. Deve estar corregistrado com 'magnitude'."
              },
              "x": {
                "label": "X",
                "description": "Coordenada X do ponto de liberação (unidades do mapa, mesmo CRS dos rasters de velocidade)."
              },
              "y": {
                "label": "Y",
                "description": "Coordenada Y do ponto de liberação (unidades do mapa)."
              },
              "mass": {
                "label": "Massa",
                "description": "Massa de contaminante liberada (deve ser positiva)."
              },
              "porosity": {
                "label": "Porosidade",
                "description": "Porosidade efetiva: uma constante numérica em (0, 1] ou o caminho de um raster corregistrado com 'magnitude'."
              },
              "thickness": {
                "label": "Espessura",
                "description": "Espessura do aquífero: uma constante numérica positiva ou o caminho de um raster corregistrado com 'magnitude'."
              },
              "dispersivity_long": {
                "label": "Dispersividade longitudinal",
                "description": "Dispersividade longitudinal (unidades de comprimento; deve ser positiva)."
              },
              "dispersivity_trans": {
                "label": "Dispersividade transversal",
                "description": "Dispersividade transversal (unidades de comprimento; deve ser positiva)."
              },
              "retardation": {
                "label": "Retardo",
                "description": "Fator de retardo (padrão 1, deve ser >= 1)."
              },
              "decay": {
                "label": "Decaimento",
                "description": "Constante de decaimento de primeira ordem (padrão 0, deve ser >= 0; mesmas unidades de tempo de 'time')."
              },
              "time": {
                "label": "Hora",
                "description": "Lista separada por vírgula de um ou mais tempos decorridos positivos. O último tempo é gravado em 'output'; todos os tempos (incluindo o último) são relatados na saída 'time_series'."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de concentração de saída para o último tempo em 'time'. Se omitido, armazenado em memória."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler dos rasters de magnitude/direção (padrão 1)."
              },
              "step": {
                "label": "Passo",
                "description": "Comprimento do passo de marcha do centro da pluma em unidades do CRS (padrão: o tamanho da célula do raster de magnitude)."
              },
              "max_steps": {
                "label": "Máximo de passos",
                "description": "Máximo de passos de marcha por tempo solicitado (padrão 1000)."
              }
            }
          },
          "predict_using_trend_raster": {
            "name": "Prever com raster de tendência",
            "description": "Avalia os rasters de declividade/intercepto ajustados por generate_trend_raster em um ou mais instantes, produzindo superfícies preditas, como o ArcGIS Predict Using Trend Raster.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de declividade (tendência) gravado por generate_trend_raster."
              },
              "intercept": {
                "label": "Intercepto",
                "description": "Raster de intercepto gravado por generate_trend_raster (seu 'intercept_output'), corregistrado ao raster de declividade."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de saída para o primeiro tempo previsto. Se omitido, os resultados são armazenados em memória."
              },
              "times": {
                "label": "Tempos",
                "description": "Tempos separados por vírgula nos quais prever, na mesma escala usada no ajuste (por exemplo, '12,18,24'). Substitui start/end/interval."
              },
              "start": {
                "label": "Início",
                "description": "Primeiro tempo de um intervalo gerado (usado quando 'times' está ausente)."
              },
              "end": {
                "label": "Fim",
                "description": "Último tempo de um intervalo gerado (inclusive; usado quando 'times' está ausente)."
              },
              "interval": {
                "label": "Intervalo",
                "description": "Passo entre os tempos gerados (padrão 1; usado quando 'times' está ausente)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler de cada raster de coeficientes (padrão 1)."
              }
            }
          },
          "presence_only_prediction": {
            "name": "Predição somente com presenças",
            "description": "Modelagem de adequabilidade de espécies/habitat no estilo MaxEnt: ajusta um modelo logístico com regularização L1 contrastando pontos de presença com uma amostra de fundo com semente de rasters explicativos (expansão de base linear/quadrática/articulação), depois prediz uma superfície de probabilidade de presença mais um relatório de importância das variáveis — como o ArcGIS Presence-only Prediction (MaxEnt).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de presença de entrada (ocorrências observadas)."
              },
              "explanatory": {
                "label": "Explicativa",
                "description": "Lista separada por vírgula dos caminhos dos rasters explicativos (a pilha de covariáveis). Amostrados nas localizações de presença + de fundo; o primeiro raster define a grade de saída."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster de probabilidade de presença de saída. Se omitido, armazenado em memória."
              },
              "report": {
                "label": "Relatório",
                "description": "Caminho opcional de saída para uma tabela CSV de coeficientes / importância das variáveis."
              },
              "features": {
                "label": "Feições",
                "description": "Classes de variáveis de expansão de base separadas por vírgula: qualquer uma entre 'linear', 'quadratic', 'hinge'. Padrão 'linear,quadratic'."
              },
              "background": {
                "label": "Fundo",
                "description": "Número de amostras de fundo sorteadas da pilha raster. Padrão 1000 (limitado ao número de células válidas)."
              },
              "regularization": {
                "label": "Regularização",
                "description": "Intensidade da regularização L1 (lasso) sobre as variáveis padronizadas. Valores maiores = modelo mais simples. Padrão 0.01."
              },
              "hinge_knots": {
                "label": "Nós de articulação",
                "description": "Número de nós interiores por covariável para as variáveis hinge (usado apenas quando 'hinge' está habilitado). Padrão 10."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente aleatória para a amostra de fundo determinística (padrão 1)."
              }
            }
          },
          "propagate_displacement": {
            "name": "Propagar deslocamento",
            "description": "Propaga o deslocamento introduzido por resolve_road_conflicts (ou qualquer camada de ligações de deslocamento de dois pontos) para feições próximas interpolando as ligações esparsas em um campo IDW suave: feições rígidas (edificações, parcelas) recebem uma única translação média, linhas flexíveis recebem uma curvatura por vértice suavizada pelo comprimento de arco, como o ArcGIS Propagate Displacement.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada a ajustar (qualquer tipo de geometria)."
              },
              "links": {
                "label": "Ligações",
                "description": "Ligações de deslocamento: uma camada de linhas de 2 vértices por ligação, primeiro vértice = localização original, último vértice = localização deslocada (o mesmo esquema que a saída 'links' de resolve_road_conflicts e a entrada 'links' de rubbersheet_features usam)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "adjustment_style": {
                "label": "Estilo de ajuste",
                "description": "'auto' (padrão: translação rígida para pontos/polígonos, dobra por vértice para linhas), 'preserve_orientation' (translação rígida pelo campo promediado sobre o contorno) ou 'solid' (translação rígida pelo campo amostrado uma única vez no ponto representativo da feição)."
              },
              "search_distance": {
                "label": "Distância de busca",
                "description": "Distância máxima (unidades do CRS) que uma ligação pode influenciar um ponto de amostra; as ligações mais distantes são ignoradas. Padrão: ilimitada (cada ligação contribui em toda parte)."
              }
            }
          },
          "pycnophylactic_interpolation": {
            "name": "Interpolação picnofilática",
            "description": "Interpolação areal de Tobler com preservação de massa: transforma contagens agregadas por zona em uma superfície de densidade suave cujas somas por zona correspondem exatamente à entrada (como o ArcGIS Areal Interpolation) — a alternativa suave à suposição de densidade uniforme do apportion_polygon.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de polígonos de entrada com um campo de contagem (variável extensiva)."
              },
              "count_field": {
                "label": "Campo de contagem",
                "description": "Campo que contém a contagem total de cada zona (população, etc.)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de densidade de saída (valor por célula; as somas por zona são iguais às da entrada). Se omitido, armazenado em memória."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do CRS (padrão: extensão / 200)."
              },
              "iterations": {
                "label": "Iterações",
                "description": "Máximo de iterações de suavização (padrão 100)."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Parar quando a variação máxima por célula ficar abaixo desta fração da densidade média (padrão 0.001)."
              },
              "non_negative": {
                "label": "Não negativo",
                "description": "Limitar os valores negativos a 0 e redistribuir para preservar a massa (padrão true)."
              }
            }
          },
          "radiometric_terrain_flattening": {
            "name": "Aplanamento radiométrico do terreno",
            "description": "Remove o sinal de brilho topográfico do retroespalhamento SAR calibrado substituindo a área de referência de terra plana pela área local iluminada derivada do DEM, e sinaliza layover e sombra de radar (ArcGIS Apply Radiometric Terrain Flattening). O apply_radiometric_calibration da rodada 17 normaliza com o ângulo de incidência do elipsoide, de modo que em terreno inclinado seu sigma0/gamma0 acompanha a topografia em vez da cobertura do solo — rotineiramente em mais de 6 dB, o que excede a diferença floresta/solo exposto que se pretende medir.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de retroespalhamento SAR calibrado (beta zero por padrão; ver 'input_calibration')."
              },
              "dem": {
                "label": "DEM",
                "description": "Modelo digital de elevação, corregistrado com o raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de retroespalhamento achatado pelo terreno de saída. Se omitido, armazenado em memória."
              },
              "output_scattering_area": {
                "label": "Saída de área de espalhamento",
                "description": "Razão de saída entre a área realmente iluminada e a área de Terra plana. Sempre produzida; armazenada em memória quando nenhum caminho é fornecido."
              },
              "output_geometry_mask": {
                "label": "Saída de máscara de geometria",
                "description": "Máscara de saída: 0 normal, 1 sobreposição (layover), 2 sombra de radar. Sempre produzida; armazenada em memória quando nenhum caminho é fornecido."
              },
              "incidence_angle": {
                "label": "Ângulo de incidência",
                "description": "Ângulo de incidência sobre o elipsoide em graus: uma constante, ou o caminho de um raster por célula. Obrigatório."
              },
              "look_azimuth": {
                "label": "Azimute de visada",
                "description": "Azimute da bússola em graus do alvo em direção ao sensor (padrão 270, ou seja, uma passagem ascendente com visada à direita). Uma passagem descendente do Sentinel-1 com visada à direita é de cerca de 283."
              },
              "input_calibration": {
                "label": "Calibração de entrada",
                "description": "O que a entrada já é: 'beta0' (padrão), 'sigma0_ellipsoid' ou 'gamma0_ellipsoid'. Os dois últimos são convertidos de volta para beta zero usando o ângulo do elipsoide antes do achatamento."
              },
              "calibration_type": {
                "label": "Tipo de calibração",
                "description": "Convenção de saída: 'gamma0' (padrão) ou 'sigma0'."
              },
              "input_units": {
                "label": "Unidades de entrada",
                "description": "'intensity' (padrão), 'dn', 'amplitude' ou 'db'."
              },
              "output_units": {
                "label": "Unidades de saída",
                "description": "'linear' (padrão) ou 'db'."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Multiplicador que converte as unidades z do DEM nas unidades XY do raster (padrão 1.0)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) do raster de entrada a achatar (padrão 1)."
              }
            }
          },
          "raster_domain": {
            "name": "Domínio do raster",
            "description": "Traça o limite da região de dados válidos de um raster como polígonos (ou polilinhas fechadas), preservando buracos internos de nodata (ArcGIS Raster Domain). O layer_footprint_raster incluído retorna a extensão retangular completa, que, para uma cena rotacionada, uma bacia recortada ou um ladrilho de mosaico irregular, pode ser várias vezes a cobertura real; polygonize poderia fazê-lo, mas apenas a partir de uma máscara de validade 0/1 que o usuário precisa construir antes, o que é a tarefa inteira.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada cujo contorno de dados válidos se deseja obter."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de polígonos ou de linhas de saída. Se omitido, armazenado em memória."
              },
              "geometry_type": {
                "label": "Tipo de geometria",
                "description": "'polygon' (padrão) ou 'line' para o limite como polilinhas fechadas."
              },
              "ignore_value": {
                "label": "Valor a ignorar",
                "description": "Tratar também este valor como inválido, além do próprio nodata do raster (comumente 0 para imagens com borda preta)."
              },
              "min_value": {
                "label": "Valor mínimo",
                "description": "Tratar como inválidos os valores abaixo deste."
              },
              "max_value": {
                "label": "Valor máximo",
                "description": "Tratar como inválidos os valores acima deste."
              },
              "min_area": {
                "label": "Área mínima",
                "description": "Descartar as partes do contorno menores que esta área em unidades do mapa ao quadrado, o que remove o ruído ao redor de uma margem irregular."
              },
              "fill_holes": {
                "label": "Preencher buracos",
                "description": "Descartar os buracos interiores e retornar o contorno maciço (padrão false)."
              },
              "all_bands": {
                "label": "Todas as bandas",
                "description": "Exigir que uma célula seja válida em todas as bandas, e não apenas na banda selecionada (padrão false)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a testar (padrão 1). Ignorado quando 'all_bands' está definido."
              }
            }
          },
          "raster_normalize": {
            "name": "Normalizar raster",
            "description": "Normaliza uma banda raster por mín-máx para o intervalo [0, 1].",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é armazenado em memória."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a normalizar (padrão 1)."
              }
            }
          },
          "raster_to_h3": {
            "name": "Raster para células H3",
            "description": "Agrega valores de bandas raster em células da grade global discreta H3 (média, soma, mínimo, máximo, contagem, mediana).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada (deve ser geográfico lon/lat, EPSG:4326)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída; o driver é obtido de sua extensão (.geojson, .fgb, .parquet, ...). Se omitido, a camada é armazenada em memória."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Resolução H3 de 0 (mais grosseira) a 15 (mais fina); padrão 8 (células de ~0,7 km²)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda raster (base 1) a agregar (padrão 1)."
              },
              "aggregate": {
                "label": "Agregar",
                "description": "Como combinar os valores de pixel por célula: mean, sum, min, max, count ou median (padrão mean)."
              }
            }
          },
          "raster_to_tiles": {
            "name": "Raster para ladrilhos XYZ",
            "description": "Fatia um raster em uma pirâmide de ladrilhos PNG XYZ em Web Mercator (EPSG:3857) para mapas web.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada. Deve conter um CRS de origem (EPSG ou WKT)."
              },
              "output_dir": {
                "label": "Diretório de saída",
                "description": "Diretório de saída para a árvore de ladrilhos {z}/{x}/{y}.png (por exemplo, /work/tiles)."
              },
              "min_zoom": {
                "label": "Zoom mínimo",
                "description": "Nível de zoom mínimo (padrão: um único zoom nativo correspondente à resolução do raster)."
              },
              "max_zoom": {
                "label": "Zoom máximo",
                "description": "Nível de zoom máximo (padrão: o mesmo de min_zoom)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a renderizar (padrão 1)."
              },
              "colormap": {
                "label": "Mapa de cores",
                "description": "Mapa de cores: viridis (padrão), magma, turbo, terrain ou grayscale."
              },
              "method": {
                "label": "Método",
                "description": "Método de reamostragem para a reprojeção e a amostragem: bilinear (padrão), nearest, cubic."
              },
              "min": {
                "label": "Mínimo",
                "description": "Valor mapeado para o extremo inferior do mapa de cores (padrão: o mínimo da banda)."
              },
              "max": {
                "label": "Máximo",
                "description": "Valor mapeado para o extremo superior do mapa de cores (padrão: o máximo da banda)."
              }
            }
          },
          "raster_to_weighted_points": {
            "name": "Raster para pontos ponderados",
            "description": "Distribui um número fixo de pontos sobre um raster de modo que sua densidade seja proporcional ao valor da célula, colocando-os em um padrão determinístico de reticulado de Fibonacci, espiral, circular ou de centroide (ArcGIS Raster To Weighted Points). Nada em nenhum dos registros pondera por uma superfície: random_sample e random_points_in_polygon são uniformes, create_spatially_balanced_points espalha deliberadamente os pontos de forma uniforme, e raster_to_vector_points emite um por célula sem rarefação ou ponderação. A alocação usa o método do maior resto e não precisa de RNG, de modo que os resultados são reprodutíveis em WASM.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de superfície de entrada; os valores das células são os pesos."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de pontos de saída. Se omitido, armazenado em memória."
              },
              "max_number_of_points": {
                "label": "Número máximo de pontos",
                "description": "Total de pontos a distribuir (padrão 1000)."
              },
              "method": {
                "label": "Método",
                "description": "Posicionamento dentro da célula: 'fibonacci_lattice' (padrão), 'fibonacci_spiral', 'circular' ou 'centroid'."
              },
              "min_value": {
                "label": "Valor mínimo",
                "description": "As células com peso igual ou inferior a este valor não recebem pontos (padrão 0). Os pesos negativos são sempre excluídos."
              },
              "max_points_per_cell": {
                "label": "Máximo de pontos por célula",
                "description": "Limitar os pontos que uma única célula pode receber, de modo que uma célula intensa não absorva todo o orçamento."
              },
              "include_weight": {
                "label": "Incluir peso",
                "description": "Gravar o valor da célula de origem em cada ponto (padrão true)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) que fornece os pesos (padrão 1)."
              }
            }
          },
          "read_geoparquet": {
            "name": "Ler GeoParquet",
            "description": "Lê um arquivo GeoParquet e o converte para outro formato vetorial (ou o armazena em memória).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo GeoParquet de entrada (por exemplo, /work/data.parquet)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída; o formato é obtido de sua extensão (.geojson, .fgb, .shp, .gpkg, ...). Se omitido, a camada é armazenada em memória."
              }
            }
          },
          "reclassify_field": {
            "name": "Reclassificar campo",
            "description": "Classifica um atributo vetorial numérico em classes (como o ArcGIS Reclassify Field): equal_interval, defined_interval, quantile, natural_breaks (Jenks), std_dev ou geometric_interval, gravando um campo de classe inteiro mais um campo opcional de valor de quebra.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial (ou tabela) de entrada com o campo numérico a classificar."
              },
              "field": {
                "label": "Campo",
                "description": "Nome do campo numérico a classificar."
              },
              "output": {
                "label": "Saída",
                "description": "Camada vetorial de saída com o campo de classe adicionado. Se omitido, armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "Método de classificação: equal_interval, defined_interval, quantile, natural_breaks, std_dev ou geometric_interval (padrão natural_breaks)."
              },
              "classes": {
                "label": "Classes",
                "description": "Número de classes para equal_interval/quantile/natural_breaks/geometric_interval (padrão 5). Ignorado por defined_interval e std_dev, cujo número de classes decorre dos dados."
              },
              "interval": {
                "label": "Intervalo",
                "description": "Largura fixa das classes para defined_interval (obrigatória para esse método)."
              },
              "std_dev_interval": {
                "label": "Intervalo de desvio padrão",
                "description": "Tamanho do intervalo para std_dev, em unidades de desvio padrão (padrão 1.0; por exemplo, 0.5 para faixas de meio sigma)."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Nome do campo inteiro de classe a adicionar (padrão 'class')."
              },
              "break_field": {
                "label": "Campo de quebra",
                "description": "Se fornecido, também adiciona um campo de ponto flutuante com o limite superior da classe em que cada feição se enquadra."
              }
            }
          },
          "reconstruct_tracks": {
            "name": "Reconstruir trajetos",
            "description": "Transforma pontos com carimbo de tempo em polilinhas de trajeto de movimento (agrupados por ID, ordenados por tempo, divididos em lacunas de tempo/distância) com estatísticas por trajeto, e opcionalmente encontra localizações de permanência onde o móvel pausou — como o ArcGIS Reconstruct Tracks / Find Dwell Locations.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada com observações com carimbo de tempo."
              },
              "track_field": {
                "label": "Campo de trajeto",
                "description": "Campo que identifica cada trajeto/objeto em movimento (por exemplo, o identificador de um veículo ou animal)."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo que contém o tempo de cada ponto: segundos numéricos ou um carimbo de tempo ISO-8601."
              },
              "output": {
                "label": "Saída",
                "description": "Vetor de linhas de trajetos de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "time_gap": {
                "label": "Lacuna de tempo",
                "description": "Iniciar um novo segmento de trajeto quando a lacuna temporal entre pontos exceder este número de segundos. Padrão: sem divisão temporal."
              },
              "distance_gap": {
                "label": "Lacuna de distância",
                "description": "Iniciar um novo segmento de trajeto quando a distância entre pontos exceder este valor (metros para um CRS geográfico, unidades do CRS caso contrário). Padrão: sem divisão por distância."
              },
              "dwells": {
                "label": "Permanências",
                "description": "Caminho opcional dos pontos de saída para as localizações de permanência (onde o objeto em movimento parou)."
              },
              "dwell_distance": {
                "label": "Distância de permanência",
                "description": "Raio máximo de uma permanência, nas unidades de distância acima. Padrão 50."
              },
              "dwell_min_duration": {
                "label": "Duração mínima de permanência",
                "description": "Tempo mínimo (segundos) que um objeto em movimento deve permanecer dentro de dwell_distance para contar como uma permanência. Padrão 300."
              }
            }
          },
          "reduce_point_density": {
            "name": "Reduzir a densidade de pontos",
            "description": "Rarefaz uma camada de pontos vetoriais de modo que dois pontos retidos nunca estejam mais próximos do que um espaçamento mínimo, ou mantém um ponto por célula da grade (ArcGIS Reduce Point Density). lidar_thin é apenas para LAS e find_identical captura apenas duplicatas exatas, de modo que camadas densas de sondagens, GPS e sensores não podiam ser decimadas antes da interpolação.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos (ou multipontos) de entrada."
              },
              "method": {
                "label": "Método",
                "description": "'spacing' (padrão): rarefação gulosa por separação mínima. 'bin': mantém um ponto por célula da grade."
              },
              "min_distance": {
                "label": "Distância mínima",
                "description": "Separação mínima entre os pontos mantidos, nas unidades da camada. Obrigatória pelo método 'spacing'."
              },
              "bin_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula da grade nas unidades da camada. Obrigatório pelo método 'bin'."
              },
              "sort_field": {
                "label": "Campo de ordenação",
                "description": "Atributo numérico que decide qual ponto vence um conflito. Sem ele, a ordem de entrada decide."
              },
              "sort_order": {
                "label": "Ordem de classificação",
                "description": "'descending' (padrão, o maior sort_field vence) ou 'ascending'."
              },
              "keep_field": {
                "label": "Campo a manter",
                "description": "Atributo que marca os pontos que devem ser sempre mantidos (diferente de zero / verdadeiro / não vazio). Use para perigos como sondagens de bancos de areia."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de saída com os pontos mantidos. Se omitido, armazenado em memória."
              },
              "output_removed": {
                "label": "Saída de removidos",
                "description": "Camada opcional que recebe os pontos descartados, para revisão."
              }
            }
          },
          "regression_kriging": {
            "name": "Krigagem de regressão",
            "description": "Krigagem com deriva externa: faz a regressão dos valores amostrais sobre rasters de covariáveis exaustivos, ajusta um variograma aos resíduos e adiciona o campo de resíduos krigado de volta à superfície de regressão (ArcGIS EBK Regression Prediction). Toda variante de krigagem disponível modela a tendência nas coordenadas ou precisa de amostras pontuais secundárias; nenhuma aceita rasters de covariáveis, que é o que a maior parte da geoestatística aplicada realmente precisa.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos de amostra."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Atributo numérico a prever."
              },
              "covariates": {
                "label": "Covariáveis",
                "description": "Caminhos dos rasters de covariáveis separados por vírgula ou ponto e vírgula, exaustivos sobre a grade de predição. O primeiro define a grade de saída."
              },
              "variogram_model": {
                "label": "Modelo de variograma",
                "description": "Modelo de variograma dos resíduos: 'spherical' (padrão), 'exponential' ou 'gaussian'."
              },
              "lag_count": {
                "label": "Número de defasagens",
                "description": "Número de intervalos de defasagem usados para ajustar o variograma dos resíduos (padrão 12)."
              },
              "max_neighbors": {
                "label": "Máximo de vizinhos",
                "description": "Amostras mais próximas usadas no sistema de krigagem de cada célula (padrão 16)."
              },
              "bilinear": {
                "label": "Bilinear",
                "description": "Amostrar as covariáveis bilinearmente nas localizações dos pontos em vez de usar a célula mais próxima (padrão false)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de predição de saída. Se omitido, armazenado em memória."
              },
              "output_error": {
                "label": "Saída de erro",
                "description": "Raster de erro padrão da predição (erro padrão de krigagem do campo de resíduos). Sempre produzido."
              }
            }
          },
          "regularize_adjacent_building_footprint": {
            "name": "Regularizar contornos de edificações adjacentes",
            "description": "Regulariza um grupo de contornos de edificações adjacentes para uma orientação compartilhada, de modo que paredes compartilhadas permaneçam paralelas e colineares (como o ArcGIS Regularize Adjacent Building Footprint) — a contraparte consistente por grupo do regularize_building_footprints por edificação, que deixa contornos vizinhos perderem o alinhamento.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de polígonos de contornos de edificações de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho dos polígonos de saída. Se omitido, armazenado em memória."
              },
              "group": {
                "label": "Grupo",
                "description": "Campo opcional que agrupa os contornos a regularizar em conjunto. Sem ele, os grupos são formados pela adjacência dos limites."
              },
              "method": {
                "label": "Método",
                "description": "'right_angles' (padrão) ou 'right_angles_and_diagonals'."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Comprimento mínimo de parede; as arestas mais curtas são removidas como ruído (unidades do CRS). Padrão 1.0."
              },
              "precision": {
                "label": "Precisão",
                "description": "Passo da grade para ajustar os deslocamentos das paredes, de modo que paredes paralelas próximas se tornem colineares (unidades do CRS). Padrão: tolerance."
              },
              "adjacency_distance": {
                "label": "Distância de adjacência",
                "description": "Quando nenhum campo 'group' é fornecido, os contornos cujos vértices se aproximam a esta distância formam um único grupo (unidades do CRS). Padrão: 2 x tolerance."
              }
            }
          },
          "regularize_building_footprints": {
            "name": "Regularizar contornos de edificações",
            "description": "Normaliza polígonos ruidosos de contornos de edificações em formas regulares (paredes em ângulo reto, diagonais, em qualquer ângulo ou circulares).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de polígonos de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "Método de regularização: 'right_angles' (padrão), 'right_angles_and_diagonals', 'any_angle' ou 'circle'."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Distância máxima (em unidades do CRS) que o contorno regularizado pode se desviar do limite original. Padrão 1.0."
              },
              "diagonal_penalty": {
                "label": "Penalidade diagonal",
                "description": "Para 'right_angles_and_diagonals': o quanto os ângulos retos são preferidos em relação às paredes de 45 graus (uma parede só se torna diagonal quando seu desvio angular em relação a uma diagonal, multiplicado por este fator, é menor que seu desvio em relação a um eixo). Padrão 1.5; valores maiores produzem menos diagonais."
              },
              "min_radius": {
                "label": "Raio mínimo",
                "description": "Para 'circle': menor raio ajustado permitido; os ajustes menores mantêm o contorno original. Padrão 0.1."
              },
              "max_radius": {
                "label": "Raio máximo",
                "description": "Para 'circle': maior raio ajustado permitido; os ajustes maiores mantêm o contorno original. Ilimitado se omitido."
              }
            }
          },
          "remove_overlap_multiple": {
            "name": "Remover sobreposição (múltiplos)",
            "description": "Realoca cada sobreposição entre um conjunto de polígonos para exatamente uma feição, produzindo uma partição de sua união sem lacunas nem sobreposições (divisão por linha central ou de Thiessen), como o ArcGIS Remove Overlap (Multiple).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada (as feições podem se sobrepor)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "'center_line' (atribui cada ponto de sobreposição à feição em que ele está mais profundamente inserido, padrão) ou 'thiessen' (centroide gerador mais próximo)."
              },
              "grid_resolution": {
                "label": "Resolução da grade",
                "description": "Número de células ao longo do lado maior de cada região de sobreposição ao dividir (padrão 40; valores maiores = linhas divisórias mais suaves e mais lentas)."
              }
            }
          },
          "remove_thermal_noise": {
            "name": "Remover ruído térmico",
            "description": "Subtrai o piso de ruído térmico aditivo do receptor do retroespalhamento SAR, removendo o bandeamento transversal à faixa que domina superfícies escuras como água calma, solo inundado e sombra de radar (ArcGIS Remove Thermal Noise). Nada em nenhum dos registros faz isso: os filtros lee/frost/kuan/refined-lee incluídos suprimem o speckle multiplicativo, uma quantidade diferente. Sem ele, um limiar de água de Otsu se prende a um limite de subfaixa em vez de uma linha de costa, e as razões de polarização cruzada são calculadas a partir de um numerador que é em grande parte ruído.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de retroespalhamento SAR calibrado."
              },
              "output": {
                "label": "Saída",
                "description": "Raster com o ruído removido de saída. Se omitido, armazenado em memória."
              },
              "output_snr": {
                "label": "Saída de SNR",
                "description": "Razão sinal-ruído de saída em dB. Sempre produzida; armazenada em memória quando nenhum caminho é fornecido."
              },
              "noise_raster": {
                "label": "Raster de ruído",
                "description": "Raster de potência de ruído por célula, corregistrado com a entrada. Tem precedência sobre as outras duas formas."
              },
              "noise_profile": {
                "label": "Perfil de ruído",
                "description": "Potências de ruído ao longo do alcance separadas por vírgula, interpoladas linearmente ao longo das colunas do raster. Pelo menos dois valores."
              },
              "noise_constant": {
                "label": "Constante de ruído",
                "description": "Um único sigma zero equivalente ao ruído aplicado a cada célula."
              },
              "noise_units": {
                "label": "Unidades de ruído",
                "description": "Unidades em que os valores de ruído estão: 'intensity' (padrão), 'dn', 'amplitude' ou 'db'."
              },
              "input_units": {
                "label": "Unidades de entrada",
                "description": "'intensity' (padrão), 'dn', 'amplitude' ou 'db'."
              },
              "output_units": {
                "label": "Unidades de saída",
                "description": "'linear' (padrão) ou 'db'."
              },
              "floor_fraction": {
                "label": "Fração do piso",
                "description": "As células levadas a zero ou abaixo são limitadas a esta fração da potência de ruído local (padrão 0.01). Mantém finita a conversão para dB."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) da qual remover o ruído (padrão 1)."
              }
            }
          },
          "render_raster_png": {
            "name": "Renderizar raster em PNG",
            "description": "Renderiza uma única banda raster em uma imagem PNG através de um mapa de cores (nodata torna-se transparente).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do arquivo PNG de saída (por exemplo, /work/preview.png)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a renderizar (padrão 1)."
              },
              "colormap": {
                "label": "Mapa de cores",
                "description": "Mapa de cores: viridis (padrão), magma, turbo, terrain ou grayscale."
              },
              "min": {
                "label": "Mínimo",
                "description": "Valor mapeado para o extremo inferior do mapa de cores (padrão: o mínimo da banda)."
              },
              "max": {
                "label": "Máximo",
                "description": "Valor mapeado para o extremo superior do mapa de cores (padrão: o máximo da banda)."
              }
            }
          },
          "render_vector_png": {
            "name": "Renderizar vetorial em PNG",
            "description": "Desenha uma camada vetorial (pontos/linhas/polígonos) em uma imagem de mapa PNG.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de entrada ou identificador em memória."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do arquivo PNG de saída (por exemplo, /work/map.png)."
              },
              "width": {
                "label": "Largura",
                "description": "Largura da imagem em pixels (padrão 800)."
              },
              "height": {
                "label": "Altura",
                "description": "Altura da imagem em pixels (padrão: a partir da proporção dos dados)."
              },
              "fill": {
                "label": "Preencher",
                "description": "Cor de preenchimento dos polígonos/pontos como #rrggbb ou #rrggbbaa (padrão: azul semitransparente)."
              },
              "stroke": {
                "label": "Traço",
                "description": "Cor do contorno/linha como #rrggbb ou #rrggbbaa (padrão: azul escuro)."
              },
              "stroke_width": {
                "label": "Largura do traço",
                "description": "Largura do contorno/linha em pixels (padrão 1)."
              },
              "background": {
                "label": "Fundo",
                "description": "Cor de fundo como #rrggbb[aa] ou 'transparent' (padrão transparent)."
              }
            }
          },
          "repair_geometry": {
            "name": "Reparar geometria",
            "description": "Detecta e corrige geometria poligonal inválida — autointerseções (via autounião), orientação dos anéis, vértices duplicados e partes nulas/vazias — ou, com check_only, relata um código de problema por feição. Como o ArcGIS Repair Geometry / Check Geometry.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de polígonos de entrada, com formato detectado automaticamente (ou um identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "check_only": {
                "label": "Apenas verificar",
                "description": "Quando verdadeiro, não modifica a geometria: emite a entrada com as colunas 'problem_code'/'problem_desc' (como o ArcGIS Check Geometry). Padrão false."
              }
            }
          },
          "rescale_by_function": {
            "name": "Reescalar por função",
            "description": "Reescalona um raster contínuo para uma escala comum de adequabilidade via uma função de transferência (linear, inverse_linear, power, exponential, logarithmic, logistic, gaussian, near, small, large, symmetric_linear), como o ArcGIS Rescale By Function.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster contínuo de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é armazenado em memória."
              },
              "function": {
                "label": "Função",
                "description": "Função de transferência: linear (padrão), inverse_linear, power, exponential, logarithmic, logistic, gaussian, near, small, large, symmetric_linear."
              },
              "from_scale": {
                "label": "Da escala",
                "description": "Extremo inferior da escala de saída (padrão 0)."
              },
              "to_scale": {
                "label": "Para a escala",
                "description": "Extremo superior da escala de saída (padrão 1)."
              },
              "param1": {
                "label": "Parâmetro 1",
                "description": "Primeiro parâmetro de forma (expoente para power; inclinação para exponential/logarithmic/logistic/small/large; centro para gaussian/near). Padrão específico de cada função."
              },
              "param2": {
                "label": "Parâmetro 2",
                "description": "Segundo parâmetro de forma (dispersão para gaussian/near). Padrão específico de cada função."
              },
              "low_threshold": {
                "label": "Limiar inferior",
                "description": "Corte inferior opcional: os valores abaixo dele são mapeados para 'value_below'."
              },
              "high_threshold": {
                "label": "Limiar superior",
                "description": "Corte superior opcional: os valores acima dele são mapeados para 'value_above'."
              },
              "value_below": {
                "label": "Valor abaixo",
                "description": "Valor de saída para as células abaixo de 'low_threshold' (padrão = from_scale)."
              },
              "value_above": {
                "label": "Valor acima",
                "description": "Valor de saída para as células acima de 'high_threshold' (padrão = to_scale)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a reescalonar (padrão 1)."
              }
            }
          },
          "resolve_building_conflicts": {
            "name": "Resolver conflitos de edificações",
            "description": "Desloca, reduz ou oculta contornos de edificações que entram em conflito gráfico com barreiras viárias simbolizadas (e entre si) para mapeamento em pequena escala, marcando cada um com um status, como o ArcGIS Resolve Building Conflicts.",
            "params": {
              "buildings": {
                "label": "Edificações",
                "description": "Camada de polígonos de edificações de entrada."
              },
              "barriers": {
                "label": "Barreiras",
                "description": "Camada de linhas de barreiras (por exemplo, estradas) das quais as edificações devem se afastar."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de edificações de saída com um campo 'status'. Se omitido, armazenado em memória."
              },
              "barrier_width": {
                "label": "Largura da barreira",
                "description": "Largura simbolizada da barreira em unidades do mapa (com buffer de metade deste valor de cada lado). Padrão 0."
              },
              "gap": {
                "label": "Lacuna",
                "description": "Espaçamento mínimo a manter entre uma edificação e uma barreira (unidades do mapa). Padrão 0."
              },
              "min_size": {
                "label": "Tamanho mínimo",
                "description": "Área mínima da edificação (unidades do mapa²) abaixo da qual uma edificação em conflito é ocultada em vez de reduzida. Padrão 0 (nunca ocultar)."
              },
              "hide": {
                "label": "Ocultar",
                "description": "Se as edificações ocultas devem ser descartadas da saída (padrão false: mantidas com status='hidden')."
              }
            }
          },
          "resolve_road_conflicts": {
            "name": "Resolver conflitos viários",
            "description": "Desloca vias cujas representações simbolizadas (largura desenhada) se sobrepõem ou se aglomeram em uma escala alvo: vias de hierarquia inferior são afastadas das de hierarquia superior com deslocamentos de vértices suavizados e extremidades fixas, opcionalmente emitindo ligações de deslocamento, como o ArcGIS Resolve Road Conflicts / Propagate Displacement.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de linhas de estradas de entrada (LineString / MultiLineString)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de estradas deslocadas de saída com os campos 'status' e 'shift'. Se omitido, armazenado em memória."
              },
              "symbol_width": {
                "label": "Largura do símbolo",
                "description": "Largura simbolizada fixa para todas as estradas, em unidades do mapa (ou em mm de página quando 'scale' está definido). Usada quando 'symbol_width_field' está ausente."
              },
              "symbol_width_field": {
                "label": "Campo de largura do símbolo",
                "description": "Campo numérico que fornece a largura simbolizada de cada estrada (unidades do mapa, ou mm de página quando 'scale' está definido). Recorre a 'symbol_width' quando um valor está ausente."
              },
              "hierarchy_field": {
                "label": "Campo de hierarquia",
                "description": "Campo numérico que ordena a importância das estradas (valor menor = mais importante, mantida fixa). Ausente: todas as estradas compartilham o deslocamento igualmente."
              },
              "scale": {
                "label": "Escala",
                "description": "Denominador da escala do mapa de destino. Quando definido, as larguras dos símbolos são milímetros de página convertidos em unidades de terreno (mm * escala / 1000). Padrão: as larguras são tomadas diretamente como unidades do mapa."
              },
              "gap": {
                "label": "Lacuna",
                "description": "Espaçamento livre adicional a manter entre as faixas de símbolos, em unidades do mapa. Padrão 0."
              },
              "max_iter": {
                "label": "Máximo de iterações",
                "description": "Máximo de iterações de deslocamento. Padrão 50."
              },
              "pin_endpoints": {
                "label": "Fixar extremidades",
                "description": "Manter fixos o primeiro e o último vértice de cada estrada para preservar os entroncamentos/a conectividade (padrão true)."
              },
              "links": {
                "label": "Ligações",
                "description": "Caminho opcional de saída para as ligações de deslocamento (linhas de→para) consumíveis por rubbersheet_features."
              }
            }
          },
          "ripleys_k": {
            "name": "K de Ripley",
            "description": "Análise de padrão de pontos em múltiplas distâncias (função K / L de Ripley) com envelopes de Monte Carlo de aleatoriedade espacial completa, para detectar agrupamento ou dispersão ao longo de uma faixa de distâncias.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada (as demais geometrias usam seu ponto representativo, a média dos vértices)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do CSV para a tabela K/L. A tabela também é retornada no resultado da ferramenta."
              },
              "distance_bands": {
                "label": "Bandas de distância",
                "description": "Número de bandas de distância a avaliar (padrão 10)."
              },
              "max_distance": {
                "label": "Distância máxima",
                "description": "Maior distância a avaliar, em unidades do CRS. Padrão: um quarto do menor lado da caixa delimitadora dos pontos."
              },
              "permutations": {
                "label": "Permutações",
                "description": "Número de simulações de CSR para o envelope de significância (padrão 99; 0 desativa o envelope)."
              },
              "weight_field": {
                "label": "Campo de peso",
                "description": "Campo numérico opcional que pondera cada ponto."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente do gerador de números aleatórios do CSR (padrão 1), para envelopes reproduzíveis."
              }
            }
          },
          "rubbersheet_features": {
            "name": "Ajustar feições por rubbersheeting",
            "description": "Deforma uma camada vetorial para alinhá-la a um alvo usando ligações de deslocamento: uma transformação afim por partes em TIN de Delaunay (ou IDW) que leva os pontos de controle aos seus alvos e deforma suavemente tudo o que está entre eles — a transformação de conflação, como o ArcGIS Rubbersheet Features.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada a ajustar (qualquer tipo de geometria)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "links": {
                "label": "Ligações",
                "description": "Camada de linhas opcional com as ligações de deslocamento (cada linha: primeiro vértice = de, último vértice = para)."
              },
              "target": {
                "label": "Alvo",
                "description": "Camada vetorial alvo opcional; as ligações são geradas fazendo a correspondência do ponto representativo de cada feição de entrada com o alvo mais próximo dentro de search_distance."
              },
              "search_distance": {
                "label": "Distância de busca",
                "description": "Distância máxima para corresponder a entrada ao alvo ao gerar as ligações (unidades do CRS). Obrigatória com 'target'."
              },
              "method": {
                "label": "Método",
                "description": "'linear' (TIN de Delaunay afim por partes, padrão) ou 'idw' (ponderação pelo inverso da distância)."
              },
              "power": {
                "label": "Potência",
                "description": "Potência do IDW para o decaimento fora do TIN / para method=idw. Padrão 2."
              }
            }
          },
          "sar_coherence": {
            "name": "Coerência SAR",
            "description": "Calcula a magnitude da coerência interferométrica normalizada (e opcionalmente a fase interferométrica) entre duas aquisições SAR complexas corregistradas sobre uma janela móvel (ArcGIS Compute Coherence / Generate Interferogram). A coerência mede a estabilidade da fase em vez do brilho, de modo que detecta mudanças que a diferenciação de intensidade não consegue ver — colapso, inundação sob vegetação, colheita, movimento de gelo — em qualquer condição meteorológica. Nenhuma ferramenta em qualquer dos registros usa a fase SAR. As entradas são pares I/Q de duas bandas e já devem estar corregistradas.",
            "params": {
              "reference": {
                "label": "Referência",
                "description": "Raster SAR complexo (duas bandas: I e Q) da primeira aquisição."
              },
              "secondary": {
                "label": "Secundário",
                "description": "Raster SAR complexo corregistrado (duas bandas: I e Q) da segunda aquisição."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de coerência de saída (magnitude, 0..1). Se omitido, armazenado em memória."
              },
              "output_phase": {
                "label": "Saída de fase",
                "description": "Caminho opcional de saída para o raster de fase interferométrica em radianos, envolvida em (-pi, pi]."
              },
              "window_size": {
                "label": "Tamanho da janela",
                "description": "Janela de estimativa como 'range,azimuth' em células (padrão '5,5'). O estimador é centrado, portanto um valor par é arredondado PARA CIMA até o próximo tamanho ímpar; a janela efetiva é relatada de volta como window_range/window_azimuth."
              },
              "bias_correction": {
                "label": "Correção de viés",
                "description": "Corrigir o viés positivo do estimador de coerência em janelas pequenas (padrão true)."
              }
            }
          },
          "semivariogram_sensitivity": {
            "name": "Sensibilidade do semivariograma",
            "description": "Perturba o efeito pepita, o patamar parcial e o alcance de um variograma ajustado, refaz a krigagem nos locais de avaliação e relata quanto as predições e os erros padrão se movem — a verificação padrão de defensabilidade de um modelo de krigagem (ArcGIS GA Semivariogram Sensitivity). O conjunto de krigagem incluído é amplo e kriging_cross_validation mede o ajuste, mas nada mede a sensibilidade, e as duas são independentes: um modelo bem validado por validação cruzada ainda pode ser altamente frágil aos parâmetros escolhidos pelo analista.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos que contém os valores medidos."
              },
              "field": {
                "label": "Campo",
                "description": "Campo numérico a krigar."
              },
              "locations": {
                "label": "Localizações",
                "description": "Camada de pontos com as localizações de predição nas quais avaliar a sensibilidade."
              },
              "output": {
                "label": "Saída",
                "description": "Tabela com uma linha por modelo perturbado. Se omitido, armazenado em memória."
              },
              "model": {
                "label": "Modelo",
                "description": "Modelo de variograma: 'exponential' (padrão), 'spherical' ou 'gaussian'."
              },
              "nugget_span_percent": {
                "label": "Percentual de variação do efeito pepita",
                "description": "Semiamplitude de perturbação do efeito pepita, em porcentagem (padrão 10)."
              },
              "partial_sill_span_percent": {
                "label": "Percentual de variação do patamar parcial",
                "description": "Semiamplitude de perturbação do patamar parcial, em porcentagem (padrão 10)."
              },
              "range_span_percent": {
                "label": "Percentual de variação do alcance",
                "description": "Semiamplitude de perturbação do alcance, em porcentagem (padrão 10)."
              },
              "nugget_steps": {
                "label": "Passos do efeito pepita",
                "description": "Amostras ao longo da faixa do efeito pepita (padrão 3; 1 o fixa no valor ajustado)."
              },
              "partial_sill_steps": {
                "label": "Passos do patamar parcial",
                "description": "Amostras ao longo da faixa do patamar parcial (padrão 3)."
              },
              "range_steps": {
                "label": "Passos do alcance",
                "description": "Amostras ao longo da faixa do alcance (padrão 3)."
              },
              "lag_count": {
                "label": "Número de defasagens",
                "description": "Intervalos de defasagem do variograma empírico usados no ajuste de referência (padrão 12)."
              }
            }
          },
          "similarity_search": {
            "name": "Busca por similaridade",
            "description": "Classifica feições candidatas por similaridade de atributos com uma ou mais feições de referência ao longo de campos numéricos padronizados por escore z (euclidiana ou cosseno), mais/menos/ambos — como o ArcGIS Similarity Search.",
            "params": {
              "reference": {
                "label": "Referência",
                "description": "Camada vetorial de referência (uma ou mais feições que definem o perfil a corresponder)."
              },
              "candidates": {
                "label": "Candidatos",
                "description": "Camada vetorial de candidatos a ordenar pela similaridade com a referência."
              },
              "fields": {
                "label": "Campos",
                "description": "Campo(s) numérico(s) separados por vírgula a comparar (devem existir em ambas as camadas)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída (candidatos ordenados). Se omitido, armazenado em memória."
              },
              "match_method": {
                "label": "Método de correspondência",
                "description": "'euclidean' (distância padronizada por escore z; padrão) ou 'cosine' (similaridade angular)."
              },
              "most_or_least": {
                "label": "Mais ou menos",
                "description": "Manter os 'most' similares (padrão), os 'least' similares ou 'both' os extremos."
              },
              "num_results": {
                "label": "Número de resultados",
                "description": "Número de resultados a manter por extremo (0 = todos os candidatos). Padrão 10."
              }
            }
          },
          "simplify_3d_line": {
            "name": "Simplificar linha 3D",
            "description": "Reduz a contagem de vértices de polilinhas 3D usando uma divisão de Douglas-Peucker que mede o desvio em três dimensões, preservando o perfil vertical, como o ArcGIS Simplify 3D Line.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de polilinhas de entrada (vértices 3D; os vértices 2D são tratados como um caso planar especial)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Desvio 3D máximo em unidades do mapa. Os vértices mais próximos que isso da corda são removidos."
              },
              "z_factor": {
                "label": "Fator Z",
                "description": "Multiplicador aplicado a Z antes do teste de distância, para dados cuja unidade Z difere da de XY (padrão 1)."
              }
            }
          },
          "simplify_building": {
            "name": "Simplificar edificação",
            "description": "Reduz os vértices de contornos de edificações protegendo os cantos em ângulo reto, com um limiar de descarte por área mínima, como o ArcGIS Simplify Building.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Polígonos de contornos de edificações."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Tolerância de simplificação em unidades do mapa: a distância máxima que o limite pode se mover."
              },
              "minimum_area": {
                "label": "Área mínima",
                "description": "Os contornos abaixo desta área são descartados (padrão 0, mantém todos)."
              },
              "keep_collapsed_points": {
                "label": "Manter pontos colapsados",
                "description": "Emitir um ponto no centroide de cada contorno descartado por minimum_area (padrão false)."
              },
              "corner_tolerance": {
                "label": "Tolerância de canto",
                "description": "Graus dentro dos quais um ângulo interno conta como um ângulo reto protegido (padrão 20)."
              }
            }
          },
          "simplify_by_circular_arcs": {
            "name": "Simplificar por arcos circulares",
            "description": "Simplifica linhas e polígonos substituindo sequências de vértices por segmentos retos e arcos circulares verdadeiros, preservando curvas de engenharia em vez de aproximá-las por cordas (ArcGIS Simplify By Straight Lines And Circular Arcs; o modo 'tangent' cobre o Simplify By Tangent Segments). Todo simplificador em qualquer dos registros é apenas de remoção de vértices, o que força uma escolha entre uma curva facetada e uma contagem inaceitável de vértices em bulbos de ruas sem saída, rotatórias e contornos de tanques. Os círculos são ajustados por mínimos quadrados algébricos, mas aceitos pelo desvio ortogonal verdadeiro, de modo que a garantia de tolerância se mantém.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de linhas ou polígonos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída. Se omitido, o resultado é armazenado em memória."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Desvio máximo permitido de uma primitiva ajustada em relação aos vértices originais, em unidades do CRS."
              },
              "mode": {
                "label": "Modo",
                "description": "'arcs' (padrão; ajusta segmentos retos e arcos circulares) ou 'tangent' (apenas segmentos retos, o comportamento do Simplify By Tangent Segments)."
              },
              "min_arc_angle": {
                "label": "Ângulo mínimo do arco",
                "description": "Os arcos que subtendem menos que este número de graus são emitidos como segmentos retos (padrão 10)."
              },
              "max_radius": {
                "label": "Raio máximo",
                "description": "Os arcos com raio maior que este são emitidos como segmentos retos (padrão: 1e6)."
              },
              "densify_output": {
                "label": "Densificar saída",
                "description": "Redensificar os arcos ajustados a uma tolerância de corda na gravação (padrão true). Quando falso, apenas as extremidades dos arcos são emitidas, de modo que a geometria por si só perde a curva — leia 'output_arcs' para recuperá-la."
              },
              "output_arcs": {
                "label": "Saída de arcos",
                "description": "Caminho opcional para a tabela de arcos ajustados (identificador da feição, extremidades, centro, raio, varredura com sinal em graus). Se omitido, armazenado em memória (ainda assim é retornado)."
              }
            }
          },
          "simplify_by_tangent_segments": {
            "name": "Simplificar por segmentos tangentes",
            "description": "Substitui a geometria de curvas densificadas pela cadeia mínima de segmentos retos que permanece dentro de um deslocamento perpendicular máximo, unindo segmentos consecutivos em sua interseção de modo que o resultado permaneça tangente ao original (ArcGIS Simplify By Tangent Segments). O companheiro linear de simplify_by_circular_arcs: simplify_features (Douglas-Peucker) só pode manter vértices existentes e não garante tangência, deixando dobras em geometria de engenharia, enquanto smooth_line e smooth_natural_features movem vértices em vez de reduzi-los.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições de linha ou polígono a simplificar."
              },
              "output": {
                "label": "Saída",
                "description": "Feições simplificadas com os campos de contagem de vértices acrescentados. Se omitido, armazenado em memória."
              },
              "max_offset": {
                "label": "Deslocamento máximo",
                "description": "Desvio perpendicular máximo em relação ao original, em UNIDADES DO CRS. No EPSG:4326 isso significa graus, portanto um trabalho em escala métrica precisa de cerca de 2e-5, e não 2.0. O limite é imposto contra cada linha ajustada, de modo que a cadeia emitida pode excedê-lo ligeiramente perto de uma junta onde segmentos consecutivos se encontram."
              },
              "anchor_points": {
                "label": "Pontos de ancoragem",
                "description": "Camada de pontos opcional cujas localizações devem sobreviver como vértices (anchor_points do ArcGIS). As sequências nunca são estendidas através de uma âncora."
              },
              "anchor_tolerance": {
                "label": "Tolerância de ancoragem",
                "description": "Distância dentro da qual um vértice de entrada conta como correspondente a um ponto de âncora (unidades do CRS). Padrão: max_offset."
              },
              "min_run": {
                "label": "Sequência mínima",
                "description": "Número mínimo de vértices de entrada que uma sequência deve abranger antes de ser colapsada em um segmento (padrão 3). As sequências mais curtas são emitidas inalteradas."
              },
              "preserve_endpoints": {
                "label": "Preservar extremidades",
                "description": "Manter exatamente o primeiro e o último vértice de cada parte (padrão true)."
              }
            }
          },
          "simplify_shared_edges": {
            "name": "Simplificar bordas compartilhadas",
            "description": "Simplifica uma cobertura de polígonos mantendo coincidentes os limites compartilhados entre polígonos adjacentes (sem lacunas ou fragmentos), como o ArcGIS Simplify Shared Edges.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de polígonos de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Tolerância de simplificação de Douglas-Peucker: a distância máxima (em unidades do CRS) que um arco simplificado pode se desviar do original. Padrão 1.0."
              },
              "simplify_boundary": {
                "label": "Simplificar limite",
                "description": "Também simplificar os arcos no limite externo da cobertura (arestas pertencentes a um único polígono). Padrão true; defina como false para manter o limite externo inalterado."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Quantizar os vértices em uma grade deste tamanho (unidades do CRS) antes de construir a topologia, de modo que os vértices compartilhados quase coincidentes sejam tratados como um só. Padrão 0 (usa as coordenadas exatamente)."
              }
            }
          },
          "slice_raster": {
            "name": "Fatiar raster em classes",
            "description": "Classifica um raster contínuo em N zonas ordinais (intervalo igual, área igual, quebras naturais, intervalo geométrico ou desvio padrão).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster contínuo de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de zonas de saída. Se omitido, armazenado em memória."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a classificar (padrão 1)."
              },
              "number_zones": {
                "label": "Número de zonas",
                "description": "Número de zonas de saída (padrão 10). Ignorado para std_dev."
              },
              "slice_type": {
                "label": "Tipo de fatia",
                "description": "Método de classificação: equal_interval, equal_area, natural_breaks, geometric_interval ou std_dev (padrão equal_interval)."
              },
              "base_output_zone": {
                "label": "Zona base de saída",
                "description": "Identificador de zona atribuído à zona mais baixa (padrão 1)."
              },
              "class_interval_size": {
                "label": "Tamanho do intervalo de classe",
                "description": "Tamanho do intervalo de desvio padrão em unidades de σ (padrão 1.0). Usado apenas por std_dev."
              }
            }
          },
          "smooth_natural_features": {
            "name": "Suavizar feições naturais",
            "description": "Suaviza polígonos pixelizados e linhas serrilhadas (saídas de conversão raster-vetor) em curvas de aparência natural via corte de cantos de Chaikin, preservando a área dos polígonos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de entrada com feições poligonais ou de linha, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "segment_length": {
                "label": "Comprimento do segmento",
                "description": "Escala do ruído em escada a remover, em unidades do CRS — idealmente o tamanho da célula do raster de origem. Detectada automaticamente a partir do comprimento mediano das arestas da camada se omitida."
              },
              "iterations": {
                "label": "Iterações",
                "description": "Iterações de suavização de Chaikin (1-8); mais iterações geram uma saída mais suave com mais vértices. Padrão 3."
              },
              "preserve_area": {
                "label": "Preservar área",
                "description": "Restaurar a área original de cada polígono após a suavização (o corte de cantos encolhe as formas convexas). Padrão true."
              }
            }
          },
          "smooth_shared_edges": {
            "name": "Suavizar bordas compartilhadas",
            "description": "Suaviza uma cobertura de polígonos mantendo coincidentes os limites compartilhados entre polígonos adjacentes (sem lacunas ou fragmentos), como o ArcGIS Smooth Shared Edges.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de polígonos de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "algorithm": {
                "label": "Algoritmo",
                "description": "Algoritmo de suavização: 'paek' (kernel gaussiano, controlado por tolerância; padrão) ou 'bezier' (corte de cantos de Chaikin, ignora a tolerância)."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Comprimento de suavização do PAEK em unidades do CRS: a janela de comprimento de arco sobre a qual os vértices são promediados. Valores maiores geram curvas mais suaves. Padrão 1.0. Ignorado pelo algoritmo 'bezier'."
              },
              "smooth_boundary": {
                "label": "Suavizar limite",
                "description": "Também suavizar os arcos no limite externo da cobertura (arestas pertencentes a um único polígono). Padrão true; defina como false para manter o limite externo inalterado."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Quantizar os vértices em uma grade deste tamanho (unidades do CRS) antes de construir a topologia, de modo que os vértices compartilhados quase coincidentes sejam tratados como um só. Padrão 0 (usa as coordenadas exatamente)."
              }
            }
          },
          "snap_tracks": {
            "name": "Ajustar trajetos",
            "description": "Faz a correspondência de trajetos GPS com carimbo de tempo a uma rede viária com um programa dinâmico de Viterbi (emissão = distância de ajuste, transição = continuidade da rota), de modo que os trajetos correspondidos sigam um caminho plausível em vez de ziguezaguear entre ruas paralelas — como o ArcGIS Snap Tracks.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos GPS com carimbo de tempo de entrada."
              },
              "network": {
                "label": "Rede",
                "description": "Camada de linhas da rede viária na qual fazer a correspondência."
              },
              "track_field": {
                "label": "Campo de trajeto",
                "description": "Campo que identifica cada trajeto/objeto em movimento."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo que contém o tempo de cada ponto (segundos numéricos ou ISO-8601)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de pontos ajustados de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "search_distance": {
                "label": "Distância de busca",
                "description": "Raio de candidatas: apenas as arestas da rede dentro desta distância de uma posição são consideradas. Obrigatório."
              },
              "max_candidates": {
                "label": "Máximo de candidatos",
                "description": "Máximo de arestas candidatas mantidas por posição (padrão 5)."
              }
            }
          },
          "solar_radiation": {
            "name": "Radiação solar",
            "description": "Radiação solar incidente (Wh/m²) sobre um DEM para um intervalo de datas: direta + difusa, considerando declividade/orientação, sombreamento pelo horizonte e posição do sol ao longo do tempo — como o ArcGIS Raster Solar Radiation.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster de elevação de entrada (projetado, em metros — a declividade e o horizonte precisam de distâncias reais)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de radiação total de saída (Wh/m²). Se omitido, armazenado em memória."
              },
              "direct_output": {
                "label": "Saída direta",
                "description": "Raster de saída opcional para a componente de radiação direta (Wh/m²)."
              },
              "diffuse_output": {
                "label": "Saída difusa",
                "description": "Raster de saída opcional para a componente de radiação difusa (Wh/m²)."
              },
              "start_day": {
                "label": "Dia inicial",
                "description": "Primeiro dia do ano (1-365) ou uma data ISO (AAAA-MM-DD). Padrão 1."
              },
              "end_day": {
                "label": "Dia final",
                "description": "Último dia do ano (1-365) ou uma data ISO. Padrão 365."
              },
              "day_interval": {
                "label": "Intervalo de dias",
                "description": "Amostrar a cada este número de dias ao longo do intervalo (cada amostra representa esse número de dias). Padrão: intervalo/12 (cerca de 12 amostras)."
              },
              "time_step": {
                "label": "Passo de tempo",
                "description": "Horas entre as amostras de posição do sol ao longo de cada dia. Padrão 0.5."
              },
              "latitude": {
                "label": "Latitude",
                "description": "Latitude em graus. Padrão: derivada do centro do DEM para EPSG:4326 / 3857."
              },
              "transmittivity": {
                "label": "Transmissividade",
                "description": "Transmissividade atmosférica (0-1) para uma massa de ar unitária. Padrão 0.6."
              },
              "diffuse_proportion": {
                "label": "Proporção difusa",
                "description": "Fração da irradiância horizontal extraterrestre tratada como radiação difusa do céu (0-1). Padrão 0.3."
              },
              "horizon_distance": {
                "label": "Distância do horizonte",
                "description": "Comprimento máximo do raio de horizonte em células (limita o cálculo de sombras). Padrão 100."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) do DEM (padrão 1)."
              }
            }
          },
          "sort_features": {
            "name": "Ordenar feições",
            "description": "Reordena uma camada vetorial por campos de atributo ou ao longo de uma curva de preenchimento de espaço de Hilbert (ordenação espacial), como o ArcGIS Sort — a ordenação de Hilbert agrupa registros espacialmente próximos para melhorar a poda do GeoParquet e a localidade do PMTiles.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Camada vetorial de saída na nova ordem. Se omitido, armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "'hilbert' (ordem por curva espacial; padrão) ou 'attribute' (pela lista de 'fields')."
              },
              "fields": {
                "label": "Campos",
                "description": "Modo attribute: campos separados por vírgula com direção opcional, por exemplo 'pop:desc,name:asc'."
              },
              "index_field": {
                "label": "Campo de índice",
                "description": "Nome do campo opcional para armazenar a distância na curva de Hilbert de cada feição."
              }
            }
          },
          "space_time_kernel_density": {
            "name": "Densidade kernel espaço-temporal",
            "description": "Densidade de kernel espaço-temporal de pontos com carimbo de tempo: uma banda de densidade por fatia de tempo (um raster multibanda) a partir de um kernel separável espacial (Epanechnikov/quártico) x temporal (triangular/Epanechnikov), de modo que cada banda agrega pontos próximos tanto no espaço quanto no tempo, como o ArcGIS Space Time Kernel Density. O companheiro sensível ao tempo do heat_map 2D incluído.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada. Se geográfica (EPSG:4326/lon-lat sem rótulo), usa metros de haversine; se projetada, usa unidades do CRS. As geometrias não pontuais usam seu primeiro vértice / vértice representativo."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do raster multibanda de saída (uma banda por fatia de tempo; driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo que contém o tempo de cada ponto: um campo numérico (nas suas próprias unidades) ou uma cadeia de data/data-hora ISO-8601."
              },
              "time_step": {
                "label": "Passo de tempo",
                "description": "Intervalo entre fatias: um número simples (para um time_field numérico) ou uma duração como '1w', '7d', '12h', '1M'. Padrão '1w'."
              },
              "temporal_bandwidth": {
                "label": "Largura de banda temporal",
                "description": "Semilargura do kernel temporal, com as mesmas unidades/sintaxe de duração de time_step. Padrão: igual a time_step."
              },
              "spatial_bandwidth": {
                "label": "Largura de banda espacial",
                "description": "Raio do kernel espacial, em metros para entradas geográficas ou em unidades do CRS para entradas projetadas. Padrão: extensão máxima / 20."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do CRS (graus para entradas geográficas). Padrão: extensão máxima / 200."
              },
              "weight_field": {
                "label": "Campo de peso",
                "description": "Campo numérico opcional que pondera cada ponto. Padrão: cada ponto conta como 1."
              },
              "spatial_kernel": {
                "label": "Kernel espacial",
                "description": "Forma do kernel espacial: 'epanechnikov' (padrão) ou 'quartic'."
              },
              "temporal_kernel": {
                "label": "Kernel temporal",
                "description": "Forma do kernel temporal: 'triangular' (padrão) ou 'epanechnikov'."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG para marcar o raster de saída (padrão: o da camada de entrada)."
              }
            }
          },
          "spatial_association_between_zones": {
            "name": "Associação espacial entre zonas",
            "description": "Mede quão fortemente dois rasters de zonas categóricas correspondem via a medida V (homogeneidade/completude) mais pontuações de associação por zona.",
            "params": {
              "zones1": {
                "label": "Zonas 1",
                "description": "Primeiro raster categórico de zonas (por exemplo, cobertura do solo). Mesma grade de zones2."
              },
              "zones2": {
                "label": "Zonas 2",
                "description": "Segundo raster categórico de zonas (por exemplo, ecorregiões) na mesma grade de zones1."
              },
              "output": {
                "label": "Saída",
                "description": "Tabela CSV opcional por classe de zones1 (classe, contagem, associação, classe dominante de zones2 e sua participação). As métricas gerais são sempre retornadas no resultado."
              },
              "band1": {
                "label": "Banda 1",
                "description": "Banda (base 1) de zones1 a ler (padrão 1)."
              },
              "band2": {
                "label": "Banda 2",
                "description": "Banda (base 1) de zones2 a ler (padrão 1)."
              }
            }
          },
          "spatial_eigenvector_filtering": {
            "name": "Filtragem por autovetores espaciais (MESF)",
            "description": "Gera autovetores de Moran (filtros espaciais) a partir de uma matriz de pesos espaciais e anexa os componentes autocorrelacionados como campos de variáveis explicativas (MEV1, MEV2, …), como o ArcGIS Decompose Spatial Structure / Create Spatial Component Explanatory Variables. Constrói uma matriz de conectividade simétrica (contiguidade ou KNN simetrizado), centraliza-a duplamente (M C M) e a decompõe em autovalores com um solucionador de Jacobi cíclico em Rust puro; mantém os autovetores cujo I de Moran ≥ min_autocorrelation, classificados em ordem decrescente e limitados a max_components.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (pontos/linhas/polígonos; os métodos de contiguidade exigem polígonos)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída — as feições de entrada com os autovetores mantidos acrescentados como MEV1, MEV2, …. Se omitido, armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "Conceitualização das relações espaciais: 'contiguity_edges' (rook), 'contiguity_edges_corners' (queen) ou 'knn' (simetrizado). Padrão 'contiguity_edges_corners'."
              },
              "number_of_neighbors": {
                "label": "Número de vizinhos",
                "description": "Número de vizinhos mais próximos k para method = knn. Padrão 8."
              },
              "min_autocorrelation": {
                "label": "Autocorrelação mínima",
                "description": "I de Moran mínimo que um autovetor deve ter para ser mantido (autocorrelação espacial positiva). Padrão 0.25."
              },
              "max_components": {
                "label": "Máximo de componentes",
                "description": "Número máximo de autovetores a emitir, tomados em ordem decrescente de I de Moran. Padrão 15."
              }
            }
          },
          "spatial_outlier_detection": {
            "name": "Detecção de outliers espaciais",
            "description": "Pontua pontos pelo seu Fator Local de Outlier (LOF) — quão isolado cada ponto está em relação à densidade local de seus k vizinhos mais próximos — e sinaliza os principais outliers, como o ArcGIS Spatial Outlier Detection. Preenche a lacuna deixada pelo rótulo binário de ruído do DBSCAN.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de pontos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Pontos de saída com o escore LOF e o sinalizador de outlier. Se omitido, armazenado em memória."
              },
              "neighbors": {
                "label": "Vizinhos",
                "description": "Número de vizinhos mais próximos k (padrão 20)."
              },
              "percent_outlier": {
                "label": "Percentual de outliers",
                "description": "Sinalizar como outliers os pontos deste percentual superior por LOF (padrão 5). Ignorado se 'threshold' estiver definido."
              },
              "threshold": {
                "label": "Limiar",
                "description": "Corte explícito de LOF: os pontos com LOF acima deste valor são outliers (substitui percent_outlier)."
              }
            }
          },
          "spatially_constrained_multivariate_clustering": {
            "name": "Agrupamento multivariado com restrição espacial",
            "description": "Particiona feições em regiões espacialmente contíguas e homogêneas em atributos com o algoritmo SKATER (árvore geradora mínima sobre um grafo de contiguidade, cortada para maximizar a variância entre agrupamentos), com restrições opcionais de tamanho/balanceamento. Cada agrupamento é conectado por construção, ao contrário do multivariate_clustering. Como o ArcGIS Spatially Constrained Multivariate Clustering.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições poligonais (ou pontuais) de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho de saída para as feições de entrada mais um campo CLUSTER_ID. Se omitido, armazenado em memória."
              },
              "analysis_fields": {
                "label": "Campos de análise",
                "description": "Nomes de campos numéricos separados por vírgula ou ponto e vírgula nos quais agrupar."
              },
              "number_of_clusters": {
                "label": "Número de agrupamentos",
                "description": "Número desejado de agrupamentos (padrão 5)."
              },
              "neighborhood": {
                "label": "Vizinhança",
                "description": "'contiguity_edges' (rook, padrão), 'contiguity_edges_corners' (queen) ou 'knn'."
              },
              "number_of_neighbors": {
                "label": "Número de vizinhos",
                "description": "Número de vizinhos para a vizinhança 'knn' (padrão 8)."
              },
              "constraint": {
                "label": "Restrição",
                "description": "'none' (padrão), 'feature_count' ou 'attribute_value'."
              },
              "constraint_field": {
                "label": "Campo de restrição",
                "description": "Campo somado por agrupamento quando 'constraint' é 'attribute_value'."
              },
              "min_constraint": {
                "label": "Restrição mínima",
                "description": "Contagem mínima de feições ou total mínimo do atributo por agrupamento; os cortes que a violarem são ignorados."
              },
              "max_constraint": {
                "label": "Restrição máxima",
                "description": "Contagem máxima de feições ou total máximo do atributo por agrupamento; os agrupamentos acima dela são divididos ainda mais, mesmo além de 'number_of_clusters'."
              },
              "scale_data": {
                "label": "Escalonar dados",
                "description": "Padronizar em escores z os campos de análise antes do agrupamento (padrão true)."
              },
              "output_table": {
                "label": "Tabela de saída",
                "description": "Caminho opcional para o resumo por agrupamento (médias, R-quadrado por variável, pseudo-F)."
              }
            }
          },
          "spectral_index": {
            "name": "Índice espectral",
            "description": "Calcula um índice espectral (NDVI, NDWI, NDBI, NBR, EVI, SAVI) a partir de um raster multibanda.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster multibanda de entrada."
              },
              "index": {
                "label": "Índice",
                "description": "Índice a calcular: ndvi, ndwi, ndbi, nbr, evi ou savi."
              },
              "red": {
                "label": "Vermelho",
                "description": "Número da banda (base 1) do vermelho."
              },
              "nir": {
                "label": "NIR",
                "description": "Número da banda (base 1) do infravermelho próximo."
              },
              "green": {
                "label": "Verde",
                "description": "Número da banda (base 1) do verde."
              },
              "blue": {
                "label": "Azul",
                "description": "Número da banda (base 1) do azul."
              },
              "swir": {
                "label": "SWIR",
                "description": "Número da banda (base 1) do infravermelho de ondas curtas."
              },
              "soil_factor": {
                "label": "Fator de solo",
                "description": "Fator de ajuste do solo L para o SAVI (padrão 0.5)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, o resultado é armazenado em memória."
              }
            }
          },
          "split_by_attributes": {
            "name": "Dividir por atributos",
            "description": "Divide uma camada vetorial em um arquivo de saída por valor único (ou combinação) do(s) campo(s) dado(s), como o ArcGIS Split By Attributes.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada."
              },
              "output_dir": {
                "label": "Diretório de saída",
                "description": "Diretório de saída; um arquivo por grupo é gravado aqui (criado se necessário)."
              },
              "fields": {
                "label": "Campos",
                "description": "Nome(s) de campo separados por vírgula pelos quais dividir (uma chave de múltiplos campos une os valores com '__')."
              },
              "format": {
                "label": "Formato",
                "description": "Extensão do formato de saída: geojson (padrão), fgb, parquet, shp."
              }
            }
          },
          "split_by_features": {
            "name": "Dividir por feições",
            "description": "Recorta uma camada de entrada por cada zona de uma camada de divisão poligonal, gravando um arquivo de saída por valor distinto do campo de divisão. Zonas que compartilham um valor são dissolvidas primeiro, e zonas vazias são ignoradas. Como o ArcGIS Split (Analysis).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições a dividir (ponto, linha ou polígono)."
              },
              "split_features": {
                "label": "Feições de divisão",
                "description": "Camada de polígonos cujas feições definem as zonas de divisão."
              },
              "split_field": {
                "label": "Campo de divisão",
                "description": "Campo em 'split_features' que fornece o nome de cada saída."
              },
              "output_dir": {
                "label": "Diretório de saída",
                "description": "Diretório que recebe um arquivo de saída por valor de divisão distinto."
              },
              "output_format": {
                "label": "Formato de saída",
                "description": "Extensão/driver do arquivo de saída: 'geojson' (padrão), 'shp', 'gpkg', 'parquet', 'csv'."
              }
            }
          },
          "split_line_at_point": {
            "name": "Dividir linha em um ponto",
            "description": "Divide feições de polilinha nas localizações de feições pontuais que estejam dentro de um raio de busca, inserindo um nó em cada ponto ajustado e emitindo uma feição por subsegmento resultante (atributos do pai preservados) — como o ArcGIS Split Line At Point.",
            "params": {
              "input_lines": {
                "label": "Linhas de entrada",
                "description": "Camada vetorial de polilinhas de entrada a ser dividida."
              },
              "point_features": {
                "label": "Feições de pontos",
                "description": "Camada vetorial de pontos (ou multipontos) cujas localizações definem os nós de divisão."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Distância máxima, nas unidades do CRS das linhas, entre um ponto e uma linha para que o ponto divida essa linha. Obrigatória, positiva."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de linhas de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              }
            }
          },
          "split_raster": {
            "name": "Dividir raster",
            "description": "Divide um raster em ladrilhos independentes por contagem de ladrilhos, tamanho fixo em pixels ou feições poligonais, com sobreposição opcional em pixels — como o ArcGIS Split Raster. Cada ladrilho preserva o CRS e o georreferenciamento.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada."
              },
              "output_dir": {
                "label": "Diretório de saída",
                "description": "Diretório de saída para os arquivos de ladrilhos (criado se necessário)."
              },
              "base_name": {
                "label": "Nome base",
                "description": "Prefixo do nome dos arquivos de saída (padrão 'tile')."
              },
              "split_method": {
                "label": "Método de divisão",
                "description": "'count' (grade N×M, padrão), 'size' (ladrilhos de pixels fixos) ou 'polygons' (um recorte por feição)."
              },
              "num_x": {
                "label": "Número em X",
                "description": "Número de colunas de ladrilhos para 'count' (padrão 2)."
              },
              "num_y": {
                "label": "Número em Y",
                "description": "Número de linhas de ladrilhos para 'count' (padrão 2)."
              },
              "tile_size_x": {
                "label": "Tamanho do ladrilho X",
                "description": "Largura do ladrilho em pixels para 'size' (padrão 256)."
              },
              "tile_size_y": {
                "label": "Tamanho do ladrilho Y",
                "description": "Altura do ladrilho em pixels para 'size' (padrão 256)."
              },
              "polygons": {
                "label": "Polígonos",
                "description": "Camada vetorial de polígonos para o modo 'polygons' (um ladrilho por feição)."
              },
              "overlap": {
                "label": "Sobreposição",
                "description": "Sobreposição em pixels acrescentada a cada ladrilho em todos os lados (padrão 0)."
              },
              "format": {
                "label": "Formato",
                "description": "Extensão/driver do arquivo de saída: 'tif' (padrão) ou 'png'."
              }
            }
          },
          "stack_profile": {
            "name": "Perfil de pilha",
            "description": "Amostra vários rasters de superfície ao longo da mesma polilinha e emite uma única tabela em formato longo (LINE_ID, FIRST_DIST, FIRST_Z, SRC_ID, SRC_NAME) para que as superfícies possam ser comparadas em seção transversal sobre um eixo de distância compartilhado. Como o ArcGIS Stack Profile.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições de linha de entrada a perfilar."
              },
              "surfaces": {
                "label": "Superfícies",
                "description": "Lista separada por vírgula ou ponto e vírgula dos caminhos dos rasters de superfície, amostrados na ordem fornecida."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho da tabela de perfis de saída. Se omitido, armazenado em memória."
              },
              "sample_distance": {
                "label": "Distância de amostragem",
                "description": "Espaçamento entre estações em unidades do mapa (padrão: o menor tamanho de célula entre as entradas)."
              },
              "line_id_field": {
                "label": "Campo de ID da linha",
                "description": "Campo opcional que fornece LINE_ID; o padrão é o índice da feição."
              },
              "method": {
                "label": "Método",
                "description": "Amostragem da superfície: 'bilinear' (padrão) ou 'nearest'."
              }
            }
          },
          "storage_capacity": {
            "name": "Capacidade de armazenamento",
            "description": "Varre elevações da superfície da água sobre um DEM e relata a área inundada e o volume armazenado em cada nível (a curva cota-área-volume) por zona de análise ou sobre todo o DEM, como o ArcGIS Storage Capacity.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster do DEM de entrada (elevações)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de saída (zone_id, level, elevation, area, volume)."
              },
              "zones": {
                "label": "Zonas",
                "description": "Camada de polígonos opcional; uma curva cota-área-volume por polígono. Se omitida, todo o DEM é uma única zona."
              },
              "zone_id_field": {
                "label": "Campo de ID da zona",
                "description": "Campo que nomeia cada zona na saída (padrão: o índice da feição)."
              },
              "num_levels": {
                "label": "Número de níveis",
                "description": "Número de passos de elevação entre o mínimo e o máximo de cada zona (padrão 20). Ignorado se 'increment' for fornecido."
              },
              "increment": {
                "label": "Incremento",
                "description": "Passo fixo de elevação entre os níveis (unidades do mapa). Substitui 'num_levels'."
              },
              "min_elevation": {
                "label": "Elevação mínima",
                "description": "Limite inferior de elevação opcional para a varredura (padrão: o terreno mínimo de cada zona)."
              },
              "max_elevation": {
                "label": "Elevação máxima",
                "description": "Limite superior de elevação opcional para a varredura (padrão: o terreno máximo de cada zona)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) do DEM (padrão 1)."
              }
            }
          },
          "strip_map_index_features": {
            "name": "Feições de índice em faixas",
            "description": "Percorre cada linha de entrada e emite uma sequência numerada de retângulos de página rotacionados e sobrepostos, orientados pelo rumo local da rota, para atlas em faixa ao longo de uma rodovia, rio, duto ou trilha — como o ArcGIS Strip Map Index Features.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de linhas de entrada a indexar."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída com as páginas do índice (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "page_length": {
                "label": "Comprimento da página",
                "description": "Comprimento de cada página ao longo da rota, em unidades do CRS. Obrigatório."
              },
              "page_width": {
                "label": "Largura da página",
                "description": "Largura de cada página transversalmente à rota, em unidades do CRS. Obrigatória."
              },
              "overlap": {
                "label": "Sobreposição",
                "description": "Fração [0, 1) de page_length em que as páginas consecutivas se sobrepõem ao longo da rota. Padrão 0."
              },
              "orientation": {
                "label": "Orientação",
                "description": "along_line (padrão): rotaciona cada página para o rumo de sua corda local. horizontal/vertical: ajusta a rotação ao eixo leste-oeste/norte-sul mais próximo."
              },
              "start_page": {
                "label": "Página inicial",
                "description": "Primeiro número de página a atribuir. Padrão 1."
              }
            }
          },
          "subdivide_polygon": {
            "name": "Subdividir polígono",
            "description": "Divide cada polígono em partes de área igual (um número definido de partes ou uma área alvo para cada uma) usando cortes paralelos retos em um ângulo dado, como o ArcGIS Subdivide Polygon.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de polígonos de entrada (use um CRS projetado/equivalente para obter áreas realmente iguais)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de polígonos de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "'equal_parts' (num_parts faixas de área igual, padrão) ou 'equal_areas' (faixas de target_area, com o restante na última)."
              },
              "num_parts": {
                "label": "Número de partes",
                "description": "Número de partes de área igual (para method=equal_parts). Padrão 2."
              },
              "target_area": {
                "label": "Área alvo",
                "description": "Área de cada parte em unidades do CRS (obrigatória para method=equal_areas)."
              },
              "angle": {
                "label": "Ângulo",
                "description": "Orientação dos cortes em graus (0 = cortes verticais / faixas horizontais). Padrão 0."
              }
            }
          },
          "subset_features": {
            "name": "Subconjunto de feições",
            "description": "Divide aleatoriamente uma camada de feições em um subconjunto de treinamento e seu complemento (subconjunto de teste), por percentual ou contagem absoluta, usando um RNG determinístico com semente. Opcionalmente estratificado por um campo de grupo. Como o ArcGIS Subset Features.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada (qualquer tipo de geometria)."
              },
              "output_training": {
                "label": "Saída de treinamento",
                "description": "Caminho de saída para o subconjunto de treinamento. Se omitido, armazenado em memória."
              },
              "output_test": {
                "label": "Saída de teste",
                "description": "Caminho opcional de saída para o subconjunto complementar (de teste). Se omitido, o subconjunto de teste é armazenado em memória."
              },
              "size": {
                "label": "Tamanho",
                "description": "Tamanho do subconjunto de treinamento: uma porcentagem (0-100) ou uma contagem absoluta de feições, conforme 'size_method' (padrão 50)."
              },
              "size_method": {
                "label": "Método de tamanho",
                "description": "'percentage' (padrão) ou 'absolute'."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente do gerador de números aleatórios para uma divisão reproduzível (padrão: uma constante fixa)."
              },
              "group_field": {
                "label": "Campo de agrupamento",
                "description": "Campo opcional pelo qual estratificar: cada grupo contribui com sua própria parcela proporcional do subconjunto de treinamento."
              }
            }
          },
          "subset_multidimensional_raster": {
            "name": "Subconjunto de raster multidimensional",
            "description": "Restringe um cubo raster multidimensional a um subconjunto de suas fatias, por intervalo de coordenadas da dimensão, índices explícitos ou um passo (ArcGIS Subset Multidimensional Raster / Select By Dimension). As ferramentas de cubo da rodada 18 consomem todas um cubo inteiro, de modo que não havia como analisar uma janela de estudo sem regenerar a entrada fora do catálogo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster multidimensional, ou uma lista de rasters corregistrados separada por vírgula cujas bandas se concatenam em um único cubo."
              },
              "dimension_values": {
                "label": "Valores da dimensão",
                "description": "Coordenadas por fatia estritamente crescentes opcionais (datas, profundidades, comprimentos de onda), uma por fatia. Exigidas por 'dimension_range'."
              },
              "dimension": {
                "label": "Dimensão",
                "description": "Nome da dimensão, usado apenas no relatório (padrão 'slice')."
              },
              "dimension_range": {
                "label": "Intervalo da dimensão",
                "description": "Intervalo de coordenadas inclusivo como 'min,max'. Requer 'dimension_values'. Mutuamente exclusivo com 'indices'."
              },
              "indices": {
                "label": "Índices",
                "description": "Índices de fatias explícitos em base 0, por exemplo '0,2,5'. Mutuamente exclusivo com 'dimension_range'."
              },
              "step": {
                "label": "Passo",
                "description": "Manter cada N-ésima fatia após os demais filtros (padrão 1)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de cubo de saída, uma banda por fatia mantida. Se omitido, armazenado em memória."
              }
            }
          },
          "summarize_categorical_raster": {
            "name": "Resumir raster categórico",
            "description": "Tabula a contagem de células, a área e a proporção de cada classe em um raster categórico, uma linha por fatia para pilhas multibanda/multidimensionais, opcionalmente restrito a uma área de interesse (ArcGIS Summarize Categorical Raster). O raster_area incluído grava os totais por classe de volta nas células raster em vez de em uma tabela e é apenas de banda única, de modo que não consegue produzir a série de área por classe por data que a análise de mudança de cobertura do solo precisa. A área das células é integrada por linha para rasters geográficos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster categórico de entrada (de banda única ou multibanda)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional da tabela de saída. Se omitido, o resultado é armazenado em memória."
              },
              "aoi": {
                "label": "AOI",
                "description": "Camada de polígonos opcional que restringe o resumo a uma área de interesse."
              },
              "aoi_id_field": {
                "label": "Campo de ID da AOI",
                "description": "Campo em 'aoi' que identifica cada área; quando fornecido, o resumo é produzido por feição da AOI."
              },
              "area_units": {
                "label": "Unidades de área",
                "description": "Unidades de área: map_units (padrão), hectares ou square_kilometers."
              },
              "include_nodata": {
                "label": "Incluir nodata",
                "description": "Se verdadeiro, o nodata é relatado como sua própria linha de classe (padrão false)."
              },
              "bands": {
                "label": "Bandas",
                "description": "Lista de bandas em base 1 separadas por vírgula a resumir (padrão: todas as bandas)."
              }
            }
          },
          "summarize_nearby": {
            "name": "Resumir nas proximidades",
            "description": "Gera buffers das feições de entrada em uma ou mais distâncias em linha reta e resume uma segunda camada dentro de cada buffer: contagem de feições, área intersectada (polígonos), comprimento recortado (linhas) e soma/média ponderada pela medida de campos numéricos.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de entrada cujas feições recebem buffer (pontos, linhas ou polígonos), com formato detectado automaticamente (ou identificador em memória)."
              },
              "summary_features": {
                "label": "Feições de resumo",
                "description": "Camada vetorial a resumir dentro de cada buffer (os polígonos são resumidos pela área intersectada, as linhas pelo comprimento recortado e os pontos por contagem)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "distances": {
                "label": "Distâncias",
                "description": "Lista separada por vírgula das distâncias de buffer em unidades do CRS, por exemplo \"1000,2000,5000\". Ordenada de forma crescente; os valores duplicados e não positivos são descartados."
              },
              "sum_fields": {
                "label": "Campos de soma",
                "description": "Campos numéricos opcionais separados por vírgula na camada de resumo a agregar. Cada um gera uma coluna sum_<field> e uma mean_<field> (ponderadas pela área para polígonos, pelo comprimento para linhas e simples para pontos)."
              },
              "id_field": {
                "label": "Campo de ID",
                "description": "Campo opcional na camada de entrada que identifica cada feição de origem na saída. O padrão é o índice da feição de entrada."
              }
            }
          },
          "summarize_percent_change": {
            "name": "Resumir variação percentual",
            "description": "Conta incidentes de um período atual e de um período anterior dentro de cada feição de área e relata a diferença de contagem, a mudança percentual e uma classe de mudança. A mudança percentual é nula (classe 'new') onde a contagem anterior é zero. Como o ArcGIS Summarize Percent Change.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições de área (setores, tratos, células de grade) nas quais resumir."
              },
              "current_features": {
                "label": "Feições atuais",
                "description": "Feições pontuais de incidentes do período atual."
              },
              "previous_features": {
                "label": "Feições anteriores",
                "description": "Feições pontuais de incidentes do período anterior."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho de saída para as áreas com os campos de mudança. Se omitido, armazenado em memória."
              },
              "search_radius": {
                "label": "Raio de busca",
                "description": "Distância opcional em unidades do mapa; os incidentes situados dentro desta distância de uma área também contam, e não apenas os que estão dentro dela. Observe que um raio positivo faz as áreas de captação se sobreporem, de modo que um incidente pode ser contado por mais de uma área (os totais gerais relatados permanecem desduplicados)."
              }
            }
          },
          "summarize_within": {
            "name": "Resumir dentro de",
            "description": "Resume os atributos de uma camada dentro de uma camada de polígonos existente, ponderando feições parcialmente sobrepostas pela área ou comprimento intersectado, como o ArcGIS Summarize Within.",
            "params": {
              "polygons": {
                "label": "Polígonos",
                "description": "Camada de polígonos na qual resumir. Suas feições e atributos são preservados."
              },
              "input": {
                "label": "Entrada",
                "description": "Camada que está sendo resumida (ponto, linha ou polígono)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional dos polígonos de saída. Se omitido, o resultado é armazenado em memória."
              },
              "fields": {
                "label": "Campos",
                "description": "Pares 'field:statistic' separados por vírgula, por exemplo 'pop:sum,income:mean'. Estatísticas: sum, mean, min, max, stddev, count."
              },
              "keep_all": {
                "label": "Manter todos",
                "description": "Manter os polígonos sem feições intersectantes (padrão true). Quando falso, os polígonos vazios são descartados."
              },
              "shape_sum": {
                "label": "Soma de formas",
                "description": "Acrescentar a contagem / o comprimento / a área somados da geometria de entrada intersectada (padrão true)."
              },
              "group_field": {
                "label": "Campo de agrupamento",
                "description": "Campo opcional na camada resumida; emite uma linha de resumo agrupada por valor distinto."
              }
            }
          },
          "summary_statistics": {
            "name": "Estatísticas resumo",
            "description": "GROUP BY no estilo SQL sobre um ou mais campos de caso: para cada combinação única de campos de caso, calcula uma lista de agregados (campo, estatística) (count/sum/mean/min/max/std/first/last) mais uma contagem de registros do grupo. A saída é uma tabela de atributos pura. Sem campo de caso, produz uma única linha de total geral (como o Summary Statistics do ArcGIS; apenas contagem reproduz o Frequency).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial ou tabela de atributos de entrada a agregar."
              },
              "statistics": {
                "label": "Estatísticas",
                "description": "Lista separada por ponto e vírgula ou vírgula de pares 'field statistic' (também aceita 'field:statistic'), por exemplo 'population sum; population mean; elev max'. Estatísticas: count, sum, mean, min, max, std, first, last."
              },
              "case_fields": {
                "label": "Campos de caso",
                "description": "Nome(s) de campo de caso (GROUP BY) opcionais separados por vírgula ou ponto e vírgula. Se omitidos, é produzida uma única linha de resumo sobre toda a tabela."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional da tabela de saída (driver a partir de sua extensão; GeoParquet ou CSV). Se omitido, a tabela é armazenada em memória. Colunas: os campos de caso, uma contagem de registros 'count' e, em seguida, uma coluna '<field>_<statistic>' por par solicitado."
              }
            }
          },
          "sun_shadow_volume": {
            "name": "Volume de sombra solar",
            "description": "Extruda sólidos 3D ao longo do vetor solar até o solo para produzir sólidos fechados de volume de sombra para uma data e hora dadas (ArcGIS Sun Shadow Volume). shadow_image, shadow_animation e time_in_daylight trabalham todos sobre um DSM raster e emitem rasters, e solar_radiation calcula a irradiância — nenhum produz geometria de sombra, de modo que perguntas como \"esta janela está sombreada\" ou \"quanto do espaço aéreo deste lote está na sombra\" não podem ser respondidas. A saída se compõe com inside_3d, intersect_3d e union_3d.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Sólidos 3D de edificações ou contornos extrudados (MultiPolygons de malha triangular com Z)."
              },
              "output": {
                "label": "Saída",
                "description": "Sólidos de volume de sombra fechados. Se omitido, armazenado em memória."
              },
              "datetime": {
                "label": "Data e hora",
                "description": "Data e hora local da posição do sol como 'AAAA-MM-DDTHH:MM' ou 'AAAA-MM-DD HH:MM'. Tomada como parâmetro, nunca de um relógio, de modo que os resultados sejam reproduzíveis."
              },
              "latitude": {
                "label": "Latitude",
                "description": "Latitude em graus, usada para a geometria solar. Obrigatória: não pode ser derivada sem um motor de projeção."
              },
              "utc_offset": {
                "label": "Deslocamento UTC",
                "description": "Horas em relação ao UTC do horário local fornecido (padrão 0)."
              },
              "adjusted_for_dst": {
                "label": "Ajustado para horário de verão",
                "description": "Tratar o horário fornecido como ajustado ao horário de verão, subtraindo uma hora antes do cálculo solar (padrão false), correspondendo ao ArcGIS."
              },
              "ground_elevation": {
                "label": "Elevação do solo",
                "description": "Z constante do solo sobre o qual a sombra é projetada. Padrão: o Z mínimo de cada feição."
              },
              "max_length": {
                "label": "Comprimento máximo",
                "description": "Limite da distância de varredura em unidades do CRS, de modo que um sol baixo não produza um prisma de quilômetros de comprimento. Padrão: ilimitado."
              }
            }
          },
          "surface_difference": {
            "name": "Diferença de superfícies",
            "description": "Delineia onde uma superfície está acima, abaixo ou no mesmo nível de outra como polígonos, cada um carregando sua classe, área, volume e estatísticas de diferença (ArcGIS Surface Difference). cut_fill mede as mesmas quantidades, mas emite apenas um raster de rótulos de região e um CSV, de modo que suas regiões não têm geometria para sobrepor, recortar ou juntar; surface_volume e polygon_volume medem contra um plano ou dentro de polígonos que você já tem, em vez de descobri-los.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de superfície a classificar."
              },
              "reference": {
                "label": "Referência",
                "description": "Superfície de referência: o caminho de um raster corregistrado, ou uma elevação constante com a qual comparar em relação a um datum plano."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de polígonos de saída com as regiões classificadas. Se omitido, armazenado em memória."
              },
              "output_raster": {
                "label": "Raster de saída",
                "description": "Raster de diferença com sinal de saída (entrada menos referência). Sempre produzido; armazenado em memória quando nenhum caminho é fornecido."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "As diferenças dentro deste valor em torno de zero contam como coincidentes (padrão 0.0)."
              },
              "min_area": {
                "label": "Área mínima",
                "description": "Descartar as regiões menores que esta área em unidades do mapa ao quadrado."
              },
              "include_coincident": {
                "label": "Incluir coincidentes",
                "description": "Emitir polígonos também para a classe inalterada (padrão false). Desativado por padrão porque, na maioria das cenas, trata-se de um único polígono de fundo enorme."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) da superfície de entrada (padrão 1)."
              },
              "reference_band": {
                "label": "Banda de referência",
                "description": "Banda (base 1) da superfície de referência (padrão 1)."
              }
            }
          },
          "surface_parameters": {
            "name": "Parâmetros de superfície",
            "description": "Declividade, orientação ou curvatura (mean/profile/tangential/plan/gaussian/casorati/contour_geodesic_torsion) a partir de um DEM via ajuste local de superfície quadrática/biquadrática por mínimos quadrados sobre uma distância de vizinhança escolhida, como o ArcGIS Surface Parameters — a contraparte adaptativa à escala das ferramentas de terreno 3×3 fixas incluídas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de elevação de entrada (DEM)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster de saída. Se omitido, armazenado em memória."
              },
              "parameter": {
                "label": "Parâmetro",
                "description": "Qual parâmetro calcular: slope (padrão), aspect, mean_curvature, profile_curvature, tangential_curvature, plan_curvature, gaussian_curvature, casorati_curvature, contour_geodesic_torsion."
              },
              "fit": {
                "label": "Ajuste",
                "description": "Modelo de superfície: 'quadratic' (6 termos, padrão) ou 'biquadratic' (9 termos)."
              },
              "neighborhood_distance": {
                "label": "Distância da vizinhança",
                "description": "Raio da vizinhança em unidades do mapa (padrão = um tamanho de célula, ou seja, uma janela 3×3)."
              },
              "neighborhood_type": {
                "label": "Tipo de vizinhança",
                "description": "'fixed' (padrão) usa o raio completo em toda parte; 'adaptive' reduz a janela para 1 célula junto a lacunas/bordas dos dados."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler (padrão 1)."
              }
            }
          },
          "surface_volume": {
            "name": "Volume de superfície",
            "description": "Integra uma superfície raster contra um plano de referência horizontal, relatando área 2D, área 3D da superfície e volume da porção acima e/ou abaixo do plano (como o Surface Volume do ArcGIS). Análise de corte/aterro de terraplanagem e de capacidade de reservatórios.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de superfície de elevação de entrada."
              },
              "reference_plane": {
                "label": "Plano de referência",
                "description": "Elevação do plano de referência contra a qual integrar (padrão 0)."
              },
              "direction": {
                "label": "Direção",
                "description": "Qual lado do plano integrar: 'above', 'below' ou 'both' (padrão 'above')."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler (padrão 1)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do CSV de saída para a tabela de resultados. Se omitido, os resultados são retornados apenas no resultado da execução."
              }
            }
          },
          "table_to_geometry": {
            "name": "Tabela para geometria",
            "description": "Constrói feições de linhas ou elipses a partir de campos tabulares: pares de coordenadas de início/fim (XY To Line), origem + rumo + distância (Bearing Distance To Line) ou centro + eixos maior/menor + azimute (Table To Ellipse) — com construção de linhas planares, geodésicas e loxodrômicas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Tabela de atributos ou camada vetorial de pontos de entrada."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "mode": {
                "label": "Modo",
                "description": "'xy_to_line', 'bearing_distance' ou 'ellipse'."
              },
              "line_type": {
                "label": "Tipo de linha",
                "description": "'geodesic' (padrão, caminho mais curto sobre o elipsoide WGS84), 'rhumb' (rumo constante) ou 'planar' (segmentos cartesianos retos nas unidades da própria entrada)."
              },
              "vertex_spacing": {
                "label": "Espaçamento de vértices",
                "description": "Espaçamento de densificação para as linhas curvas (geodesic/rhumb) e espaçamento de amostragem do contorno da elipse, em metros para geodesic/rhumb ou em unidades do CRS para planar. Padrão: um número fixo de segmentos."
              },
              "polygon_output": {
                "label": "Saída de polígonos",
                "description": "Apenas mode=ellipse: emite um Polygon preenchido em vez de um contorno de linha fechada. Padrão false."
              },
              "start_x": {
                "label": "X inicial",
                "description": "mode=xy_to_line: campo que contém o X / longitude inicial."
              },
              "start_y": {
                "label": "Y inicial",
                "description": "mode=xy_to_line: campo que contém o Y / latitude inicial."
              },
              "end_x": {
                "label": "X final",
                "description": "mode=xy_to_line: campo que contém o X / longitude final."
              },
              "end_y": {
                "label": "Y final",
                "description": "mode=xy_to_line: campo que contém o Y / latitude final."
              },
              "x": {
                "label": "X",
                "description": "mode=bearing_distance/ellipse: campo que contém o X / longitude da origem/centro."
              },
              "y": {
                "label": "Y",
                "description": "mode=bearing_distance/ellipse: campo que contém o Y / latitude da origem/centro."
              },
              "bearing": {
                "label": "Rumo",
                "description": "mode=bearing_distance: campo que contém o rumo em graus no sentido horário a partir do norte."
              },
              "distance": {
                "label": "Distância",
                "description": "mode=bearing_distance: campo que contém a distância percorrida (metros para geodesic/rhumb, unidades do CRS para planar)."
              },
              "major": {
                "label": "Maior",
                "description": "mode=ellipse: campo que contém o comprimento do semieixo maior (metros para geodesic/rhumb, unidades do CRS para planar)."
              },
              "minor": {
                "label": "Menor",
                "description": "mode=ellipse: campo que contém o comprimento do semieixo menor (mesmas unidades do maior)."
              },
              "azimuth": {
                "label": "Azimute",
                "description": "mode=ellipse: campo que contém a direção do eixo maior em graus no sentido horário a partir do norte."
              }
            }
          },
          "tabulate_intersection": {
            "name": "Tabular interseção",
            "description": "Resumo zonal vetor sobre vetor: reparte uma camada de classes (polígonos por área, linhas por comprimento intersectado ou pontos por contagem) entre polígonos de zona, relatando a medida intersectada, o percentual da zona e campos de soma ponderada pela medida.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de polígonos de zonas, com formato detectado automaticamente (ou identificador em memória)."
              },
              "class_features": {
                "label": "Feições de classe",
                "description": "Camada vetorial de classes a repartir entre as zonas (os polígonos são resumidos por área, as linhas pelo comprimento intersectado e os pontos por contagem)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "class_field": {
                "label": "Campo de classe",
                "description": "Campo categórico opcional na camada de classes; os resultados são agrupados por zona x este valor. Omita para tratar todas as feições de classe como uma única classe."
              },
              "sum_fields": {
                "label": "Campos de soma",
                "description": "Campos numéricos opcionais separados por vírgula na camada de classes a repartir em cada zona (ponderados pela área para polígonos, pelo comprimento para linhas e somados para pontos)."
              },
              "zone_field": {
                "label": "Campo de zona",
                "description": "Campo opcional que identifica cada zona na saída. O padrão é o índice da feição da zona."
              }
            }
          },
          "thin_road_network": {
            "name": "Afinar a rede viária",
            "description": "Generaliza uma rede viária para exibição em pequena escala: oculta vias curtas de baixa hierarquia preservando a conectividade, sinalizando cada via como visível/rarefeita (não destrutivo), como o ArcGIS Thin Road Network.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial de estradas (linhas) de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "min_length": {
                "label": "Comprimento mínimo",
                "description": "As estradas mais curtas que isso (unidades do CRS) são candidatas à rarefação. As estradas mais longas são sempre mantidas."
              },
              "hierarchy_field": {
                "label": "Campo de hierarquia",
                "description": "Campo numérico opcional de classe da estrada; valor menor = mais importante (mantida por mais tempo). As candidatas são rarefeitas a partir do número de classe mais alto."
              },
              "visibility_field": {
                "label": "Campo de visibilidade",
                "description": "Nome do campo de sinalização de visibilidade de saída (1 = mantida, 0 = rarefeita). Padrão 'visible'."
              },
              "keep_only": {
                "label": "Manter apenas",
                "description": "Se verdadeiro, gera apenas as estradas visíveis em vez de sinalizar todas elas. Padrão false (não destrutivo)."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "Distância dentro da qual as extremidades das estradas são tratadas como o mesmo entroncamento. Padrão 1e-6."
              }
            }
          },
          "tile_grid_polygons": {
            "name": "Polígonos de grade de ladrilhos",
            "description": "Emite os limites de ladrilhos de mapas web como polígonos para um nível de zoom (ou intervalo) e uma extensão, cada um carregando z/x/y e sua quadkey (ArcGIS Map Server Cache Tiling Scheme To Polygons, Create Vector Tile Index, Generate Tile Cache Tiling Scheme). As ferramentas de grade retangular/hexagonal incluídas constroem grades arbitrárias no CRS de entrada e não podem coincidir com a quadtree WebMercator que as ferramentas PMTiles e raster_to_tiles usam.",
            "params": {
              "zoom": {
                "label": "Zoom",
                "description": "Nível de zoom. Use com 'max_zoom' para emitir uma pirâmide de níveis."
              },
              "max_zoom": {
                "label": "Zoom máximo",
                "description": "Zoom mais alto opcional; quando fornecido, cada nível de 'zoom' até 'max_zoom' é emitido."
              },
              "extent": {
                "label": "Extensão",
                "description": "Camada raster ou vetorial opcional cujos limites recortam a grade. Sem ela, o mundo inteiro naquele zoom (sujeito a 'max_tiles')."
              },
              "bbox": {
                "label": "Caixa delimitadora",
                "description": "Extensão explícita opcional como 'min_lon,min_lat,max_lon,max_lat' em graus. Tem precedência sobre 'extent'."
              },
              "scheme": {
                "label": "Esquema",
                "description": "'xyz' (padrão, Google/OSM, y conta a partir do norte para baixo) ou 'tms' (y conta a partir do sul para cima)."
              },
              "output_crs": {
                "label": "CRS de saída",
                "description": "'EPSG:3857' (padrão, ladrilhos quadrados) ou 'EPSG:4326' (quadriláteros lon/lat)."
              },
              "max_tiles": {
                "label": "Máximo de ladrilhos",
                "description": "Limite rígido do número de ladrilhos (padrão 1000000); excedê-lo gera um erro que informa a contagem calculada."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de polígonos de saída. Se omitido, armazenado em memória."
              }
            }
          },
          "time_series_clustering": {
            "name": "Agrupamento de séries temporais",
            "description": "Agrupa as células de um cubo espaço-temporal H3 pela similaridade de suas séries temporais (valor, perfil normalizado por z ou correlação) com k-medoids determinístico, de modo que lugares que evoluem de forma semelhante se agrupem, como o ArcGIS Time Series Clustering.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos de entrada em EPSG:4326 (lon/lat) com um campo de carimbo de tempo."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo de carimbo de tempo (numérico ou data/data-hora ISO-8601)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de polígonos H3 de saída com cluster_id/is_medoid. Se omitido, armazenado em memória."
              },
              "num_clusters": {
                "label": "Número de agrupamentos",
                "description": "Número de agrupamentos k (padrão 4)."
              },
              "characteristic": {
                "label": "Característica",
                "description": "Distância entre séries temporais: 'value' (bruta), 'profile' (normalizada por escore z, padrão) ou 'correlation' (1 − r)."
              },
              "time_step": {
                "label": "Passo de tempo",
                "description": "Duração de um passo de tempo: um número simples (para um time_field numérico) ou uma duração como '1w', '7d', '12h'. Padrão '1w'."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo numérico opcional a somar em cada grupo. Padrão: a contagem de pontos por grupo."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Resolução H3 de 0 (mais grosseira) a 15 (mais fina); padrão 7 (células de ~5 km²)."
              },
              "seed": {
                "label": "Semente",
                "description": "Semente aleatória para a inicialização reproduzível dos medoides (padrão 1)."
              }
            }
          },
          "time_series_cross_correlation": {
            "name": "Correlação cruzada de séries temporais",
            "description": "Correlação cruzada defasada por célula entre duas pilhas raster espaço-temporais alinhadas (como o Time Series Cross Correlation / Multidimensional Raster Correlation do ArcGIS): para cada célula, opcionalmente remove tendência/sazonalidade, depois correlaciona a série A contra a série B ao longo de min_lag..=max_lag e relata a melhor defasagem e sua correlação de Pearson, mais uma correlação opcional na defasagem 0 e um pseudo valor-p de tamanho efetivo de amostra de Pyper-Peterman. O complemento de duas variáveis e sensível à defasagem das ferramentas de cubo de série única generate_trend_raster / change_point_detection — nada incluído relaciona duas variáveis ao longo do tempo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Pilha A: um raster multibanda (uma banda por passo de tempo) OU uma lista separada por vírgula dos caminhos de rasters de banda única corregistrados, em ordem temporal."
              },
              "secondary": {
                "label": "Secundário",
                "description": "Pilha B: mesma forma e comprimento de 'input' (raster multibanda ou lista de bandas únicas separada por vírgula)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de melhor defasagem de saída (defasagem inteira que maximiza |correlação|). Se omitido, armazenado em memória."
              },
              "corr_output": {
                "label": "Saída de correlação",
                "description": "Raster de saída opcional da correlação de Pearson (com sinal) na melhor defasagem."
              },
              "corr0_output": {
                "label": "Saída de correlação 0",
                "description": "Raster de saída opcional da correlação na defasagem 0 (contemporânea)."
              },
              "pvalue_output": {
                "label": "Saída de valor-p",
                "description": "Raster de saída opcional de um pseudo valor-p bilateral na melhor defasagem (tamanho de amostra efetivo de Pyper-Peterman + z de Fisher)."
              },
              "min_lag": {
                "label": "Defasagem mínima",
                "description": "Defasagem mínima em passos de tempo (padrão -6). A[t] é emparelhado com B[t+lag]."
              },
              "max_lag": {
                "label": "Defasagem máxima",
                "description": "Defasagem máxima em passos de tempo (padrão 6). Deve ser >= min_lag."
              },
              "detrend": {
                "label": "Remover tendência",
                "description": "Se verdadeiro, subtrai uma tendência linear OLS por série antes de correlacionar (padrão false)."
              },
              "deseasonalize": {
                "label": "Remover sazonalidade",
                "description": "Se verdadeiro, subtrai um ciclo sazonal aditivo por série com período 'season_length' antes de correlacionar (padrão false)."
              },
              "season_length": {
                "label": "Comprimento da estação",
                "description": "Período sazonal (passos de tempo) usado quando 'deseasonalize' é verdadeiro (padrão 12)."
              },
              "min_valid": {
                "label": "Mínimo válido",
                "description": "Número mínimo de pares sobrepostos válidos exigido para correlacionar em uma defasagem (padrão 5)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a ler quando a pilha é fornecida como uma lista de bandas únicas separada por vírgula (padrão 1). Ignorado para pilhas multibanda."
              }
            }
          },
          "time_series_forecast": {
            "name": "Previsão de séries temporais",
            "description": "Previsão por localização em um cubo espaço-temporal H3 (como o ArcGIS Exponential Smoothing / Curve Fit Forecast): prevê a série de cada célula à frente por suavização exponencial de Holt ou ajustes de curvas polinomiais, escolhendo por célula o modelo de menor RMSE de retenção, com previsões do próximo/último passo e uma semilargura de confiança de 90%. A previsão temporal que o trend_surface espacial incluído não consegue fazer.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos de entrada com eventos com carimbo de tempo (lon/lat)."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo que contém o tempo de cada ponto: um número ou um carimbo de tempo ISO-8601."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de polígonos H3 de saída com os atributos de previsão. Se omitido, armazenado em memória."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo numérico a agregar por grupo (padrão: contagem de pontos)."
              },
              "steps": {
                "label": "Passos",
                "description": "Número de passos de tempo a prever adiante (padrão 3)."
              },
              "model": {
                "label": "Modelo",
                "description": "'auto' (menor RMSE de validação; padrão), 'exp_smoothing', 'linear' ou 'parabolic'."
              },
              "holdout": {
                "label": "Retenção",
                "description": "Passos de tempo reservados para validar/selecionar o modelo (padrão 3)."
              },
              "time_step": {
                "label": "Passo de tempo",
                "description": "Duração de um passo de tempo nas unidades de time_field (padrão 1)."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Resolução H3 de 0 a 15 (padrão 7)."
              }
            }
          },
          "time_series_smoothing": {
            "name": "Suavização de séries temporais",
            "description": "Suaviza uma série temporal dentro da amostra por localização (como o ArcGIS Time Series Smoothing): agrupa feições por id_field, ordena cada grupo por time_field e anexa um valor suavizado via média móvel retroativa/centrada/prospectiva ou uma passagem local-linear de largura de banda adaptativa (LOESS). A geometria e todos os atributos originais são preservados. Complementa time_series_forecast, que projeta à frente em vez de suavizar a série observada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de feições de entrada com observações com carimbo de tempo."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Campo numérico cuja série é suavizada."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo que ordena cada série: um número ou um carimbo de tempo ISO-8601."
              },
              "id_field": {
                "label": "Campo de ID",
                "description": "Campo que identifica cada local/série. Se omitido, todas as feições formam uma única série."
              },
              "method": {
                "label": "Método",
                "description": "'moving_average' (padrão) ou 'local_linear' (LOESS com largura de banda adaptativa)."
              },
              "window": {
                "label": "Janela",
                "description": "moving_average: número de pontos na janela de média (padrão 3)."
              },
              "bandwidth": {
                "label": "Largura de banda",
                "description": "local_linear: número de pontos mais próximos no tempo usados por ajuste local (padrão 5)."
              },
              "alignment": {
                "label": "Alinhamento",
                "description": "Posicionamento da janela do moving_average: 'backward', 'centered' (padrão) ou 'forward'."
              },
              "output_field": {
                "label": "Campo de saída",
                "description": "Nome do campo suavizado adicionado (padrão 'smoothed')."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho da camada de saída. Se omitido, armazenado em memória."
              }
            }
          },
          "topo_to_raster": {
            "name": "Topo para raster",
            "description": "Interpola um DEM hidrologicamente correto a partir de curvas de nível, pontos cotados e linhas de cursos d'água opcionais usando uma relaxação de curvatura mínima (placa fina) com imposição de drenagem — como o ArcGIS Topo To Raster (ANUDEM). Ao contrário dos interpoladores IDW/TIN/spline incluídos, não cria terraços nas curvas de nível e remove depressões fechadas espúrias.",
            "params": {
              "contours": {
                "label": "Curvas de nível",
                "description": "Camada vetorial de linhas de contorno de entrada (elevação lida de elevation_field). É necessário pelo menos um entre contours/points."
              },
              "points": {
                "label": "Pontos",
                "description": "Camada vetorial de pontos cotados de entrada (elevação lida de elevation_field)."
              },
              "streams": {
                "label": "Cursos d'água",
                "description": "Camada vetorial opcional de linhas de cursos d'água usada para forçar a drenagem (gravada na superfície antes da remoção de depressões)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do raster DEM de saída (driver a partir da extensão). Se omitido, armazenado em memória."
              },
              "elevation_field": {
                "label": "Campo de elevação",
                "description": "Nome do campo numérico de elevação nas camadas de contornos e de pontos. Padrão: detecção automática (HEIGHT/ELEV/ELEVATION/Z, senão o primeiro campo numérico)."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do CRS. Padrão: dimensionado para que o eixo maior da grade tenha ~400 células."
              },
              "tension": {
                "label": "Tensão",
                "description": "Rigidez da superfície em [0,1]: 0 = placa fina pura (mais suave), 1 = membrana tensa. Padrão 0.35."
              },
              "iterations": {
                "label": "Iterações",
                "description": "Máximo de iterações SOR (padrão 2000). A iteração para antecipadamente quando a variação máxima da célula fica abaixo da tolerância."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Tolerância de convergência: para quando a maior variação de célula em uma iteração fica abaixo deste valor (unidades de elevação do CRS). Padrão 0.01."
              },
              "enforce_drainage": {
                "label": "Impor drenagem",
                "description": "Remove depressões interiores espúrias após a interpolação para que o DEM drene até suas bordas (padrão true)."
              },
              "stream_burn": {
                "label": "Gravar cursos d'água",
                "description": "Profundidade (unidades de elevação) para rebaixar as células dos cursos d'água antes da remoção de depressões, a fim de rotear o fluxo por elas. Padrão 0 (automático = 1% do relevo quando cursos d'água são fornecidos)."
              }
            }
          },
          "trace_proximity_events": {
            "name": "Rastrear eventos de proximidade",
            "description": "Encontra intervalos em que dois trajetos em movimento estiveram a uma distância um do outro por pelo menos uma duração mínima (eventos de proximidade), e opcionalmente rastreia contatos transitivos a jusante a partir de entidades semente, como o ArcGIS Trace Proximity Events.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos com carimbo de tempo (use um CRS projetado; as distâncias estão em unidades do mapa)."
              },
              "track_field": {
                "label": "Campo de trajeto",
                "description": "Campo que identifica cada entidade em movimento / trajeto."
              },
              "time_field": {
                "label": "Campo de tempo",
                "description": "Campo de carimbo de tempo (segundos numéricos ou ISO-8601)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de linhas de eventos de proximidade de saída. Se omitido, armazenado em memória."
              },
              "search_distance": {
                "label": "Distância de busca",
                "description": "Separação máxima para que dois trajetos estejam 'em proximidade' (unidades do mapa)."
              },
              "min_duration": {
                "label": "Duração mínima",
                "description": "Tempo mínimo em proximidade para contar como um evento: segundos ou uma duração como '5m', '1h' (padrão 0)."
              },
              "entities": {
                "label": "Entidades",
                "description": "Identificadores opcionais de trajetos semente separados por vírgula a partir dos quais rastrear os contatos subsequentes (rastreamento de contatos)."
              },
              "depth": {
                "label": "Profundidade",
                "description": "Número máximo de gerações de rastreamento a partir das sementes (padrão ilimitado)."
              }
            }
          },
          "transform_features": {
            "name": "Transformar feições",
            "description": "Aplica uma transformação afim (deslocamento, rotação em torno de uma âncora, escala por eixo, espelhamento) a cada geometria de uma camada vetorial.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de entrada, formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "dx": {
                "label": "Dx",
                "description": "Deslocamento aplicado a X após escala/espelhamento/rotação, em unidades do CRS. Padrão 0."
              },
              "dy": {
                "label": "Dy",
                "description": "Deslocamento aplicado a Y após escala/espelhamento/rotação, em unidades do CRS. Padrão 0."
              },
              "angle": {
                "label": "Ângulo",
                "description": "Rotação anti-horária em torno da âncora, em graus. Padrão 0."
              },
              "scale_x": {
                "label": "Escala X",
                "description": "Fator de escala em torno da âncora ao longo de X. Padrão 1."
              },
              "scale_y": {
                "label": "Escala Y",
                "description": "Fator de escala em torno da âncora ao longo de Y. Padrão 1."
              },
              "mirror_axis": {
                "label": "Eixo de espelhamento",
                "description": "Reflete através da âncora: NONE (padrão), X (inverte Y em relação ao eixo horizontal) ou Y (inverte X em relação ao eixo vertical)."
              },
              "anchor": {
                "label": "Âncora",
                "description": "Pivô para escala/espelhamento/rotação: CENTROID (centro da caixa delimitadora, padrão), ORIGIN (0,0) ou XY (usa anchor_x/anchor_y)."
              },
              "anchor_x": {
                "label": "Âncora X",
                "description": "Coordenada X da âncora; obrigatória quando anchor=XY."
              },
              "anchor_y": {
                "label": "Âncora Y",
                "description": "Coordenada Y da âncora; obrigatória quando anchor=XY."
              }
            }
          },
          "transform_fields": {
            "name": "Transformar campos",
            "description": "Padroniza, transforma e codifica campos de atributo (como o ArcGIS Standardize/Transform/Encode Field): escore z, mín-máx, robusto, log/log1p/sqrt/boxcox/inverso, classificação por intervalo igual/quantil/desvio padrão e codificação one-hot.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial (ou tabela) de entrada com os campos a transformar."
              },
              "fields": {
                "label": "Campos",
                "description": "Nomes dos campos a transformar separados por vírgula; a mesma transformação é aplicada a cada um."
              },
              "transform": {
                "label": "Transformação",
                "description": "Transformação a aplicar: zscore, minmax, robust, log, log1p, sqrt, boxcox, inverse, bin, onehot."
              },
              "output": {
                "label": "Saída",
                "description": "Camada vetorial de saída com os campos transformados adicionados. Se omitido, armazenado em memória."
              },
              "bins": {
                "label": "Classes do histograma",
                "description": "Número de classes para 'bin' (padrão 5)."
              },
              "bin_method": {
                "label": "Método de classes",
                "description": "Método de classificação para 'bin': equal_interval (padrão), quantile ou std_dev."
              },
              "boxcox_lambda": {
                "label": "Lambda de Box-Cox",
                "description": "Lambda fixo para 'boxcox'; se omitido, é ajustado por máxima verossimilhança (busca da seção áurea)."
              },
              "suffix": {
                "label": "Sufixo",
                "description": "Sufixo do nome do campo de saída (o padrão depende da transformação, por exemplo '_z' para zscore)."
              },
              "drop_input": {
                "label": "Descartar entrada",
                "description": "Se verdadeiro, remove o(s) campo(s) original(is) da saída após a transformação (padrão false)."
              }
            }
          },
          "transform_route_events": {
            "name": "Transformar eventos de rota",
            "description": "Rerreferencia eventos pontuais medidos contra um sistema de rotas de origem para um sistema de rotas de destino: recupera o XY de cada evento a partir de sua rota e medida de origem, depois o realoca na rota de destino mais próxima dentro de uma tolerância de agrupamento, emitindo o ID e a medida da rota de destino — como o ArcGIS Transform Route Events.",
            "params": {
              "source_events": {
                "label": "Eventos de origem",
                "description": "Camada de eventos pontuais de entrada. Cada feição carrega um identificador de rota (route_id_field) e uma medida (measure_field)."
              },
              "source_routes": {
                "label": "Rotas de origem",
                "description": "Sistema de rotas de origem: camada de linhas cujas feições são identificadas por route_id_field. As medidas são a distância a partir do primeiro vértice de cada rota."
              },
              "target_routes": {
                "label": "Rotas de destino",
                "description": "Sistema de rotas de destino: camada de linhas para a qual os eventos são realocados. Os identificadores de rota vêm de target_id_field."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de pontos de saída (driver a partir da extensão). Se omitido, o resultado é armazenado em memória."
              },
              "route_id_field": {
                "label": "Campo de ID da rota",
                "description": "Campo que nomeia o identificador de rota em source_events e source_routes (padrão 'route_id'). Campo ausente -> é usado o índice da feição da rota de origem."
              },
              "measure_field": {
                "label": "Campo de medida",
                "description": "Campo numérico em source_events que contém a medida do sistema de origem (padrão 'measure')."
              },
              "target_id_field": {
                "label": "Campo de ID do destino",
                "description": "Campo que nomeia o identificador de rota em target_routes (padrão: o mesmo de route_id_field). Campo ausente -> é usado o índice da feição da rota de destino."
              },
              "cluster_tolerance": {
                "label": "Tolerância de agrupamento",
                "description": "Distância XY máxima (unidades do CRS) entre a localização recuperada do evento e uma rota de destino para que o evento seja transferido. 0 ou omitido significa sem limite (ajusta sempre à rota de destino mais próxima)."
              }
            }
          },
          "transpose_fields": {
            "name": "Transpor campos",
            "description": "Remodela uma tabela de atributos larga para o formato longo: cada coluna de valor listada torna-se sua própria linha, marcada com a coluna de onde veio (ArcGIS Transpose Fields). pivot_table só vai de longo para largo, de modo que tabelas que chegam com uma coluna por período não podiam ser alimentadas às ferramentas de séries temporais que precisam de uma linha por observação.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada vetorial ou tabela de entrada."
              },
              "transpose_fields": {
                "label": "Transpor campos",
                "description": "Colunas de valores a despivotar, separadas por vírgula ou ponto e vírgula."
              },
              "value_field": {
                "label": "Campo de valor",
                "description": "Nome da coluna de saída que contém o valor da célula (padrão 'VALUE')."
              },
              "transposed_field": {
                "label": "Campo transposto",
                "description": "Nome da coluna de saída que contém o nome da coluna de origem (padrão 'FIELD')."
              },
              "field_labels": {
                "label": "Rótulos dos campos",
                "description": "Rótulos opcionais gravados em 'transposed_field' em vez dos nomes brutos das colunas, por exemplo '2000,2010,2020'. Deve ter o mesmo comprimento de 'transpose_fields'."
              },
              "retain_fields": {
                "label": "Campos a reter",
                "description": "Atributos copiados para cada linha de saída. O padrão são todos os campos não transpostos."
              },
              "drop_nulls": {
                "label": "Descartar nulos",
                "description": "Ignora as linhas de saída cujo valor é nulo (padrão false)."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de saída. Se omitido, armazenado em memória."
              }
            }
          },
          "trim_line": {
            "name": "Aparar linha",
            "description": "Exclui segmentos de linha curtos com pontas soltas (ultrapassagens e esporões) mais curtos do que uma tolerância de comprimento, mantendo interseções verdadeiras e linhas longas.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de linhas de entrada, com formato detectado automaticamente (ou identificador em memória)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional do vetor de saída (driver a partir de sua extensão). Se omitido, armazenado em memória."
              },
              "dangle_length": {
                "label": "Comprimento de ponta solta",
                "description": "Tolerância de comprimento em unidades do CRS. Um segmento pendente mais curto que isso é aparado; pendentes mais longos são mantidos. Deve ser positiva."
              },
              "keep_short": {
                "label": "Manter curtos",
                "description": "Quando verdadeiro (padrão), os segmentos curtos desconectados em ambas as extremidades (isolados) são mantidos; quando falso, também são excluídos. Os segmentos pendentes em exatamente uma extremidade são sempre aparados quando curtos."
              },
              "snap_tolerance": {
                "label": "Tolerância de ajuste",
                "description": "As extremidades situadas dentro desta distância (unidades do CRS) são tratadas como o mesmo nó. Padrão 1e-6."
              }
            }
          },
          "union_3d": {
            "name": "União 3D",
            "description": "Calcula o volume combinado de sólidos 3D fechados sobrepostos sem contar duas vezes suas interseções, mais os volumes de sobreposição por par (ArcGIS Union 3D). Nenhum dos registros tem qualquer sobreposição 3D, de modo que somar cápsulas de buffer_3d ou envoltórias de minimum_bounding_volume hoje conta duas vezes cada sobreposição; polygon_volume e surface_volume medem apenas contra um plano de referência. Os volumes por sólido são exatos (soma de tetraedros com sinal); a união é estimada por ocupação de voxels em uma resolução relatada.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Feições de sólidos 3D fechados (MultiPolygons de malha triangular com Z, como buffer_3d e minimum_bounding_volume emitem)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional da tabela de saída com os volumes por grupo. Se omitido, armazenado em memória."
              },
              "group_field": {
                "label": "Campo de agrupamento",
                "description": "Campo opcional; os sólidos são unidos dentro de cada valor de grupo em vez de em toda a camada."
              },
              "output_overlap_table": {
                "label": "Tabela de sobreposição de saída",
                "description": "Caminho opcional para os volumes de sobreposição por par. Se omitido, armazenado em memória (ainda assim é retornado)."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Amostras de voxel por eixo usadas para estimar o volume da união, de 4 a 512 (padrão 96). Valores maiores são mais precisos e mais lentos."
              }
            }
          },
          "unwrap_phase": {
            "name": "Desdobrar fase",
            "description": "Converte a fase interferométrica dobrada em (-pi, pi] em um campo absoluto contínuo por mínimos quadrados ponderados, resolvido com gradiente conjugado pré-condicionado, com ponderação e mascaramento por coerência opcionais (ArcGIS Unwrap Phase). Nada em nenhum dos registros desdobra a fase — raster_calculator não consegue expressar a solução global e os filtros de speckle incluídos suavizam em vez de desdobrar — de modo que a saída de fase do sar_coherence e o flatten_interferogram atualmente não têm um ponto final contínuo.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de fase envolvida em radianos, ou um interferograma I/Q de duas bandas."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de fase contínua desenrolada. Se omitido, armazenado em memória."
              },
              "method": {
                "label": "Método",
                "description": "'least_squares_pcg' (padrão), correspondendo ao método que o ArcGIS suporta."
              },
              "coherence": {
                "label": "Coerência",
                "description": "Raster de coerência corregistrado opcional usado como pesos de resolução por aresta, de modo que os pixels de baixa coerência puxem menos a solução."
              },
              "coherence_threshold": {
                "label": "Limiar de coerência",
                "description": "Mascara os pixels cuja coerência fica abaixo deste valor (padrão 0.3). Ignorado quando nenhum raster de coerência é fornecido. Um mascaramento que divide os pixels válidos em componentes desconectados deixa cada componente que não seja o do pixel de referência com sua própria constante aditiva arbitrária."
              },
              "max_iterations": {
                "label": "Máximo de iterações",
                "description": "Limite de iterações do PCG (padrão 500)."
              },
              "tolerance": {
                "label": "Tolerância",
                "description": "Resíduo relativo no qual a resolução para (padrão 1e-8)."
              },
              "reference_row": {
                "label": "Linha de referência",
                "description": "Linha do pixel fixado em zero, que define a constante aditiva da solução. Padrão: o primeiro pixel válido."
              },
              "reference_col": {
                "label": "Coluna de referência",
                "description": "Coluna do pixel fixado. Padrão: o primeiro pixel válido."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) que contém a fase. Omita-a para um raster de fase de banda única ou um interferograma I/Q de duas bandas (que é então detectado automaticamente); forneça-a para ler a fase real de uma banda específica de uma pilha multibanda. Um raster com mais de duas bandas EXIGE este parâmetro, porque três ou mais bandas não formam um par I/Q e adivinhar retornaria uma fase plausível, porém errada."
              }
            }
          },
          "validate_flow_direction": {
            "name": "Validar direção de fluxo",
            "description": "Relata as células que tornam um raster de direção de fluxo inutilizável — códigos que não são direções D8, células interiores sem saída, fluxo para nodata, fluxo para fora da borda e células em um caminho de fluxo circular — como uma camada de pontos de problemas (ArcGIS Validate Flow Direction). O conjunto de hidrologia incluído consome rasters de ponteiro em toda parte (d8_flow_accumulation, watershed, basins, trace_downslope_flowpaths), mas nada valida um, de modo que um raster danificado por reamostragem, reclassificação ou recorte produz uma resposta errada plausível em vez de um erro, e um laço de roteamento pode travar.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de direção de fluxo (ponteiro) a verificar."
              },
              "output": {
                "label": "Saída",
                "description": "Camada de pontos de saída, um ponto por célula problemática. Se omitido, armazenado em memória."
              },
              "flow_direction_type": {
                "label": "Tipo de direção de fluxo",
                "description": "'d8' (padrão) para códigos únicos de potência de dois, ou 'mfd' onde um valor pode ser a soma de várias direções."
              },
              "report_edge_outflow": {
                "label": "Relatar escoamento de borda",
                "description": "Relata as células cujo fluxo sai do raster (padrão false). Normal em um limite verdadeiro, um defeito real em um interior recortado."
              },
              "check_circular": {
                "label": "Verificar circularidade",
                "description": "Detecta caminhos de fluxo circulares (padrão true)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) que contém as direções (padrão 1)."
              }
            }
          },
          "vector_convert": {
            "name": "Converter vetorial",
            "description": "Converte um conjunto de dados vetorial para outro formato (a extensão de saída escolhe o driver).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de entrada (formato detectado automaticamente) ou identificador em memória."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída; o driver é obtido de sua extensão (.geojson, .fgb, .shp, .gpkg, .parquet, ...). Se omitido, a camada é armazenada em memória."
              }
            }
          },
          "vector_to_h3": {
            "name": "Vetorial para células H3",
            "description": "Agrupa uma camada vetorial em células da grade global discreta H3, contando feições por célula.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de entrada (deve ser geográfico lon/lat, EPSG:4326) ou identificador em memória."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do vetor de saída; o driver é obtido de sua extensão (.geojson, .fgb, .parquet, ...). Se omitido, a camada é armazenada em memória."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Resolução H3 de 0 (mais grosseira) a 15 (mais fina); padrão 8 (células de ~0,7 km²)."
              }
            }
          },
          "vector_to_pmtiles": {
            "name": "Vetorial para PMTiles",
            "description": "Empacota uma camada vetorial em um único arquivo PMTiles (pirâmide de Mapbox Vector Tiles).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de entrada (GeoJSON, Shapefile, GeoPackage, FlatGeobuf, GeoParquet, ...)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do arquivo PMTiles de saída (por exemplo /work/roads.pmtiles)."
              },
              "min_zoom": {
                "label": "Zoom mínimo",
                "description": "Nível de zoom mínimo (padrão 0)."
              },
              "max_zoom": {
                "label": "Zoom máximo",
                "description": "Nível de zoom máximo (padrão 14, máximo 18)."
              },
              "layer_name": {
                "label": "Nome da camada",
                "description": "Nome da camada dentro dos ladrilhos, usado na estilização (padrão: o nome da camada de entrada)."
              },
              "simplify": {
                "label": "Simplificar",
                "description": "Simplifica as geometrias por nível de zoom (padrão true)."
              },
              "drop_rate": {
                "label": "Taxa de descarte",
                "description": "Taxa com que as feições são descartadas em zooms baixos, como no tippecanoe (padrão: sem descarte)."
              }
            }
          },
          "voxel_isosurface": {
            "name": "Isossuperfície de voxels",
            "description": "Extrai uma isossuperfície triangulada em um ou mais valores de limiar a partir de um campo de voxels 3D via marching tetrahedra (ArcGIS Export Voxel Isosurface). Todo o conjunto de contornos em ambos os registros é 2D — linhas a partir de um plano; este é o análogo volumétrico, transformando a saída de idw_3d ou de um raster multidimensional em geometria renderizável. Emite a convenção de malha triangular usada por buffer_3d e minimum_bounding_volume, de modo que os resultados alimentam diretamente inside_3d.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Campo de voxels como um raster multibanda: a banda k é a fatia Z em z_min + k * z_spacing."
              },
              "values": {
                "label": "Valores",
                "description": "Valor(es) de limiar: um número, uma matriz JSON de números ou uma cadeia separada por vírgula. Uma superfície por valor."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional de saída para as superfícies de malha triangular. Se omitido, armazenado em memória."
              },
              "z_min": {
                "label": "Z mínimo",
                "description": "Coordenada Z da primeira fatia (padrão 0)."
              },
              "z_spacing": {
                "label": "Espaçamento Z",
                "description": "Espaçamento vertical entre as fatias (padrão 1)."
              },
              "close_boundaries": {
                "label": "Fechar limites",
                "description": "Fecha as superfícies onde elas encontram a borda do volume, de modo que o resultado delimite um sólido fechado (padrão true). Implementado marchando uma casca adicional abaixo da isossuperfície, de modo que a tampa fica soldada à superfície; ela se situa entre o plano de limite e uma célula além dele. Isso veda apenas as faces EXTERNAS: as células que tocam nodata interior são ignoradas, portanto um bolsão de nodata que intersecta a superfície extraída ainda deixa uma borda aberta (um bolsão situado inteiramente dentro ou fora do contorno nunca encontra a malha)."
              },
              "smooth": {
                "label": "Suavizar",
                "description": "Iterações de suavização laplaciana aplicadas à malha extraída (padrão 0)."
              }
            }
          },
          "warp_raster": {
            "name": "Deformar raster",
            "description": "Georreferencia um raster a partir de pontos de controle no terreno (como o ArcGIS Warp): ajusta um polinômio de ordem 1/2/3 a partir de pares GCP pixel de origem → coordenada do mundo e reamostra em uma nova grade georreferenciada (vizinho mais próximo/bilinear), relatando os resíduos por GCP e o erro RMS. A metade raster da história de conflação que o rubbersheet_features vetorial já cobre.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Raster de entrada (sua grade de pixels é o espaço de coordenadas de origem)."
              },
              "gcps": {
                "label": "GCPs",
                "description": "Pontos de controle no terreno como quádruplas 'col,row,x,y' separadas por ';' (>= 3 para a ordem 1, 6 para a ordem 2, 10 para a ordem 3)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster georreferenciado de saída. Se omitido, armazenado em memória."
              },
              "transform": {
                "label": "Transformação",
                "description": "Ordem do polinômio: 'poly1' (afim; padrão), 'poly2' ou 'poly3'."
              },
              "resampling": {
                "label": "Reamostragem",
                "description": "'nearest' (padrão) ou 'bilinear'."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades de mundo (padrão: a largura de entrada mapeada para a extensão de destino)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Código EPSG para marcar o CRS de saída (opcional)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a deformar (padrão 1)."
              }
            }
          },
          "weighted_voronoi": {
            "name": "Voronoi ponderado",
            "description": "Raster de alocação de Voronoi ponderado (áreas de mercado/dominância): atribui cada célula ao local com a menor distância ponderada — multiplicativa (d/w, Apolônio), aditiva (d-w) ou de potência (d²-w²) — como o ArcGIS Generate Weighted Voronoi. A versão com locais desiguais do voronoi_diagram não ponderado incluído.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Camada de pontos de entrada com os locais."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de alocação de saída (índice do local, base 1, por célula). Se omitido, armazenado em memória."
              },
              "weight_field": {
                "label": "Campo de peso",
                "description": "Campo numérico que fornece o peso/atratividade de cada local (padrão: todos os locais com peso 1)."
              },
              "weight_type": {
                "label": "Tipo de peso",
                "description": "'multiplicative' (d/w; padrão), 'additive' (d-w) ou 'power' (d²-w²)."
              },
              "cell_size": {
                "label": "Tamanho da célula",
                "description": "Tamanho da célula de saída em unidades do CRS (padrão: extensão / 400)."
              },
              "margin": {
                "label": "Margem",
                "description": "Fração da extensão dos locais a ser acrescentada como margem ao raster (padrão 0.1)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG para marcar a saída (padrão: o da camada de entrada)."
              }
            }
          },
          "write_geoparquet": {
            "name": "Escrever GeoParquet",
            "description": "Converte um conjunto de dados vetorial (GeoJSON, Shapefile, FlatGeobuf, GeoPackage, ...) para GeoParquet, ordenado por Hilbert e comprimido com ZSTD por padrão.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo vetorial de entrada (formato detectado automaticamente) ou identificador em memória."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do arquivo GeoParquet de saída (por exemplo /work/data.parquet)."
              },
              "compression": {
                "label": "Compressão",
                "description": "Compressão de colunas: zstd (padrão), snappy, gzip ou uncompressed."
              },
              "hilbert_sort": {
                "label": "Ordenação de Hilbert",
                "description": "Ordena as feições ao longo de uma curva de Hilbert para obter localidade espacial (padrão true)."
              }
            }
          },
          "write_pmtiles": {
            "name": "Raster para PMTiles",
            "description": "Renderiza um raster em um único arquivo PMTiles (pirâmide de ladrilhos PNG em Web Mercator).",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Caminho do arquivo raster de entrada. Deve conter um CRS de origem (EPSG ou WKT)."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do arquivo PMTiles de saída (por exemplo /work/dem.pmtiles)."
              },
              "min_zoom": {
                "label": "Zoom mínimo",
                "description": "Nível de zoom mínimo (padrão: um único zoom nativo correspondente à resolução do raster)."
              },
              "max_zoom": {
                "label": "Zoom máximo",
                "description": "Nível de zoom máximo (padrão: o mesmo de min_zoom)."
              },
              "band": {
                "label": "Banda",
                "description": "Banda (base 1) a renderizar (padrão 1)."
              },
              "colormap": {
                "label": "Mapa de cores",
                "description": "Mapa de cores: viridis (padrão), magma, turbo, terrain ou grayscale."
              },
              "method": {
                "label": "Método",
                "description": "Método de reamostragem: bilinear (padrão), nearest, cubic."
              },
              "min": {
                "label": "Mínimo",
                "description": "Valor mapeado para o extremo inferior do mapa de cores (padrão: o mínimo da banda)."
              },
              "max": {
                "label": "Máximo",
                "description": "Valor mapeado para o extremo superior do mapa de cores (padrão: o máximo da banda)."
              }
            }
          },
          "zonal_characterization": {
            "name": "Caracterização zonal",
            "description": "Calcula estatísticas de vários rasters de valores sobre um raster de zonas em uma única passagem, com uma estatística por raster e percentis arbitrários, como o ArcGIS Zonal Characterization.",
            "params": {
              "zones": {
                "label": "Zonas",
                "description": "Raster de zonas; cada valor distinto define uma zona."
              },
              "rasters": {
                "label": "Rasters",
                "description": "Entradas 'path:statistic[:name]' separadas por vírgula, por exemplo 'dem.tif:mean,ndvi.tif:median'. Os rasters de valores usam a banda 1. Estatísticas: mean, sum, min, max, range, stddev, median, majority, minority, variety, count, percentile."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho opcional da tabela de estatísticas de saída. Se omitido, armazenado em memória."
              },
              "percentile": {
                "label": "Percentil",
                "description": "Percentil (0-100) aplicado a qualquer raster cuja estatística seja 'percentile' (padrão 50)."
              },
              "zone_band": {
                "label": "Banda de zonas",
                "description": "Banda (base 1) a ler do raster de zonas (padrão 1)."
              },
              "ignore_nodata": {
                "label": "Ignorar nodata",
                "description": "Ignora as células nodata nos rasters de valores (padrão true). Quando falso, qualquer nodata em uma zona torna nula a estatística dessa zona."
              }
            }
          },
          "zonal_fill": {
            "name": "Preenchimento zonal",
            "description": "Preenche cada zona de um raster categórico com o valor mínimo de um raster de pesos encontrado ao longo do limite dessa zona (como o ArcGIS Zonal Fill) — um bloco de construção de superfície restrita ausente do conjunto incluído (fill é baseado em fluxo, zonal_statistics apenas resume).",
            "params": {
              "zones": {
                "label": "Zonas",
                "description": "Raster de zonas categórico (cada valor inteiro distinto é uma zona)."
              },
              "weight": {
                "label": "Peso",
                "description": "Raster de pesos corregistrado cujo mínimo no limite preenche cada zona."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de saída. Se omitido, armazenado em memória."
              }
            }
          },
          "zonal_geometry": {
            "name": "Geometria zonal",
            "description": "Medidas geométricas por zona a partir de um raster de zonas categórico (como o ArcGIS Zonal Geometry): área, perímetro, espessura, centroide e eixos maior/menor + orientação da elipse de desvio padrão — a contraparte de forma das zonas que os zonal_statistics e zonal_histogram incluídos, baseados em valores, não fornecem.",
            "params": {
              "zones": {
                "label": "Zonas",
                "description": "Raster de zonas categórico (cada valor inteiro distinto é uma zona)."
              },
              "output": {
                "label": "Saída",
                "description": "Raster de saída (modo raster) ou caminho do CSV (modo as_table). Se omitido, armazenado em memória / retornado apenas no resultado."
              },
              "measure": {
                "label": "Medida",
                "description": "Medida do modo raster: 'area' (padrão), 'perimeter', 'thickness', 'centroid_x', 'centroid_y', 'major_axis', 'minor_axis' ou 'orientation'."
              },
              "as_table": {
                "label": "Como tabela",
                "description": "Quando verdadeiro, emite uma linha por zona com todas as medidas em vez de um raster por célula (padrão false)."
              }
            }
          },
          "zonal_histogram": {
            "name": "Histograma zonal",
            "description": "Tabula a distribuição das células de um raster de valores dentro de cada zona: contagens de classes (categórico) ou frequências por intervalo (contínuo), como uma tabela cruzada zonas x classes.",
            "params": {
              "zones": {
                "label": "Zonas",
                "description": "Caminho do arquivo do raster de zonas (identificadores de zona inteiros/categóricos)."
              },
              "value": {
                "label": "Valor",
                "description": "Caminho do arquivo do raster de valores; deve compartilhar a grade de 'zones'."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do CSV de saída: uma linha por zona, uma coluna por classe/intervalo."
              },
              "mode": {
                "label": "Modo",
                "description": "'classes' (padrão) trata cada valor arredondado como sua própria classe, para rasters de valores inteiros/categóricos. 'bins' agrupa os valores contínuos em intervalos de largura igual."
              },
              "bins": {
                "label": "Classes do histograma",
                "description": "Número de intervalos de largura igual para o modo 'bins'. Padrão 10."
              },
              "percent": {
                "label": "Percentual",
                "description": "Emite a porcentagem de cada classe em relação às células válidas da zona em vez das contagens brutas de células. Padrão false."
              },
              "zone_band": {
                "label": "Banda de zonas",
                "description": "Banda (base 1) a ler de 'zones'. Padrão 1."
              },
              "value_band": {
                "label": "Banda de valores",
                "description": "Banda (base 1) a ler de 'value'. Padrão 1."
              },
              "long_output": {
                "label": "Saída longa",
                "description": "Caminho opcional do CSV para a variante em formato longo (zone,class,count,percent)."
              }
            }
          },
          "extract_cog_subset": {
            "name": "Extrair subconjunto COG",
            "description": "Extrai um subconjunto por caixa delimitadora de um GeoTIFF otimizado para nuvem (COG) local ou HTTP.",
            "params": {
              "input": {
                "label": "Entrada",
                "description": "Arquivo COG local. Forneça input ou url."
              },
              "url": {
                "label": "URL",
                "description": "URL COG HTTP(S). Forneça url ou input; as fontes HTTP usam requisições por intervalo de bytes."
              },
              "bbox": {
                "label": "Caixa delimitadora",
                "description": "Caixa delimitadora como minX,minY,maxX,maxY em bbox_crs."
              },
              "bbox_crs": {
                "label": "CRS da caixa delimitadora",
                "description": "Código EPSG das coordenadas da bbox."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do COG de saída."
              },
              "level": {
                "label": "Nível",
                "description": "Nível de pirâmide do COG a ler; 0 é a resolução completa."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Tamanho do pixel de saída desejado. Usa as unidades de output_crs quando output_crs está definido; caso contrário, as unidades de bbox_crs. Seleciona a pirâmide COG mais próxima quando level é omitido."
              },
              "output_crs": {
                "label": "CRS de saída",
                "description": "Código EPSG de saída opcional. Quando definido, o subconjunto é reprojetado para este CRS. Para CRSs de origem que não podem ser gravados como metadados EPSG, o padrão é bbox_crs."
              },
              "nodata": {
                "label": "Nodata",
                "description": "Valor nodata de saída opcional. Usado como preenchimento na reprojeção e gravado como metadado de nodata da saída."
              }
            }
          },
          "extract_wms_subset": {
            "name": "Extrair subconjunto WMS",
            "description": "Solicita um subconjunto por caixa delimitadora de um ponto de acesso WMS GetMap e o grava como um COG com Deflate.",
            "params": {
              "url": {
                "label": "URL",
                "description": "URL do ponto de acesso WMS."
              },
              "layers": {
                "label": "Camadas",
                "description": "Nome(s) da(s) camada(s) WMS, separados por vírgula."
              },
              "styles": {
                "label": "Estilos",
                "description": "Nome(s) do(s) estilo(s) WMS, separados por vírgula. O padrão é vazio."
              },
              "bbox": {
                "label": "Caixa delimitadora",
                "description": "Caixa delimitadora como minX,minY,maxX,maxY em bbox_crs."
              },
              "bbox_crs": {
                "label": "CRS da caixa delimitadora",
                "description": "Código EPSG das coordenadas da bbox."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do COG de saída."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Tamanho do pixel de saída desejado em unidades de output_crs quando output_crs está definido; caso contrário, em unidades de bbox_crs."
              },
              "width": {
                "label": "Largura",
                "description": "Largura solicitada da saída em pixels. Usada quando resolution é omitido."
              },
              "height": {
                "label": "Altura",
                "description": "Altura solicitada da saída em pixels. Usada quando resolution é omitido."
              },
              "output_crs": {
                "label": "CRS de saída",
                "description": "Código EPSG de saída/requisição opcional. O padrão é bbox_crs."
              },
              "format": {
                "label": "Formato",
                "description": "Formato de imagem WMS. O padrão é image/geotiff."
              },
              "version": {
                "label": "Versão",
                "description": "Versão do WMS. O padrão é 1.1.1."
              },
              "nodata": {
                "label": "Nodata",
                "description": "Valor nodata de saída opcional."
              }
            }
          },
          "extract_xyz_tile_subset": {
            "name": "Extrair subconjunto de ladrilhos XYZ",
            "description": "Busca ladrilhos raster XYZ para uma caixa delimitadora, os mosaica e grava um COG RGB com Deflate.",
            "params": {
              "url": {
                "label": "URL",
                "description": "Modelo de URL de ladrilhos XYZ, por exemplo https://.../{z}/{x}/{y}.png."
              },
              "zoom": {
                "label": "Zoom",
                "description": "Nível de zoom XYZ."
              },
              "bbox": {
                "label": "Caixa delimitadora",
                "description": "Caixa delimitadora como minX,minY,maxX,maxY em bbox_crs."
              },
              "bbox_crs": {
                "label": "CRS da caixa delimitadora",
                "description": "Código EPSG das coordenadas da bbox."
              },
              "output": {
                "label": "Saída",
                "description": "Caminho do COG de saída."
              },
              "resolution": {
                "label": "Resolução",
                "description": "Tamanho do pixel de saída desejado em unidades de output_crs. O padrão é a resolução nativa do ladrilho."
              },
              "width": {
                "label": "Largura",
                "description": "Largura da saída em pixels. Usada quando resolution é omitido."
              },
              "height": {
                "label": "Altura",
                "description": "Altura da saída em pixels. Usada quando resolution é omitido."
              },
              "output_crs": {
                "label": "CRS de saída",
                "description": "Código EPSG de saída opcional. O padrão é bbox_crs."
              },
              "tile_size": {
                "label": "Tamanho do ladrilho",
                "description": "Tamanho do ladrilho em pixels. O padrão é 256."
              },
              "subdomains": {
                "label": "Subdomínios",
                "description": "Letras de subdomínio opcionais para {s}, por exemplo abc."
              },
              "nodata": {
                "label": "Nodata",
                "description": "Valor nodata de saída opcional usado para pixels ausentes/transparentes."
              }
            }
          }
        }
      },
      "whitebox": {
        "categories": {
          "conversion": "Conversão",
          "conversionGeometryTopology": "Conversão - Geometria e topologia",
          "conversionRasterVectorConversion": "Conversão - Conversão raster/vetorial",
          "conversionVectorTableIO": "Conversão - E/S de vetores e tabelas",
          "hydrology": "Hidrologia",
          "hydrologyDepressionsStorage": "Hidrologia - Depressões e armazenamento",
          "hydrologyFlowRouting": "Hidrologia - Roteamento de fluxo",
          "hydrologyHydrologicIndices": "Hidrologia - Índices hidrológicos",
          "hydrologyStreamsLongitudinalAnalysis": "Hidrologia - Cursos d'água - Análise longitudinal",
          "hydrologyStreamsNetworkExtraction": "Hidrologia - Cursos d'água - Extração da rede",
          "hydrologyStreamsOrderingMetrics": "Hidrologia - Cursos d'água - Métricas de ordem",
          "hydrologyWatershedsBasins": "Hidrologia - Bacias hidrográficas",
          "lidarAnalysisMetrics": "LiDAR - Métricas de análise",
          "lidarFilteringClassification": "LiDAR - Filtragem e classificação",
          "lidarIOManagement": "LiDAR - E/S e gerenciamento",
          "lidarInterpolationGridding": "LiDAR - Interpolação e gradeamento",
          "projectionAndGeoreferencing": "Projeção e georreferenciamento",
          "raster": "Raster",
          "rasterDistanceCost": "Raster - Distância e custo",
          "rasterLocalNeighborhood": "Raster - Vizinhança local",
          "rasterOverlayMath": "Raster - Álgebra de sobreposição",
          "rasterReclassifyMask": "Raster - Reclassificar e mascarar",
          "rasterSpatialStatistics": "Raster - Estatística espacial",
          "remoteSensingChangeDetection": "Sensoriamento remoto - Detecção de mudanças",
          "remoteSensingClassification": "Sensoriamento remoto - Classificação",
          "remoteSensingEdgeFeatureDetection": "Sensoriamento remoto - Detecção de bordas e feições",
          "remoteSensingEnhancementContrast": "Sensoriamento remoto - Realce e contraste",
          "remoteSensingFilters": "Sensoriamento remoto - Filtros",
          "remoteSensingObia": "Sensoriamento remoto - OBIA",
          "remoteSensingRadiometricCorrection": "Sensoriamento remoto - Correção radiométrica",
          "remoteSensingSar": "Sensoriamento remoto - SAR",
          "remoteSensingSpectralAnalytics": "Sensoriamento remoto - Análise espectral",
          "remoteSensingThermalEmissivity": "Sensoriamento remoto - Térmico e emissividade",
          "terrain": "Terreno",
          "terrainDerivatives": "Terreno - Derivadas",
          "terrainLandformIndices": "Terreno - Índices de formas de relevo",
          "terrainMultiscaleSignatures": "Terreno - Assinaturas multiescala",
          "terrainRoughnessTexture": "Terreno - Rugosidade e textura",
          "terrainVisibility": "Terreno - Visibilidade",
          "terrainWorkflowProducts": "Terreno - Produtos de fluxo de trabalho",
          "vector": "Vetorial",
          "vectorAttributeAnalysis": "Vetorial - Análise de atributos",
          "vectorGeometryProcessing": "Vetorial - Processamento de geometria",
          "vectorLinearReferencing": "Vetorial - Referenciamento linear",
          "vectorNetworkAnalysis": "Vetorial - Análise de redes",
          "vectorOnlineData": "Vetorial - Dados on-line",
          "vectorOverlayAnalysis": "Vetorial - Análise de sobreposição",
          "vectorSamplingGridding": "Vetorial - Amostragem e gradeamento",
          "vectorShapeMetrics": "Vetorial - Métricas de forma",
          "vectorSpatialStatistics": "Vetorial - Estatística espacial"
        },
        "menuTool": {
          "calculate_transit_service_frequency": "Calcular frequência do serviço de transporte",
          "excel_to_table": "Excel para tabela",
          "extract_scanned_features": "Extrair feições digitalizadas",
          "features_to_gpx": "Feições para GPX",
          "features_to_gtfs": "Feições para GTFS",
          "gpx_to_features": "GPX para feições",
          "gtfs_to_features": "GTFS para feições",
          "h3_to_vector": "Células H3 para polígonos",
          "h3_polyfill": "Preenchimento de polígonos H3",
          "kml_to_features": "KML para feições",
          "pmtiles_extract": "Extrair PMTiles",
          "raster_to_h3": "Raster para células H3",
          "write_pmtiles": "Raster para PMTiles",
          "raster_to_tiles": "Raster para ladrilhos XYZ",
          "read_geoparquet": "Ler GeoParquet",
          "vector_convert": "Converter vetorial",
          "vector_to_h3": "Vetorial para células H3",
          "vector_to_pmtiles": "Vetorial para PMTiles",
          "write_geoparquet": "Escrever GeoParquet",
          "fix_dangling_arcs": "Corrigir arcos pendentes",
          "lines_to_polygons": "Linhas para polígonos",
          "multipart_to_singlepart": "Multiparte para parte única",
          "polygons_to_lines": "Polígonos para linhas",
          "remove_polygon_holes": "Remover buracos de polígonos",
          "singlepart_to_multipart": "Parte única para multiparte",
          "topology_rule_autofix": "Correção automática de regras topológicas",
          "topology_rule_validate": "Validar regras topológicas",
          "topology_validation_report": "Relatório de validação topológica",
          "convert_nodata_to_zero": "Converter NoData em zero",
          "modify_nodata_value": "Modificar o valor NoData",
          "new_raster_from_base_raster": "Novo raster a partir de raster base",
          "new_raster_from_base_vector": "Novo raster a partir de vetorial base",
          "raster_to_vector_lines": "Raster para linhas vetoriais",
          "raster_to_vector_points": "Raster para pontos vetoriais",
          "raster_to_vector_polygons": "Raster para polígonos vetoriais",
          "remove_raster_polygon_holes": "Remover buracos de polígonos raster",
          "set_nodata_value": "Definir o valor NoData",
          "vector_lines_to_raster": "Linhas vetoriais para raster",
          "vector_points_to_raster": "Pontos vetoriais para raster",
          "vector_polygons_to_raster": "Polígonos vetoriais para raster",
          "add_point_coordinates_to_table": "Adicionar coordenadas de pontos à tabela",
          "clean_vector": "Limpar vetorial",
          "csv_points_to_vector": "Pontos CSV para vetorial",
          "export_table_to_csv": "Exportar tabela para CSV",
          "join_tables": "Juntar tabelas",
          "merge_table_with_csv": "Mesclar tabela com CSV",
          "merge_vectors": "Mesclar vetoriais",
          "reinitialize_attribute_table": "Reinicializar tabela de atributos",
          "vector_summary_statistics": "Estatísticas resumo vetoriais",
          "delineate_depressions": "Delimitar depressões",
          "delineate_mounts": "Delimitar elevações",
          "enforce_river_monotonicity": "Impor monotonicidade fluvial",
          "extract_sinks": "Extrair depressões",
          "fill_spill_merge": "Fill-Spill-Merge",
          "topo_to_raster": "Topo para raster",
          "breach_depressions_least_cost": "Romper depressões por menor custo",
          "breach_single_cell_pits": "Romper depressões de célula única",
          "burn_streams": "Gravar cursos d'água",
          "burn_streams_at_roads": "Gravar cursos d'água em estradas",
          "depth_in_sink": "Profundidade na depressão",
          "fill_burn": "Preencher e gravar",
          "fill_depressions": "Preencher depressões",
          "fill_depressions_planchon_and_darboux": "Preencher depressões (Planchon e Darboux)",
          "fill_depressions_wang_and_liu": "Preencher depressões (Wang e Liu)",
          "fill_pits": "Preencher covas",
          "flatten_lakes": "Aplanar lagos",
          "impoundment_size_index": "Índice de tamanho de reservatório",
          "insert_dams": "Inserir barragens",
          "raise_walls": "Erguer muros",
          "sink": "Depressão",
          "stochastic_depression_analysis": "Análise estocástica de depressões",
          "topological_breach_burn": "Rompimento e gravação topológicos",
          "upslope_depression_storage": "Armazenamento em depressões a montante",
          "average_flowpath_slope": "Declividade média do caminho de fluxo",
          "average_upslope_flowpath_length": "Comprimento médio do caminho de fluxo a montante",
          "d8_flow_accum": "Acumulação de fluxo D8",
          "d8_mass_flux": "Fluxo de massa D8",
          "d8_pointer": "Ponteiro D8",
          "dinf_flow_accum": "Acumulação de fluxo D-infinito",
          "dinf_mass_flux": "Fluxo de massa D-infinito",
          "dinf_pointer": "Ponteiro D-infinito",
          "downslope_flowpath_length": "Comprimento do caminho de fluxo a jusante",
          "fd8_flow_accum": "Acumulação de fluxo FD8",
          "fd8_pointer": "Ponteiro FD8",
          "flow_accum_full_workflow": "Fluxo de trabalho completo de acumulação de fluxo",
          "flow_length_diff": "Diferença de comprimento de fluxo",
          "max_upslope_flowpath_length": "Comprimento máximo do caminho de fluxo a montante",
          "max_upslope_value": "Valor máximo a montante",
          "mdinf_flow_accum": "Acumulação de fluxo MD-infinito",
          "minimal_dispersion_flow_algorithm": "Algoritmo de fluxo de dispersão mínima",
          "num_inflowing_neighbours": "Número de vizinhos afluentes",
          "qin_flow_accumulation": "Acumulação de fluxo de Qin",
          "quinn_flow_accumulation": "Acumulação de fluxo de Quinn",
          "rho8_flow_accum": "Acumulação de fluxo Rho8",
          "rho8_pointer": "Ponteiro Rho8",
          "trace_downslope_flowpaths": "Traçar caminhos de fluxo a jusante",
          "depth_to_water": "Profundidade até a água",
          "distance_to_outlet": "Distância até o exutório",
          "downslope_distance_to_stream": "Distância a jusante até o curso d'água",
          "downslope_index": "Índice a jusante",
          "edge_contamination": "Contaminação de bordas",
          "elev_relative_to_watershed_min_max": "Elevação relativa ao mín-máx da bacia",
          "elevation_above_stream": "Elevação acima do curso d'água",
          "elevation_above_stream_euclidean": "Elevação acima do curso d'água (euclidiana)",
          "find_noflow_cells": "Encontrar células sem fluxo",
          "find_parallel_flow": "Encontrar fluxo paralelo",
          "hydrologic_connectivity": "Conectividade hidrológica",
          "relative_stream_power_index": "Índice de potência relativa do curso d'água",
          "sediment_transport_index": "Índice de transporte de sedimentos",
          "wetness_index": "Índice de umidade",
          "farthest_channel_head": "Cabeceira de canal mais distante",
          "find_main_stem": "Encontrar o canal principal",
          "length_of_upstream_channels": "Comprimento dos canais a montante",
          "long_profile": "Perfil longitudinal",
          "long_profile_from_points": "Perfil longitudinal a partir de pontos",
          "extract_streams": "Extrair cursos d'água",
          "extract_valleys": "Extrair vales",
          "prune_vector_streams": "Podar cursos d'água vetoriais",
          "raster_streams_to_vector": "Cursos d'água raster para vetorial",
          "rasterize_streams": "Rasterizar cursos d'água",
          "remove_short_streams": "Remover cursos d'água curtos",
          "repair_stream_vector_topology": "Reparar a topologia vetorial dos cursos d'água",
          "river_centerlines": "Eixos de rio",
          "hack_stream_order": "Ordem de canais de Hack",
          "horton_ratios": "Razões de Horton",
          "horton_stream_order": "Ordem de canais de Horton",
          "shreve_stream_magnitude": "Magnitude de canais de Shreve",
          "strahler_order_basins": "Bacias por ordem de Strahler",
          "strahler_stream_order": "Ordem de canais de Strahler",
          "stream_link_class": "Classe do trecho de canal",
          "stream_link_identifier": "Identificador do trecho de canal",
          "stream_link_length": "Comprimento do trecho de canal",
          "stream_link_slope": "Declividade do trecho de canal",
          "stream_slope_continuous": "Declividade contínua do canal",
          "topological_stream_order": "Ordem topológica dos canais",
          "tributary_identifier": "Identificador de afluentes",
          "vector_stream_network_analysis": "Análise da rede vetorial de drenagem",
          "basins": "Bacias",
          "flood_order": "Ordem de inundação",
          "hillslopes": "Encostas",
          "isobasins": "Isobacias",
          "jenson_snap_pour_points": "Ajustar pontos de exutório (Jenson)",
          "longest_flowpath": "Caminho de fluxo mais longo",
          "max_branch_length": "Comprimento máximo de ramificação",
          "snap_pour_points": "Ajustar pontos de exutório",
          "subbasins": "Sub-bacias",
          "unnest_basins": "Desaninhar bacias",
          "watershed": "Bacia hidrográfica",
          "watershed_from_raster_pour_points": "Bacia a partir de pontos de exutório raster",
          "assign_projection_lidar": "Atribuir projeção ao LiDAR",
          "colourize_based_on_class": "Colorir com base na classe",
          "colourize_based_on_point_returns": "Colorir com base nos retornos do ponto",
          "find_flightline_edge_points": "Encontrar pontos de borda da linha de voo",
          "individual_tree_detection": "Detecção de árvores individuais",
          "lidar_eigenvalue_features": "Feições de autovalores LiDAR",
          "lidar_histogram": "Histograma LiDAR",
          "lidar_info": "Informações LiDAR",
          "lidar_kappa": "Kappa LiDAR",
          "lidar_point_density": "Densidade de pontos LiDAR",
          "lidar_point_return_analysis": "Análise de retornos de pontos LiDAR",
          "lidar_point_stats": "Estatísticas de pontos LiDAR",
          "lidar_ransac_planes": "Planos RANSAC LiDAR",
          "lidar_rooftop_analysis": "Análise de telhados LiDAR",
          "normal_vectors": "Vetores normais",
          "classify_buildings_in_lidar": "Classificar edificações no LiDAR",
          "classify_lidar": "Classificar LiDAR",
          "classify_overlap_points": "Classificar pontos de sobreposição",
          "clip_lidar_to_polygon": "Recortar LiDAR por polígono",
          "erase_polygon_from_lidar": "Apagar polígono do LiDAR",
          "filter_lidar": "Filtrar LiDAR",
          "filter_lidar_by_percentile": "Filtrar LiDAR por percentil",
          "filter_lidar_by_reference_surface": "Filtrar LiDAR por superfície de referência",
          "filter_lidar_classes": "Filtrar classes LiDAR",
          "filter_lidar_noise": "Filtrar ruído LiDAR",
          "filter_lidar_scan_angles": "Filtrar ângulos de varredura LiDAR",
          "height_above_ground": "Altura acima do solo",
          "improved_ground_point_filter": "Filtro de pontos de solo aprimorado",
          "individual_tree_segmentation": "Segmentação de árvores individuais",
          "lidar_classify_subset": "Classificar subconjunto LiDAR",
          "lidar_elevation_slice": "Fatia de elevação LiDAR",
          "lidar_remove_outliers": "Remover outliers LiDAR",
          "lidar_segmentation": "Segmentação LiDAR",
          "lidar_segmentation_based_filter": "Filtro baseado em segmentação LiDAR",
          "modify_lidar": "Modificar LiDAR",
          "normalize_lidar": "Normalizar LiDAR",
          "remove_duplicates": "Remover duplicatas",
          "ascii_to_las": "ASCII para LAS",
          "las_to_ascii": "LAS para ASCII",
          "las_to_shapefile": "LAS para shapefile",
          "lidar_colourize": "Colorir LiDAR",
          "lidar_join": "Juntar LiDAR",
          "lidar_shift": "Deslocar LiDAR",
          "lidar_tile": "Ladrilhar LiDAR",
          "lidar_tophat_transform": "Transformada de cartola LiDAR",
          "recover_flightline_info": "Recuperar informações de linhas de voo",
          "select_tiles_by_polygon": "Selecionar ladrilhos por polígono",
          "sort_lidar": "Ordenar LiDAR",
          "split_lidar": "Dividir LiDAR",
          "flightline_overlap": "Sobreposição de linhas de voo",
          "lidar_block_maximum": "Máximo por bloco LiDAR",
          "lidar_block_minimum": "Mínimo por bloco LiDAR",
          "lidar_construct_vector_tin": "Construir TIN vetorial LiDAR",
          "lidar_contour": "Curvas de nível LiDAR",
          "lidar_digital_surface_model": "Modelo digital de superfície LiDAR",
          "lidar_hex_bin": "Agrupamento hexagonal LiDAR",
          "lidar_hillshade": "Sombreamento do relevo LiDAR",
          "lidar_idw_interpolation": "Interpolação IDW LiDAR",
          "lidar_nearest_neighbour_gridding": "Gradeamento por vizinho mais próximo LiDAR",
          "lidar_radial_basis_function_interpolation": "Interpolação por funções de base radial LiDAR",
          "lidar_sibson_interpolation": "Interpolação de Sibson LiDAR",
          "lidar_thin": "Rarefazer LiDAR",
          "lidar_thin_high_density": "Rarefazer LiDAR de alta densidade",
          "lidar_tile_footprint": "Contorno dos ladrilhos LiDAR",
          "lidar_tin_gridding": "Gradeamento TIN LiDAR",
          "build_network_topology": "Construir topologia de rede",
          "closest_facility_network": "Instalação mais próxima na rede",
          "generate_network_nodes": "Gerar nós de rede",
          "k_shortest_paths_network": "K caminhos mais curtos na rede",
          "location_allocation_network": "Localização-alocação na rede",
          "map_matching_v1": "Casamento de mapa v1",
          "multimodal_od_cost_matrix": "Matriz de custo OD multimodal",
          "multimodal_routes_from_od": "Rotas multimodais a partir de OD",
          "multimodal_shortest_path": "Caminho multimodal mais curto",
          "network_accessibility_metrics": "Métricas de acessibilidade da rede",
          "network_centrality_metrics": "Métricas de centralidade da rede",
          "network_connected_components": "Componentes conexos da rede",
          "network_node_degree": "Grau dos nós da rede",
          "network_od_cost_matrix": "Matriz de custo OD da rede",
          "network_routes_from_od": "Rotas da rede a partir de OD",
          "network_service_area": "Área de serviço da rede",
          "network_topology_audit": "Auditoria da topologia da rede",
          "od_sensitivity_analysis": "Análise de sensibilidade OD",
          "shortest_path_network": "Caminho mais curto na rede",
          "snap_points_to_network": "Ajustar pontos à rede",
          "split_lines_at_intersections": "Dividir linhas nas interseções",
          "transfer_attributes": "Transferir atributos",
          "travelling_salesman_problem": "Problema do caixeiro-viajante",
          "vehicle_routing_cvrp": "Roteamento de veículos CVRP",
          "vehicle_routing_pickup_delivery": "Roteamento de veículos com coleta e entrega",
          "vehicle_routing_vrptw": "Roteamento de veículos VRPTW",
          "georeference_raster_from_control_points": "Georreferenciar raster a partir de pontos de controle",
          "orthorectification": "Ortorretificação",
          "reproject_lidar": "Reprojetar LiDAR",
          "reproject_vector": "Reprojetar vetorial",
          "aggregate_multidimensional_raster": "Agregar raster multidimensional",
          "analyze_changes_ccdc": "Analisar mudanças com CCDC",
          "apply_radiometric_calibration": "Aplicar calibração radiométrica",
          "assign_projection_raster": "Atribuir projeção ao raster",
          "band_collection_statistics": "Estatísticas de coleção de bandas",
          "block_statistics": "Estatísticas por bloco",
          "boundary_clean": "Limpeza de limites",
          "cell_position_statistics": "Estatísticas de posição de célula",
          "cell_statistics": "Estatísticas de células",
          "classification_accuracy_assessment": "Avaliação da acurácia da classificação",
          "combine": "Combinar",
          "composite_bands": "Compor bandas",
          "compute_sar_indices": "Calcular índices SAR",
          "contour_with_barriers": "Curvas de nível com barreiras",
          "convert_sar_units": "Converter unidades SAR",
          "coregister_rasters": "Corregistrar rasters",
          "corridor": "Corredor",
          "cost_back_link": "Vínculo reverso de custo",
          "cut_fill": "Corte e aterro",
          "darcy_flow": "Fluxo de Darcy",
          "dem_filter": "Filtro de MDE",
          "detect_image_anomalies": "Detectar anomalias em imagens",
          "diffusion_interpolation_with_barriers": "Interpolação por difusão com barreiras",
          "dimensional_moving_statistics": "Estatísticas móveis dimensionais",
          "empirical_bayesian_kriging": "Krigagem bayesiana empírica",
          "euclidean_direction": "Direção euclidiana",
          "expand_shrink": "Expandir / contrair",
          "extract_cog_subset": "Extrair subconjunto COG",
          "extract_ocean_winds": "Extrair ventos oceânicos",
          "extract_spectra_from_image": "Extrair espectros da imagem",
          "extract_wms_subset": "Extrair subconjunto WMS",
          "extract_xyz_tile_subset": "Extrair subconjunto de ladrilhos XYZ",
          "find_argument_statistics": "Encontrar estatísticas de argumento",
          "flatten_interferogram": "Aplanar interferograma",
          "focal_flow": "Fluxo focal",
          "focal_statistics": "Estatísticas focais",
          "frequency_comparison": "Comparação de frequências",
          "fuzzy_overlay": "Sobreposição difusa",
          "gaussian_geostatistical_simulations": "Simulações geoestatísticas gaussianas",
          "multidimensional_anomaly": "Gerar anomalia multidimensional",
          "generate_trend_raster": "Gerar raster de tendência",
          "goldstein_phase_filter": "Filtro de fase de Goldstein",
          "idw_3d": "IDW 3D",
          "interpolate_from_spatiotemporal_points": "Interpolar a partir de pontos espaço-temporais",
          "interpolate_with_barriers": "Interpolar com barreiras",
          "kernel_density_ratio": "Razão de densidade kernel",
          "kernel_interpolation_with_barriers": "Interpolação kernel com barreiras",
          "landtrendr": "LandTrendr",
          "las_height_metrics": "Métricas de altura LAS",
          "line_density": "Densidade de linhas",
          "line_statistics": "Estatísticas de linhas",
          "local_polynomial_interpolation": "Interpolação polinomial local",
          "locate_regions": "Localizar regiões",
          "matched_filter_target_detection": "Detecção de alvos por filtro casado (CEM/ACE)",
          "maximum_likelihood_classification": "Classificação por máxima verossimilhança",
          "merge_multidimensional_rasters": "Mesclar rasters multidimensionais",
          "multicriteria_overlay": "Sobreposição multicritério",
          "multidimensional_principal_components": "Componentes principais multidimensionais",
          "multidimensional_raster_correlation": "Correlação de rasters multidimensionais",
          "multilook": "Multilook",
          "multitemporal_coherence": "Coerência multitemporal",
          "observer_points": "Pontos de observação",
          "optimal_interpolation": "Interpolação ótima",
          "path_distance": "Distância de caminho",
          "percentile_contours": "Curvas de nível por percentis",
          "point_statistics": "Estatísticas de pontos",
          "porous_puff": "Pluma porosa",
          "predict_using_trend_raster": "Prever com raster de tendência",
          "presence_only_prediction": "Predição somente com presenças",
          "pycnophylactic_interpolation": "Interpolação picnofilática",
          "radiometric_terrain_flattening": "Aplanamento radiométrico do terreno",
          "raster_normalize": "Normalizar raster",
          "regression_kriging": "Krigagem de regressão",
          "remove_thermal_noise": "Remover ruído térmico",
          "render_raster_png": "Renderizar raster em PNG",
          "reproject_raster": "Reprojetar raster",
          "rescale_by_function": "Reescalar por função",
          "sar_coherence": "Coerência SAR",
          "slice_raster": "Fatiar raster em classes",
          "solar_radiation": "Radiação solar",
          "space_time_kernel_density": "Densidade kernel espaço-temporal",
          "spatial_association_between_zones": "Associação espacial entre zonas",
          "spectral_index": "Índice espectral",
          "split_raster": "Dividir raster",
          "storage_capacity": "Capacidade de armazenamento",
          "subset_multidimensional_raster": "Subconjunto de raster multidimensional",
          "summarize_categorical_raster": "Resumir raster categórico",
          "surface_parameters": "Parâmetros de superfície",
          "surface_volume": "Volume de superfície",
          "time_series_cross_correlation": "Correlação cruzada de séries temporais",
          "unwrap_phase": "Desdobrar fase",
          "warp_raster": "Deformar raster",
          "weighted_voronoi": "Voronoi ponderado",
          "zonal_characterization": "Caracterização zonal",
          "zonal_fill": "Preenchimento zonal",
          "zonal_geometry": "Geometria zonal",
          "zonal_histogram": "Histograma zonal",
          "abs": "Valor absoluto",
          "aggregate_raster": "Agregar raster",
          "anova": "ANOVA",
          "arccos": "Arco cosseno",
          "arcosh": "Arco cosseno hiperbólico",
          "arcsin": "Arco seno",
          "arctan": "Arco tangente",
          "arsinh": "Arco seno hiperbólico",
          "artanh": "Arco tangente hiperbólico",
          "atan2": "Atan2",
          "block_maximum": "Máximo por bloco",
          "block_minimum": "Mínimo por bloco",
          "boundary_shape_complexity": "Complexidade da forma do limite",
          "ceil": "Teto",
          "centroid_raster": "Centroide raster",
          "clip_raster_to_polygon": "Recortar raster por polígono",
          "clump": "Agrupar",
          "cos": "Cosseno",
          "cosh": "Cosseno hiperbólico",
          "create_plane": "Criar plano",
          "crispness_index": "Índice de nitidez",
          "cross_tabulation": "Tabulação cruzada",
          "cumulative_distribution": "Distribuição acumulada",
          "dbscan": "DBSCAN",
          "decrement": "Decremento",
          "edge_proportion": "Proporção de borda",
          "equal_to": "Igual a",
          "erase_polygon_from_raster": "Apagar polígono do raster",
          "exp": "Exponencial",
          "exp2": "Exponencial base 2",
          "fft_random_field": "Campo aleatório FFT",
          "filter_raster_features_by_area": "Filtrar feições raster por área",
          "find_patch_edge_cells": "Encontrar células de borda de mancha",
          "floor": "Piso",
          "greater_than": "Maior que",
          "greater_than_or_equal_to": "MaiorOuIgualA",
          "heat_map": "Mapa de calor",
          "idw_interpolation": "Interpolação IDW",
          "image_autocorrelation": "Autocorrelação de imagem",
          "image_correlation": "Correlação de imagens",
          "image_regression": "Regressão de imagens",
          "increment": "Incremento",
          "inplace_add": "Somar no local",
          "inplace_divide": "Dividir no local",
          "inplace_multiply": "Multiplicar no local",
          "inplace_subtract": "Subtrair no local",
          "integer_division": "Divisão inteira",
          "inverse_pca": "PCA inversa",
          "is_nodata": "É NoData",
          "kappa_index": "Índice kappa",
          "ks_normality_test": "Teste de normalidade KS",
          "less_than": "Menor que",
          "less_than_or_equal_to": "MenorOuIgualA",
          "list_unique_values_raster": "Listar valores únicos (raster)",
          "ln": "Logaritmo natural",
          "log10": "Logaritmo base 10",
          "log2": "Logaritmo base 2",
          "map_features": "Mapear feições",
          "max": "Máximo",
          "min": "Mínimo",
          "modified_shepard_interpolation": "Interpolação de Shepard modificada",
          "narrowness_index": "Índice de estreiteza",
          "negate": "Negar",
          "nibble": "Nibble",
          "not_equal_to": "Diferente de",
          "ordinary_cokriging": "Interpolação por cokrigagem ordinária",
          "paired_sample_t_test": "Teste t para amostras pareadas",
          "phi_coefficient": "Coeficiente phi",
          "principal_component_analysis": "Análise de componentes principais",
          "print_geotiff_tags": "Imprimir tags GeoTIFF",
          "quantiles": "Quantis",
          "radial_basis_function_interpolation": "Interpolação por funções de base radial",
          "radius_of_gyration": "Raio de giração",
          "random_field": "Campo aleatório",
          "random_forest_classification_fit": "Ajustar classificação por floresta aleatória",
          "random_forest_classification_predict": "Prever classificação por floresta aleatória",
          "random_forest_regression_fit": "Ajustar regressão por floresta aleatória",
          "random_forest_regression_predict": "Prever regressão por floresta aleatória",
          "random_sample": "Amostra aleatória",
          "raster_area": "Área do raster",
          "raster_calculator": "Calculadora raster",
          "raster_cell_assignment": "Atribuição de células raster",
          "raster_histogram": "Histograma raster",
          "raster_perimeter": "Perímetro do raster",
          "raster_summary_stats": "Estatísticas resumo do raster",
          "reciprocal": "Recíproco",
          "rescale_value_range": "Reescalar a faixa de valores",
          "root_mean_square_error": "Raiz do erro quadrático médio",
          "round": "Arredondar",
          "shape_complexity_index_raster": "Índice de complexidade de forma raster",
          "sieve": "Peneirar",
          "sin": "Seno",
          "sinh": "Seno hiperbólico",
          "sqrt": "Raiz quadrada",
          "square": "Quadrado",
          "tan": "Tangente",
          "tanh": "Tangente hiperbólica",
          "tin_interpolation": "Interpolação TIN",
          "to_degrees": "Para graus",
          "to_radians": "Para radianos",
          "trend_surface": "Superfície de tendência",
          "trend_surface_vector_points": "Superfície de tendência a partir de pontos vetoriais",
          "truncate": "Truncar",
          "turning_bands_simulation": "Simulação por bandas rotativas",
          "two_sample_ks_test": "Teste KS de duas amostras",
          "wilcoxon_signed_rank_test": "Teste de postos com sinais de Wilcoxon",
          "z_scores": "Escores Z",
          "zonal_statistics": "Estatísticas zonais",
          "buffer_raster": "Buffer raster",
          "cost_allocation": "Alocação de custo",
          "cost_distance": "Distância de custo",
          "cost_pathway": "Caminho de custo",
          "euclidean_allocation": "Alocação euclidiana",
          "euclidean_distance": "Distância euclidiana",
          "image_correlation_neighbourhood_analysis": "Análise de vizinhança por correlação de imagens",
          "natural_neighbour_interpolation": "Interpolação por vizinho natural",
          "nearest_neighbour_interpolation": "Interpolação por vizinho mais próximo",
          "add": "Somar",
          "average_overlay": "Sobreposição por média",
          "bool_and": "E lógico",
          "bool_not": "NÃO lógico",
          "bool_or": "OU lógico",
          "bool_xor": "OU exclusivo lógico",
          "count_if": "Contar se",
          "divide": "Dividir",
          "highest_position": "Posição mais alta",
          "lowest_position": "Posição mais baixa",
          "max_absolute_overlay": "Sobreposição por máximo absoluto",
          "max_overlay": "Sobreposição por máximo",
          "min_absolute_overlay": "Sobreposição por mínimo absoluto",
          "min_overlay": "Sobreposição por mínimo",
          "modulo": "Módulo",
          "multiply": "Multiplicar",
          "multiply_overlay": "Sobreposição por produto",
          "percent_equal_to": "Porcentagem igual a",
          "percent_greater_than": "Porcentagem maior que",
          "percent_less_than": "Porcentagem menor que",
          "pick_from_list": "Escolher de uma lista",
          "power": "Potência",
          "standard_deviation_overlay": "Sobreposição por desvio padrão",
          "subtract": "Subtrair",
          "sum_overlay": "Sobreposição por soma",
          "update_nodata_cells": "Atualizar células NoData",
          "weighted_overlay": "Sobreposição ponderada",
          "weighted_sum": "Soma ponderada",
          "conditional_evaluation": "Avaliação condicional",
          "reclass": "Reclassificar",
          "reclass_equal_interval": "Reclassificar por intervalos iguais",
          "geographically_weighted_regression_raster": "Regressão geograficamente ponderada (raster)",
          "getis_ord_gi_star_raster": "Gi* de Getis-Ord raster",
          "inhomogeneous_intensity_raster": "Intensidade não homogênea (raster)",
          "local_kriging": "Krigagem local",
          "local_morans_i_lisa_raster": "I de Moran local (LISA) raster",
          "ordinary_kriging": "Krigagem ordinária",
          "simple_kriging": "Krigagem simples",
          "spacetime_kriging": "Krigagem espaço-temporal",
          "spatial_error_regression_raster": "Regressão com erro espacial (raster)",
          "spatial_lag_regression_raster": "Regressão com defasagem espacial (raster)",
          "universal_kriging": "Krigagem universal",
          "change_vector_analysis": "Análise de vetor de mudança",
          "image_difference_change_detection": "Detecção de mudanças por diferença de imagens",
          "pca_based_change_detection": "Detecção de mudanças baseada em PCA",
          "post_classification_change": "Mudança pós-classificação",
          "write_function_memory_insertion": "Inserção em memória de função de escrita",
          "evaluate_training_sites": "Avaliar áreas de treinamento",
          "fuzzy_knn_classification": "Classificação KNN difusa",
          "generalize_classified_raster": "Generalizar raster classificado",
          "generalize_with_similarity": "Generalizar por similaridade",
          "k_means_clustering": "Agrupamento K-médias",
          "knn_classification": "Classificação KNN",
          "knn_regression": "Regressão KNN",
          "logistic_regression": "Regressão logística",
          "min_dist_classification": "Classificação por distância mínima",
          "modified_k_means_clustering": "Agrupamento K-médias modificado",
          "nnd_classification": "Classificação NND",
          "otsu_thresholding": "Limiarização de Otsu",
          "parallelepiped_classification": "Classificação por paralelepípedos",
          "random_forest_classification": "Classificação por floresta aleatória",
          "random_forest_regression": "Regressão por floresta aleatória",
          "svm_classification": "Classificação SVM",
          "svm_regression": "Regressão SVM",
          "canny_edge_detection": "Detecção de bordas de Canny",
          "corner_detection": "Detecção de cantos",
          "laplacian_filter": "Filtro laplaciano",
          "laplacian_of_gaussians_filter": "Filtro laplaciano de gaussianas",
          "prewitt_filter": "Filtro de Prewitt",
          "roberts_cross_filter": "Filtro de cruz de Roberts",
          "sobel_filter": "Filtro de Sobel",
          "balance_contrast_enhancement": "Realce de contraste balanceado",
          "create_colour_composite": "Criar composição colorida",
          "direct_decorrelation_stretch": "Realce por descorrelação direta",
          "false_colour_composite": "Composição em falsa cor",
          "gamma_correction": "Correção gama",
          "gaussian_contrast_stretch": "Realce de contraste gaussiano",
          "histogram_equalization": "Equalização de histograma",
          "histogram_matching": "Casamento de histograma",
          "histogram_matching_two_images": "Casamento de histograma entre duas imagens",
          "ihs_to_rgb": "IHS para RGB",
          "min_max_contrast_stretch": "Realce de contraste mín-máx",
          "mosaic": "Mosaico",
          "mosaic_with_feathering": "Mosaico com suavização de bordas",
          "normalized_difference_index": "Índice de diferença normalizada",
          "panchromatic_sharpening": "Fusão pancromática",
          "percentage_contrast_stretch": "Realce de contraste por porcentagem",
          "piecewise_contrast_stretch": "Realce de contraste por partes",
          "resample": "Reamostrar",
          "rgb_to_ihs": "RGB para IHS",
          "sigmoidal_contrast_stretch": "Realce de contraste sigmoidal",
          "split_colour_composite": "Separar composição colorida",
          "standard_deviation_contrast_stretch": "Realce de contraste por desvio padrão",
          "true_colour_composite": "Composição em cor verdadeira",
          "adaptive_filter": "Filtro adaptativo",
          "anisotropic_diffusion_filter": "Filtro de difusão anisotrópica",
          "bilateral_filter": "Filtro bilateral",
          "closing": "Fechamento",
          "conservative_smoothing_filter": "Filtro de suavização conservadora",
          "diff_of_gaussians_filter": "Filtro de diferença de gaussianas",
          "diversity_filter": "Filtro de diversidade",
          "edge_preserving_mean_filter": "Filtro de média com preservação de bordas",
          "emboss_filter": "Filtro de relevo",
          "fast_almost_gaussian_filter": "Filtro gaussiano rápido aproximado",
          "flip_image": "Inverter imagem",
          "frangi_filter": "Filtro de Frangi",
          "gabor_filter_bank": "Banco de filtros de Gabor",
          "gaussian_filter": "Filtro gaussiano",
          "glcm_texture": "Textura GLCM",
          "guided_filter": "Filtro guiado",
          "high_pass_bilateral_filter": "Filtro bilateral passa-alta",
          "high_pass_filter": "Filtro passa-alta",
          "high_pass_median_filter": "Filtro de mediana passa-alta",
          "integral_image_transform": "Transformada de imagem integral",
          "k_nearest_mean_filter": "Filtro de média dos K vizinhos",
          "kuwahara_filter": "Filtro de Kuwahara",
          "lee_filter": "Filtro de Lee",
          "lidar_ground_point_filter": "Filtro de pontos de solo LiDAR",
          "line_detection_filter": "Filtro de detecção de linhas",
          "line_thinning": "Afinamento de linhas",
          "majority_filter": "Filtro de maioria",
          "maximum_filter": "Filtro de máximo",
          "mean_filter": "Filtro de média",
          "median_filter": "Filtro de mediana",
          "minimum_filter": "Filtro de mínimo",
          "non_local_means_filter": "Filtro de médias não locais",
          "olympic_filter": "Filtro olímpico",
          "opening": "Abertura",
          "percentile_filter": "Filtro de percentil",
          "range_filter": "Filtro de amplitude",
          "remove_spurs": "Remover esporões",
          "savitzky_golay_2d_filter": "Filtro Savitzky-Golay 2D",
          "scharr_filter": "Filtro de Scharr",
          "standard_deviation_filter": "Filtro de desvio padrão",
          "thicken_raster_line": "Espessar linhas raster",
          "tophat_transform": "Transformada de cartola",
          "total_filter": "Filtro de soma",
          "unsharp_masking": "Máscara de nitidez",
          "user_defined_weights_filter": "Filtro de pesos definidos pelo usuário",
          "wiener_filter": "Filtro de Wiener",
          "build_object_hierarchy_multiscale": "Construir hierarquia de objetos multiescala",
          "classify_objects_ensemble_pro": "Classificar objetos por conjunto (Pro)",
          "classify_objects_random_forest": "Classificar objetos por floresta aleatória",
          "classify_objects_rules_basic": "Classificar objetos por regras (básico)",
          "classify_objects_rules_hierarchical": "Classificar objetos por regras hierárquicas",
          "classify_objects_svm": "Classificar objetos por SVM",
          "evaluate_object_classification_accuracy": "Avaliar a acurácia da classificação de objetos",
          "evaluate_segmentation_quality_pro": "Avaliar a qualidade da segmentação (Pro)",
          "image_segmentation": "Segmentação de imagem",
          "image_slider": "Controle deslizante de imagens",
          "image_stack_profile": "Perfil de pilha de imagens",
          "obia_audit_report_pro": "Relatório de auditoria OBIA (Pro)",
          "obia_batch_orchestrator_pro": "Orquestrador de lotes OBIA (Pro)",
          "obia_pipeline_basic": "Fluxo OBIA (básico)",
          "object_class_probability_maps": "Mapas de probabilidade de classe de objeto",
          "object_features_context_neighbors": "Feições de objeto: vizinhos de contexto",
          "object_features_shape_basic": "Feições de objeto: forma (básico)",
          "object_features_spectral_basic": "Feições de objeto: espectral (básico)",
          "object_features_texture_glcm_basic": "Feições de objeto: textura GLCM (básico)",
          "object_features_topology_relations": "Feições de objeto: relações topológicas",
          "object_uncertainty_diagnostics_pro": "Diagnóstico de incerteza de objetos (Pro)",
          "objects_boundary_refinement_pro": "Refinamento de limites de objetos (Pro)",
          "objects_enforce_min_mapping_unit": "Aplicar unidade mínima mapeável aos objetos",
          "polygons_to_segments": "Polígonos para segmentos",
          "propagate_labels_across_hierarchy": "Propagar rótulos pela hierarquia",
          "segment_graph_felzenszwalb": "Segmentação por grafo de Felzenszwalb",
          "segment_multiresolution_hierarchical": "Segmentação multirresolução hierárquica",
          "segment_scale_parameter_optimizer": "Otimizador do parâmetro de escala de segmentação",
          "segment_slic_superpixels": "Segmentação em superpixels SLIC",
          "segment_watershed_markers": "Segmentação por marcadores de bacias",
          "segments_merge_small_regions": "Mesclar regiões pequenas de segmentos",
          "segments_split_low_cohesion": "Dividir segmentos de baixa coesão",
          "segments_to_polygons": "Segmentos para polígonos",
          "brdf_normalization": "Normalização BRDF",
          "correct_vignetting": "Corrigir vinhetagem",
          "dark_object_subtraction": "Subtração do objeto escuro",
          "dn_to_toa_reflectance": "De ND para reflectância TOA",
          "terrain_corrected_optical_analytics": "Analítica óptica corrigida pelo terreno",
          "cloude_pottier_decomposition": "Decomposição de Cloude-Pottier",
          "enhanced_lee_filter": "Filtro de Lee aprimorado",
          "freeman_durden_decomposition": "Decomposição de Freeman-Durden",
          "frost_filter": "Filtro de Frost",
          "gamma_map_filter": "Filtro Gamma MAP",
          "h_alpha_wisart_classification": "Classificação H-Alpha Wisart",
          "kuan_filter": "Filtro de Kuan",
          "refined_lee_filter": "Filtro de Lee refinado",
          "wisart_iterative_clustering": "Agrupamento iterativo Wisart",
          "yamaguchi_4component_decomposition": "Decomposição de Yamaguchi de 4 componentes",
          "continuum_removal": "Remoção do contínuo",
          "linear_spectral_unmixing": "Desmistura espectral linear",
          "minimum_noise_fraction": "Fração de ruído mínima",
          "spectral_angle_mapper": "Mapeador de ângulo espectral",
          "spectral_library_matching": "Correspondência com biblioteca espectral",
          "land_surface_temperature_single_channel": "Temperatura de superfície por canal único",
          "land_surface_temperature_split_window": "Temperatura de superfície por janela dividida",
          "ndvi_based_emissivity": "Emissividade baseada em NDVI",
          "assess_route": "Avaliar rota",
          "breakline_mapping": "Mapeamento de linhas de quebra",
          "convergence_index": "Índice de convergência",
          "dem_void_filling": "Preenchimento de vazios do MDE",
          "deviation_from_mean_elevation": "Desvio em relação à elevação média",
          "difference_from_mean_elevation": "Diferença em relação à elevação média",
          "directional_relief": "Relevo direcional",
          "elev_above_pit": "Elevação acima da cova",
          "elev_above_pit_dist": "Distância da elevação acima da cova",
          "elevation_percentile": "Percentil de elevação",
          "embankment_mapping": "Mapeamento de aterros",
          "exposure_towards_wind_flux": "Exposição ao fluxo do vento",
          "feature_preserving_smoothing": "Suavização com preservação de feições",
          "feature_preserving_smoothing_multiscale": "Suavização multiescala com preservação de feições",
          "fetch_analysis": "Análise de pista de vento",
          "fill_missing_data": "Preencher dados faltantes",
          "find_ridges": "Encontrar cristas",
          "hillshade": "Sombreamento do relevo",
          "hypsometrically_tinted_hillshade": "Sombreamento do relevo com tonalização hipsométrica",
          "local_hypsometric_analysis": "Análise hipsométrica local",
          "low_points_on_headwater_divides": "Pontos baixos em divisores de cabeceira",
          "map_off_terrain_objects": "Mapear objetos fora do terreno",
          "max_downslope_elev_change": "Variação máxima de elevação a jusante",
          "max_upslope_elev_change": "Variação máxima de elevação a montante",
          "min_downslope_elev_change": "Variação mínima de elevação a jusante",
          "multidirectional_hillshade": "Sombreamento multidirecional",
          "num_downslope_neighbours": "Número de vizinhos a jusante",
          "num_upslope_neighbours": "Número de vizinhos a montante",
          "profile": "Perfil",
          "remove_off_terrain_objects": "Remover objetos fora do terreno",
          "ridge_and_valley_vectors": "Vetores de cristas e vales",
          "slope_vs_aspect_plot": "Gráfico de declividade versus orientação",
          "slope_vs_elev_plot": "Gráfico de declividade versus elevação",
          "smooth_vegetation_residual": "Suavizar o resíduo de vegetação",
          "surface_area_ratio": "Razão de área superficial",
          "topographic_hachures": "Hachuras topográficas",
          "accumulation_curvature": "Curvatura de acumulação",
          "aspect": "Orientação",
          "casorati_curvature": "Curvatura de Casorati",
          "curvedness": "Curvidade",
          "difference_curvature": "Curvatura de diferença",
          "gaussian_curvature": "Curvatura gaussiana",
          "generating_function": "Função geradora",
          "horizontal_excess_curvature": "Curvatura de excesso horizontal",
          "maximal_curvature": "Curvatura máxima",
          "mean_curvature": "Curvatura média",
          "minimal_curvature": "Curvatura mínima",
          "plan_curvature": "Curvatura planar",
          "principal_curvature_direction": "Direção da curvatura principal",
          "profile_curvature": "Curvatura de perfil",
          "relative_aspect": "Orientação relativa",
          "ring_curvature": "Curvatura anelar",
          "rotor": "Rotor",
          "shape_index": "Índice de forma",
          "slope": "Declividade",
          "tangential_curvature": "Curvatura tangencial",
          "total_curvature": "Curvatura total",
          "unsphericity": "Não esfericidade",
          "vertical_excess_curvature": "Curvatura de excesso vertical",
          "elev_relative_to_min_max": "Elevação relativa ao mín-máx",
          "geomorphons": "Geomórfons",
          "hypsometric_analysis": "Análise hipsométrica",
          "multiscale_topographic_position_class": "Classe de posição topográfica multiescala",
          "pennock_landform_classification": "Classificação de formas de relevo de Pennock",
          "percent_elev_range": "Porcentagem da amplitude de elevação",
          "relative_topographic_position": "Posição topográfica relativa",
          "max_anisotropy_dev": "Desvio máximo de anisotropia",
          "max_anisotropy_dev_signature": "Assinatura do desvio máximo de anisotropia",
          "max_difference_from_mean": "Diferença máxima em relação à média",
          "max_elev_dev_signature": "Assinatura do desvio máximo de elevação",
          "max_elevation_deviation": "Desvio máximo de elevação",
          "multiscale_curvatures": "Curvaturas multiescala",
          "multiscale_elevated_index": "Índice multiescala de elevação",
          "multiscale_elevation_percentile": "Percentil de elevação multiescala",
          "multiscale_low_lying_index": "Índice multiescala de áreas baixas",
          "multiscale_roughness": "Rugosidade multiescala",
          "multiscale_roughness_signature": "Assinatura de rugosidade multiescala",
          "multiscale_std_dev_normals": "Desvio padrão multiescala das normais",
          "multiscale_std_dev_normals_signature": "Assinatura do desvio padrão multiescala das normais",
          "multiscale_topographic_position_image": "Imagem de posição topográfica multiescala",
          "topographic_position_animation": "Animação de posição topográfica",
          "average_normal_vector_angular_deviation": "Desvio angular médio do vetor normal",
          "circular_variance_of_aspect": "Variância circular da orientação",
          "edge_density": "Densidade de bordas",
          "ruggedness_index": "Índice de rugosidade",
          "spherical_std_dev_of_normals": "Desvio padrão esférico das normais",
          "standard_deviation_of_slope": "Desvio padrão da declividade",
          "average_horizon_distance": "Distância média ao horizonte",
          "horizon_angle": "Ângulo do horizonte",
          "horizon_area": "Área do horizonte",
          "openness": "Abertura",
          "shadow_animation": "Animação de sombras",
          "shadow_image": "Imagem de sombras",
          "sky_view_factor": "Fator de visão do céu",
          "skyline_analysis": "Análise da linha do horizonte",
          "time_in_daylight": "Tempo sob luz do dia",
          "viewshed": "Bacia visual",
          "visibility_index": "Índice de visibilidade",
          "topo_render": "Renderização topográfica",
          "add_surface_information": "Adicionar informações de superfície",
          "add_z_information": "Adicionar informações Z",
          "adjust_3d_z": "Ajustar Z em 3D",
          "adjust_stream_to_raster": "Ajustar curso d'água ao raster",
          "aggregate_points": "Agregar pontos",
          "aggregate_polygons": "Agregar polígonos",
          "align_features": "Alinhar feições",
          "apportion_polygon": "Repartir polígono",
          "areal_interpolation": "Interpolação areal",
          "assign_projection_vector": "Atribuir projeção ao vetorial",
          "attribute_uncertainty": "Incerteza de atributos",
          "bivariate_spatial_association": "Associação espacial bivariada",
          "buffer_3d": "Buffer 3D",
          "build_balanced_zones": "Construir zonas equilibradas",
          "build_seamlines": "Construir linhas de junção",
          "calculate_adjacent_fields": "Calcular campos adjacentes",
          "calculate_central_meridian_and_parallels": "Calcular meridiano central e paralelos",
          "calculate_composite_index": "Calcular índice composto",
          "calculate_distance_band": "Calcular banda de distância",
          "calculate_end_time": "Calcular hora de término",
          "calculate_grid_convergence_angle": "Calcular ângulo de convergência meridiana",
          "calculate_missing_z_values": "Calcular valores Z faltantes",
          "calculate_motion_statistics": "Calcular estatísticas de movimento",
          "calculate_polygon_main_angle": "Calcular ângulo principal do polígono",
          "calculate_rates": "Calcular taxas",
          "calculate_transformation_errors": "Calcular erros de transformação",
          "calculate_utm_zone": "Calcular zona UTM",
          "cartogram": "Cartograma",
          "causal_inference_analysis": "Análise de inferência causal",
          "cell_records_to_sectors": "Registros de células para setores",
          "central_feature": "Feição central / média direcional linear",
          "change_point_detection": "Detecção de pontos de mudança",
          "collapse_dual_lines_to_centerline": "Colapsar linhas duplas para eixo central",
          "collapse_hydro_polygon": "Colapsar polígono hidrográfico",
          "collapse_road_detail": "Colapsar detalhe viário",
          "collect_events": "Coletar eventos",
          "colocation_analysis": "Análise de colocalização",
          "color_polygons": "Colorir polígonos",
          "compare_spatial_weights": "Comparar pesos espaciais",
          "compute_accuracy_for_object_detection": "Calcular acurácia da detecção de objetos",
          "construct_sight_lines": "Construir linhas de visada",
          "contiguous_cartogram": "Cartograma contíguo",
          "contour_list": "Lista de curvas de nível",
          "convert_coordinate_notation": "Converter notação de coordenadas",
          "cost_connectivity": "Conectividade de custo",
          "count_overlapping_features": "Contar feições sobrepostas",
          "create_accuracy_assessment_points": "Criar pontos de avaliação de acurácia",
          "create_cartographic_partitions": "Criar partições cartográficas",
          "create_overpass": "Criar viaduto",
          "create_routes": "Criar rotas",
          "create_spatial_sampling_locations": "Criar locais de amostragem espacial",
          "create_spatially_balanced_points": "Criar pontos espacialmente equilibrados",
          "create_underpass": "Criar passagem inferior",
          "cul_de_sac_masks": "Máscaras de ruas sem saída",
          "delineate_built_up_areas": "Delimitar áreas urbanizadas",
          "dendrogram": "Dendrograma",
          "densify_sampling_network": "Densificar a rede de amostragem",
          "detect_bright_ocean_objects": "Detectar objetos brilhantes no oceano",
          "detect_dark_ocean_areas": "Detectar áreas escuras do oceano",
          "detect_feature_changes": "Detectar mudanças em feições",
          "detect_graphic_conflict": "Detectar conflito gráfico",
          "detect_incidents": "Detectar incidentes",
          "dice": "Fatiar em cubos",
          "difference_3d": "Diferença 3D",
          "dimension_reduction": "Redução de dimensionalidade",
          "directional_distribution": "Distribuição direcional",
          "directional_trend": "Tendência direcional",
          "disperse_markers": "Dispersar marcadores",
          "dissolve_route_events": "Dissolver eventos de rota",
          "edgematch_features": "Casar feições nas bordas",
          "eighty_twenty_analysis": "Análise oitenta-vinte",
          "eliminate_polygon_part": "Eliminar parte de polígono",
          "eliminate_polygons": "Eliminar polígonos",
          "emerging_hot_spot_analysis": "Análise de pontos quentes emergentes",
          "enclose_multipatch": "Fechar multipatch",
          "estimate_time_to_event": "Estimar tempo até o evento",
          "evaluate_bin_sizes": "Avaliar tamanhos de classe",
          "evaluate_variable_influence": "Avaliar a influência das variáveis",
          "exploratory_interpolation": "Interpolação exploratória",
          "exploratory_regression": "Regressão exploratória",
          "extract_locations_from_text": "Extrair localizações de texto",
          "extract_water_sar": "Extrair água (SAR)",
          "extrude_between": "Extrudar entre",
          "feature_outline_masks": "Máscaras de contorno de feições",
          "feature_to_line": "Feição para linha",
          "feature_vertices_to_points": "Vértices de feição para pontos",
          "features_to_kml": "Feições para KML",
          "fence_diagram": "Diagrama de cerca",
          "fill_missing_values": "Preencher valores faltantes",
          "find_dwell_locations": "Encontrar locais de permanência",
          "find_identical": "Encontrar idênticos",
          "find_meeting_locations": "Encontrar locais de encontro",
          "find_space_time_matches": "Encontrar correspondências espaço-temporais",
          "flip_line": "Inverter linha",
          "forest_based_forecast": "Previsão baseada em florestas",
          "generalized_linear_regression": "Regressão linear generalizada",
          "generate_breach_lines": "Gerar linhas de rompimento",
          "generate_near_table": "Gerar tabela de proximidade",
          "generate_network_swm": "Gerar SWM da rede",
          "generate_od_links": "Gerar vínculos origem-destino",
          "generate_points_along_3d_lines": "Gerar pontos ao longo de linhas 3D",
          "generate_spatial_weights_matrix": "Gerar matriz de pesos espaciais",
          "generate_subset_polygons": "Gerar polígonos de subconjunto",
          "generate_transects_along_lines": "Gerar transectos ao longo de linhas",
          "geodetic_densify": "Densificar geodesicamente",
          "geographically_weighted_regression": "Regressão geograficamente ponderada",
          "geotagged_photos_to_points": "Fotos geoetiquetadas para pontos",
          "graphic_buffer": "Buffer gráfico",
          "grid_index_features": "Feições de índice de grade",
          "group_by_proximity": "Agrupar por proximidade",
          "hdbscan": "Agrupamento HDBSCAN",
          "getis_ord_general_g": "Agrupamento alto/baixo (G geral de Getis-Ord)",
          "hot_spot_analysis_comparison": "Comparação de análises de pontos quentes",
          "identify_narrow_polygons": "Identificar polígonos estreitos",
          "incremental_spatial_autocorrelation": "Autocorrelação espacial incremental",
          "inside_3d": "Dentro em 3D",
          "integrate": "Integrar",
          "interpolate_shape": "Interpolar forma",
          "intersect_3d": "Interseção 3D",
          "intersect_3d_line_with_surface": "Interseção de linha 3D com superfície",
          "intersecting_layers_masks": "Máscaras de camadas que se intersectam",
          "intervisibility": "Intervisibilidade",
          "is_closed_3d": "Está fechado em 3D",
          "line_of_sight": "Linha de visada",
          "local_bivariate_relationships": "Relações bivariadas locais",
          "local_outlier_analysis": "Análise local de outliers",
          "locate_lines_along_routes": "Localizar linhas ao longo de rotas",
          "median_center": "Centro mediano",
          "merge_divided_roads": "Mesclar rodovias divididas",
          "merge_lines_by_pseudo_node": "Mesclar linhas por pseudonó",
          "minimum_bounding_volume": "Volume envolvente mínimo",
          "multipatch_footprint": "Contorno de multipatch",
          "multipatch_to_mesh": "Multipatch para malha",
          "multiple_ring_buffer": "Buffer de múltiplos anéis",
          "mgwr": "Regressão geograficamente ponderada multiescala",
          "multivariate_clustering": "Agrupamento multivariado",
          "near_3d": "Proximidade 3D",
          "neighborhood_summary_statistics": "Estatísticas resumo de vizinhança",
          "non_maximum_suppression": "Supressão de não máximos",
          "optics_clustering": "Agrupamento OPTICS",
          "optimal_corridor_connections": "Conexões ótimas de corredor",
          "optimal_path_as_line": "Caminho ótimo como linha",
          "optimized_hot_spot_analysis": "Análise otimizada de pontos quentes",
          "optimized_outlier_analysis": "Análise otimizada de outliers",
          "pairwise_comparison_weights": "Pesos por comparação pareada",
          "pivot_table": "Tabela dinâmica",
          "points_to_line": "Pontos para linha",
          "points_to_path": "Pontos para trajeto",
          "polygon_neighbors": "Vizinhos de polígono",
          "polygon_volume": "Volume de polígono",
          "propagate_displacement": "Propagar deslocamento",
          "raster_domain": "Domínio do raster",
          "raster_to_weighted_points": "Raster para pontos ponderados",
          "reclassify_field": "Reclassificar campo",
          "reconstruct_tracks": "Reconstruir trajetos",
          "reduce_point_density": "Reduzir a densidade de pontos",
          "regularize_adjacent_building_footprint": "Regularizar contornos de edificações adjacentes",
          "regularize_building_footprints": "Regularizar contornos de edificações",
          "remove_overlap_multiple": "Remover sobreposição (múltiplos)",
          "render_vector_png": "Renderizar vetorial em PNG",
          "repair_geometry": "Reparar geometria",
          "resolve_building_conflicts": "Resolver conflitos de edificações",
          "resolve_road_conflicts": "Resolver conflitos viários",
          "ripleys_k": "K de Ripley",
          "rubbersheet_features": "Ajustar feições por rubbersheeting",
          "semivariogram_sensitivity": "Sensibilidade do semivariograma",
          "similarity_search": "Busca por similaridade",
          "simplify_3d_line": "Simplificar linha 3D",
          "simplify_building": "Simplificar edificação",
          "simplify_by_circular_arcs": "Simplificar por arcos circulares",
          "simplify_by_tangent_segments": "Simplificar por segmentos tangentes",
          "simplify_shared_edges": "Simplificar bordas compartilhadas",
          "smooth_natural_features": "Suavizar feições naturais",
          "smooth_shared_edges": "Suavizar bordas compartilhadas",
          "snap_tracks": "Ajustar trajetos",
          "sort_features": "Ordenar feições",
          "spatial_eigenvector_filtering": "Filtragem por autovetores espaciais (MESF)",
          "spatial_outlier_detection": "Detecção de outliers espaciais",
          "spatially_constrained_multivariate_clustering": "Agrupamento multivariado com restrição espacial",
          "split_by_attributes": "Dividir por atributos",
          "split_by_features": "Dividir por feições",
          "split_line_at_point": "Dividir linha em um ponto",
          "stack_profile": "Perfil de pilha",
          "strip_map_index_features": "Feições de índice em faixas",
          "subdivide_polygon": "Subdividir polígono",
          "subset_features": "Subconjunto de feições",
          "summarize_nearby": "Resumir nas proximidades",
          "summarize_percent_change": "Resumir variação percentual",
          "summarize_within": "Resumir dentro de",
          "summary_statistics": "Estatísticas resumo",
          "sun_shadow_volume": "Volume de sombra solar",
          "surface_difference": "Diferença de superfícies",
          "table_to_geometry": "Tabela para geometria",
          "tabulate_intersection": "Tabular interseção",
          "thin_road_network": "Afinar a rede viária",
          "tile_grid_polygons": "Polígonos de grade de ladrilhos",
          "time_series_clustering": "Agrupamento de séries temporais",
          "time_series_forecast": "Previsão de séries temporais",
          "time_series_smoothing": "Suavização de séries temporais",
          "trace_proximity_events": "Rastrear eventos de proximidade",
          "transform_features": "Transformar feições",
          "transform_fields": "Transformar campos",
          "transform_route_events": "Transformar eventos de rota",
          "transpose_fields": "Transpor campos",
          "trim_line": "Aparar linha",
          "union_3d": "União 3D",
          "validate_flow_direction": "Validar direção de fluxo",
          "voxel_isosurface": "Isossuperfície de voxels",
          "buffer_vector": "Buffer vetorial",
          "directional_variogram": "Análise de variograma direcional",
          "estimate_variogram": "Estimar variograma",
          "fit_variogram": "Ajustar modelo de variograma",
          "add_field": "Adicionar campo",
          "add_geometry_attributes": "Adicionar atributos de geometria",
          "attribute_correlation": "Correlação de atributos",
          "attribute_histogram": "Histograma de atributos",
          "attribute_scattergram": "Diagrama de dispersão de atributos",
          "delete_field": "Excluir campo",
          "extract_by_attribute": "Extrair por atributo",
          "field_calculator": "Calculadora de campos",
          "filter_vector_features_by_area": "Filtrar feições vetoriais por área",
          "list_unique_values": "Listar valores únicos",
          "rename_field": "Renomear campo",
          "centroid_vector": "Centroide vetorial",
          "concave_hull": "Envoltória côncava",
          "densify_features": "Densificar feições",
          "eliminate_coincident_points": "Eliminar pontos coincidentes",
          "extend_vector_lines": "Estender linhas vetoriais",
          "merge_line_segments": "Mesclar segmentos de linha",
          "minimum_bounding_box": "Retângulo envolvente mínimo",
          "minimum_bounding_circle": "Círculo envolvente mínimo",
          "minimum_bounding_envelope": "Envelope envolvente mínimo",
          "minimum_convex_hull": "Envoltória convexa mínima",
          "polygonize": "Poligonizar",
          "representative_point_vector": "Ponto representativo vetorial",
          "simplify_features": "Simplificar feições",
          "smooth_vectors": "Suavizar vetores",
          "snap_endnodes": "Ajustar nós finais",
          "split_vector_lines": "Dividir linhas vetoriais",
          "split_with_lines": "Dividir com linhas",
          "locate_points_along_routes": "Localizar pontos ao longo de rotas",
          "points_along_lines": "Pontos ao longo de linhas",
          "route_calibrate": "Calibrar rota",
          "route_event_lines_from_layer": "Linhas de eventos de rota a partir de camada",
          "route_event_lines_from_table": "Linhas de eventos de rota a partir de tabela",
          "route_event_merge": "Mesclar eventos de rota",
          "route_event_overlay": "Sobrepor eventos de rota",
          "route_event_points_from_layer": "Pontos de eventos de rota a partir de camada",
          "route_event_points_from_table": "Pontos de eventos de rota a partir de tabela",
          "route_event_split": "Dividir eventos de rota",
          "route_measure_qa": "Controle de qualidade das medidas de rota",
          "route_recalibrate": "Recalibrar rota",
          "snap_events_to_routes": "Ajustar eventos às rotas",
          "download_osm_vector": "Baixar vetorial do OSM",
          "clip": "Recortar",
          "difference": "Diferença",
          "dissolve": "Dissolver",
          "erase": "Apagar",
          "identity": "Identidade",
          "intersect": "Interseção",
          "line_intersections": "Interseções de linhas",
          "line_polygon_clip": "Recorte de linhas por polígono",
          "near": "Proximidade",
          "select_by_location": "Selecionar por localização",
          "spatial_join": "Junção espacial",
          "symmetrical_difference": "Diferença simétrica",
          "union": "União",
          "update": "Atualizar",
          "construct_vector_tin": "Construir TIN vetorial",
          "contours_from_points": "Curvas de nível a partir de pontos",
          "contours_from_raster": "Curvas de nível a partir de raster",
          "extract_nodes": "Extrair nós",
          "extract_raster_values_at_points": "Extrair valores raster em pontos",
          "find_lowest_or_highest_points": "Encontrar pontos mais baixos ou mais altos",
          "hexagonal_grid_from_raster_base": "Malha hexagonal com base raster",
          "hexagonal_grid_from_vector_base": "Malha hexagonal com base vetorial",
          "layer_footprint_raster": "Contorno da camada raster",
          "layer_footprint_vector": "Contorno da camada vetorial",
          "medoid": "Medoide",
          "random_points_in_polygon": "Pontos aleatórios em polígono",
          "rectangular_grid_from_raster_base": "Malha retangular com base raster",
          "rectangular_grid_from_vector_base": "Malha retangular com base vetorial",
          "vector_hex_binning": "Agrupamento hexagonal vetorial",
          "voronoi_diagram": "Diagrama de Voronoi",
          "compactness_ratio": "Razão de compacidade",
          "deviation_from_regional_direction": "Desvio da direção regional",
          "elongation_ratio": "Razão de alongamento",
          "hole_proportion": "Proporção de buracos",
          "linearity_index": "Índice de linearidade",
          "narrowness_index_vector": "Índice de estreiteza vetorial",
          "patch_orientation": "Orientação da mancha",
          "perimeter_area_ratio": "Razão perímetro-área",
          "polygon_area": "Área do polígono",
          "polygon_long_axis": "Eixo maior do polígono",
          "polygon_perimeter": "Perímetro do polígono",
          "polygon_short_axis": "Eixo menor do polígono",
          "related_circumscribing_circle": "Círculo circunscrito relacionado",
          "shape_complexity_index_vector": "Índice de complexidade de forma vetorial",
          "envelope_test": "Teste de envelope",
          "getis_ord_gi_star": "Gi* de Getis-Ord",
          "global_morans_i": "I de Moran global",
          "hotspot_vs_process": "Ponto quente versus processo",
          "inhomogeneous_baseline": "Linha de base não homogênea",
          "local_morans_i_lisa": "I de Moran local (LISA)",
          "nearest_neighbour_index": "Índice do vizinho mais próximo",
          "point_pattern_envelope": "Envelope do padrão de pontos",
          "point_process_residuals": "Resíduos do processo pontual",
          "point_process_residuals_comparison": "Comparação de resíduos de processos pontuais",
          "quadrat_count_test": "Teste de contagem por quadrats",
          "ripleys_k_function": "Função K de Ripley",
          "ripleys_k_test": "Teste K de Ripley",
          "spatial_error_regression": "Regressão com erro espacial",
          "spatial_lag_regression": "Regressão com defasagem espacial"
        },
        "menuSubcategory": {
          "geolibre_wasm": "GeoLibre (WASM)",
          "geometry_topology": "Geometria e topologia",
          "raster_vector_conversion": "Conversão raster/vetorial",
          "vector_table_i_o": "E/S de vetores e tabelas",
          "depressions_storage": "Depressões e armazenamento",
          "flow_routing": "Roteamento de fluxo",
          "hydrologic_indices": "Índices hidrológicos",
          "streams_longitudinal_analysis": "Cursos d'água - Análise longitudinal",
          "streams_network_extraction": "Cursos d'água - Extração da rede",
          "streams_ordering_metrics": "Cursos d'água - Métricas de ordem",
          "watersheds_basins": "Bacias hidrográficas",
          "analysis_metrics": "Métricas de análise",
          "filtering_classification": "Filtragem e classificação",
          "i_o_management": "E/S e gerenciamento",
          "interpolation_gridding": "Interpolação e gradeamento",
          "network_analysis": "Análise de redes",
          "general": "Geral",
          "distance_cost": "Distância e custo",
          "local_neighborhood": "Vizinhança local",
          "overlay_math": "Álgebra de sobreposição",
          "reclassify_mask": "Reclassificar e mascarar",
          "spatial_statistics": "Estatística espacial",
          "change_detection": "Detecção de mudanças",
          "classification": "Classificação",
          "edge_feature_detection": "Detecção de bordas e feições",
          "enhancement_contrast": "Realce e contraste",
          "filters": "Filtros",
          "obia": "OBIA",
          "radiometric_correction": "Correção radiométrica",
          "sar": "SAR",
          "spectral_analytics": "Análise espectral",
          "thermal_emissivity": "Térmico e emissividade",
          "derivatives": "Derivadas",
          "landform_indices": "Índices de formas de relevo",
          "multiscale_signatures": "Assinaturas multiescala",
          "roughness_texture": "Rugosidade e textura",
          "visibility": "Visibilidade",
          "workflow_products": "Produtos de fluxo de trabalho",
          "attribute_analysis": "Análise de atributos",
          "geometry_processing": "Processamento de geometria",
          "linear_referencing": "Referenciamento linear",
          "online_data": "Dados on-line",
          "overlay_analysis": "Análise de sobreposição",
          "sampling_gridding": "Amostragem e gradeamento",
          "shape_metrics": "Métricas de forma"
        }
      }
    }
  }
}
